PIC单片机CCP模块技术笔记
11章TIMER2、ccp模块
PIC单片机原理 单片机原理
PIC单片机原理 单片机原理
CCP1 Module: Capture/Compare/PWM Register 1 (CCPR1) is comprised of two 8-bit registers: CCPR1L (low byte) and CCPR1H (high byte). The CCP1CON register controls the operation of CCP1. The special event trigger is generated by a compare match and will reset Timer1.
PIC单片机原理 单片机原理
bit 3-0 CCPxM3:CCPxM0: CCPx Mode Select bits 0000 = Capture/Compare/PWM disabled (resets CCPx module) 0100 = Capture mode, every falling edge 0101 = Capture mode, every rising edge 0110 = Capture mode, every 4th rising edge 0111 = Capture mode, every 16th rising edge
PIC单片机原理 单片机原理
11xx = PWM mode
PIC单片机原理 单片机原理
11.3 Capture Mode
In Capture mode, CCPR1H:CCPR1L captures the 16-bit value of the TMR1 register when an event occurs on pin RC2/CCP1. An event is defined as one of the following: • Every falling edge • Every rising edge • Every 4th rising edge • Every 16th rising edge
PIC单片机C语言编程实例六 利用CCP模块设计频率计
第10章利用CCP模块设计频率计10.5 程序设计10.5.4 程序清单#include <pic.h>#include <stdio.h>#include <math.h>//本程序利用CCP1模块实现一个“简易数字频率计”的功能const char table[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0xFF};//不带小数点的显示段码表const char table0[11]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0xFF};//带小数点的显示段码表bank3 int cp1z[11];//定义一个数组,用于存放各次的捕捉值union cp1{int y1;unsigned char cp1e[2];}cp1u;//定义一个共用体unsigned char COUNTW,COUNT;//测量脉冲个数寄存器unsigned char COUNTER,data,k;unsigned char FLAG @ 0XEF;#define FLAGIT(adr,bit) ((unsigned)(&adr)*8+(bit)) //绝对寻址位操作指令static b it FLAG1 @ FLAGIT(FLAG,0);static b it FLAG2 @ FLAGIT(FLAG,1);static b it FLAG3 @ FLAGIT(FLAG,2);unsigned char s[4];//定义一个显示缓冲数组int T5 ,uo;double RE5;double puad5;//spi方式显示初始化子程序void SPIINIT(){PIR1=0;SSPCON=0x30;SSPSTA T=0xC0;174//设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送,与"74HC595,当其//SCLk从低到高跳变时,串行输入寄存器"的特点相对应TRISC=0xD7;//SDO引脚为输出,SCK引脚为输出TRISA5=0;//RA5引脚设置为输出,以输出显示锁存信号FLAG1=0;FLAG2=0;FLAG3=0;COUNTER=0X01;}//CCP模块工作于捕捉方式初始化子程序void ccpint( ){CCP1CON=0X05;//首先设置CCP1捕捉每个脉冲的上升沿T1CON=0X00;//关闭TMR1震荡器??PEIE=1;//外围中断允许(此时总中断关闭)CCP1IE=1;//允许CCP1中断TRISC2=1;//设置RC2为输入}//系统其它部分初始化子程序void initial( ){COUNT=0X0B;//为保证测试精度,测试5个脉冲的参数后//求平均值,每个脉冲都要捕捉其上升、下降沿,//故需要有11次中断TRISB1=0;PORTB=0XFB;B=1011TRISB2=0;PORTB=0XFD ;D=1101TRISB4=1;TRISB5=1;//设置与键盘有关的各口的输入、输出方式RB1=0;RB2=0;//建立键盘扫描的初始条件}//SPI传送数据子程序void SPILED(data){SSPBUF=data;//启动发送do {;175}while(SSPIF==0);SSPIF=0;}//显示子程序,显示4位数void display( ){RA5=0;//准备锁存for(COUNTW=0;COUNTW<4;COUNTW++){data=s[COUNTW];data=data&0x0F;if(COUNTW==k) data=table0[data];//第二位需要显示小数点else data=table[data];SPILED(data);//发送显示段码}for(COUNTW=0;COUNTW<4;COUNTW++){data=0xFF;SPILED(data);//连续发送4个DARK,使显示好看一些}RA5=1;//最后给一个锁存信号,代表显示任务完成}//键盘扫描子程序void keyscan( ){if((RB4==0)||(RB5==0)) FLAG1=1;//若有键按下,则建立标志FLAG1(FLAG1有无按键标志位)else FLAG1=0;//若无键按下,则清除标志FLAG1}//键服务子程序void keyserve( ){PORTB=0XFD ;RB2=1if(RB5==0) data=0X01;if(RB4==0) data=0X03;PORTB=0XFB;RB1=1if(RB5==0) data=0X02;if(RB4==0) data=0X04;//以上确定是哪个键按下PORTB=0X00;//恢复PORTB的值if(data==0x01) {176COUNTER=COUNTER+1;//若按下S9键,则COUNTER加1if(COUNTER>4) COUNTER=0x01;//若COUNTER超过4,则又从1计起}if(data==0x02) {COUNTER=COUNTER-1;//若按下S11键,则COUNTER减1 if(COUNTER<1) COUNTER=0x04;//若COUNTER小于1,则又循环从4计起}if(data==0x03) FLAG2=1 ;//若按下S10键,则建立标志FLAG2if(data==0x04) FLAG2=0 ;//若按下S12键,则清除标志FLAG2}//中断服务程序void interrupt cp1int(void){CCP1IF=0;//清除中断标志cp1u.cp1e[0]=CCPR1L;cp1u.cp1e[1]=CCPR1H;cp1z[data]=cp1u.y1;//存储1次捕捉值CCP1CON=CCP1CON^0X01;//把CCP1模块改变成捕捉相反的脉冲沿data++;COUNT--;}//周期处理子程序void PERIOD( ){T5=cp1z[10]-cp1z[0];//求得5个周期的值???????????/RE5=(double)T5;//强制转换成双精度数RE5=RE5/5;//求得平均周期,单位为μs}//频率处理子程序void FREQUENCY( ){PERIOD( );//先求周期RE5=1000000/RE5;//周期值求倒数,再乘以1 000 000 (μs转换),得频率,//单位为HZ}//脉宽处理子程序void PULSE( )177{int pu;for(data=0;puad5=0;data<=9;data++){pu=cp1z[data+1]-cp1z[data];puad5=(double)pu+puad5;data=data+2;} //求得5个脉宽的和值RE5=puad5/5;//求得平均脉宽}//占空比处理子程序void OCCUPA TIONAL( ){PULSE( );//先求脉宽puad5=RE5;//暂存脉宽值PERIOD();//再求周期RE5=puad5/RE5;//求得占空比}//主程序main( ){SPIINIT( );//SPI方式显示初始化while(1) {ccpint();//CCP模块工作于捕捉方式初始化initial();//系统其它部分初始化if(FLAG2==0) {s[0]=COUNTER;//第一个存储COUNTER的值s[1]=0X0A;s[2]=0X0A;s[3]=0X0A;//后面的LED将显示"DARK"}display( );//调用显示子程序keyscan();//键盘扫描data=0x00;//存储数组指针赋初值TMR1H=0;TMR1L=0;//定时器1清0CCP1IF=0;//清除CCP1的中断标志,以免中断一打开就进入//中断178ei( );//中断允许TMR1ON=1;//定时器1开while(1){if(COUNT==0)break;} //等待中断次数结束di();//禁止中断TMR1ON=0;//关闭定时器keyscan();//键盘扫描if(FLAG1==1) keyserve() ;//若确实有键按下,则调用键服务程序if(FLAG2==0) continue;//如果没有按下确定键,则终止此次循环,//继续进行测量//如果按下了确定键,则进行下面的数值转换和显示工作if(COUNTER==0x01) FREQUENCY();//COUNTER=1,则需要进行频率处理if(COUNTER==0x02) PERIOD();//COUNTER=2,则需要进行周期处理if(COUNTER==0x03) OCCUPA TIONAL();//COUNTER=3,则需要进行占空比处理if(COUNTER==0x04) PULSE();//COUNTER=4,则需要进行脉宽处理k=5;if(RE5<1){RE5=RE5*1000;//若RE5<1,则乘以1 000,保证小数点的精度k=0x00;}else if(RE5<10){RE5=RE5*1000;//若RE5<10,则乘以1 000,保证小数点的精度k=0x00;}else if(RE5<100){RE5=RE5*100;//若RE5<100,则乘以100,保证小数点的精度k=0x01;}else if(RE5<1000){RE5=RE5*10;//若RE5<1000,则乘以10,保证小数点的精度k=0x02;}else RE5=RE5 ;uo=(int)RE5;sprintf(s,"%4d",uo);//把需要显示的数据转换成4位ASII码,且放入数//组S中display();179}}180。
第10章 利用CCP模块设计频率计
PIC单片机实验室
北邮世纪学院电子与自动化系
2
CCP1、CCP2
• 内置了两个CCP模块,CCP1\CCP2,这两个模块在 使用上,其动作方式与功能很相近,引脚如图所示: RC2\RC1
PIC单片机实验室
北邮世纪学院电子与自动化系
3
捕捉、比较、PWM
1、捕捉指的是侦测引脚上输入信号的状态,当信号的变 化符合预先设定的条件(上升沿或下降沿),产生中断, 并记录当前的定时器值。与TMR1配合,是16位的。 • 2、比较是将事先设定好的值与定时器的值相互比较,一 旦两个值相等,就产生中断并驱动事先设定好的动作。与 TMR1配合,是16位的。
PIC单片机实验室
北邮世纪学院电子与自动化系
17
10.4 设计与测量原理
t1 时 刻 捕 捉 T M R 1 1
t1
t2
t3
t3 时 刻 捕 捉 T M R 1 3
t2 捕 捉 T M R 1 2
t1时刻以前,把CCP1设置成捕捉上升沿;当上升沿到来时,CCP中断, 捕捉此时TMR1寄存器中16位的值TMR11, 把CCP1再设置成捕捉下降沿,当t2下降沿到来时,CCP中断,捕捉此时 TMR1寄存器中16位的值TMR12, 把CCP1再设置成捕捉上升沿,当t3时刻下降沿到来时,CCP中断,捕捉 此时TMR1寄存器中16位的值TMR13。 则: 信号的周期T=TMR13—TMR11 us 脉冲宽度Tp=TMR12—TMR11 us 信号的频率f= 1/T 占空比D=Tp/T *100%
PIC单片机实验室
北邮世纪学院电子与自动化系
18
如何提高测量频率
• 特别注意: • 2次中断的时间间隔必须大于一次中断服务的执行时间; • 本题需要测量的最高频率为1000HZ,周期时1000us,且占 空比的变化范围是10%--90%,则高电平持续的最短时间 100us 是:100us。可以由充分的中断服务时间。 • 如果实际应用中发现两次捕捉中断的时间间隔小于中断服 务时间,则可以设置CCP1CON的值,时ccp模块每4个脉 冲上升沿捕捉1次,或16个脉冲捕捉一次 • 要么把被测信号进行分频。
11章ccp模块
PIC单片机原理 单片机原理
Switching from one capture prescaler to another may generate an interrupt. Also, the prescaler counter will not be cleared, therefore, the first capture may be from a non-zero prescaler. The following example shows the recommended method for switching between capture prescalers. This example also clears the prescaler counter and will not generate the “false” interrupt.
PIC单片机原理 单片机原理
11.4.1 CCP 引脚配置
RC2/CCP1引脚必须设置为输出口,即 TRISC<2> 位清零. 注:清CCP1CON 将强制使RC2/CCP1 比较输出 锁存器(不同于PORTC I/O数据锁存器)锁存默认 低电平.
11.4.2 TIMER1模式选择 模式选择
Timer1工作在定时器、或同步计数模式。
PIC单片机原理 单片机原理
CCPx Mode CCPy Mode 相互关系 Capture Capture Compare PWM PWM PWM Capture Compare Compare PWM Capture Compare 相同的时基TMR1 相同的时基 比较器应配置为特殊事件清零TMR1 比较器应配置为特殊事件清零 两比较器均应配置为特殊事件清零TMR1 两比较器均应配置为特殊事件清零 PWM具有相同的频率的更新率 具有相同的频率的更新率 不能实现的配置 不能实现的配置
PIC学习笔记
1. 串行异步通信将TXSTA寄存器的TXEN 位置 1 可使能EUSART 的发送器电路。
清零TXSTA 寄存器的SYNC 位可将EUSART配置为异步操作。
将RCSTA寄存器的SPEN 位置 1 可使能EUSART 并自动将TX/CK I/O 引脚配置为输出。
如果需要中断,将PIE1寄存器的TXIE中断允许位置1。
如果INTCON 寄存器的GIE 和PEIE位也置1,则立即产生中断TXREG中有数据,而且串口还在传数据,这是TXIF才被清零,其他时间都为1TSR 寄存器为空时,TRMT 位置1,当有字符从TXREG传送到TSR寄存器时,该位清零TRISC = 0; //设置IO通道,0->输出1->输入PORTC = 0; //IO口赋值操作//串口初始化函数void InitUart(void){//配置发送状态7=内部时钟6=8位数据5=使能发送4=异步2=高速(重要)TXSTA = 0b10100110;//1=使能串口RCSTA = 0b10000000;//波特率设置4=16位波特率(与TXSTA 第2位对应)BAUDCON = 0b00001000;SPBRG = 103;//4MHz 9600 Baud//TXIE = 1; //允许串口中断}//串口发送数据void SendUart(unsigned char dat){TXREG = dat;while(!TRMT);}串口接收:自动波特率检测:总结:波特率必须准确,虽然只用发送功能,但是接受寄存器RCSTA也需设置,使能串口。
PWM:标准PWM 模式会在CCPx 引脚上产生高达10位分辨率的脉宽调制(PWM)信号。
由下列寄存器控制周期、占空比和分辨率:•PRx 寄存器•TxCON 寄存器•CCPRxL 寄存器•CCPxCON 寄存器对应位清零将放弃PWM控制权引脚需设置为输出配置CCPTMRSx 寄存器的CxTSEL<1:0>位可以选择要使用的Timer2/4/6 定时器。
PIC的TIMER2、ccp模块
uses it to generate the shift clock.
பைடு நூலகம்
PIC单片机原理
8.3.5与TIMER2有关的REGISTERS
PIC单片机原理
PIC单片机原理
CCP1 Module: Capture/Compare/PWM Register 1 (CCPR1) is
comprised of two 8-bit registers: CCPR1L (low
byte) and CCPR1H (high byte). The CCP1CON
Note: If the RC2/CCP1 pin is configured as an
output, a write to the port can cause a Capture condition.
PIC单片机原理
11.3.2 TIMER1 MODE SELECTION
Timer1 must be running in Timer mode, or
PIC单片机原理
1000 = Compare mode, set output (CCPX PIN) on
match (CCPxIF bit is set) 1001 = Compare mode, clear output (CCPX PIN ) on match (CCPxIF bit is set) 1010 = Compare mode, generate software interrupt on match (CCPxIF bit is set, CCPx pin is unaffected)
平时作业1(低功耗与CCP)
平时作业1(低功耗与C C P) -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII低功耗与CCP模块1. 从软件和硬件两个方面简述单片机系统抗干扰的措施,以及降低单片机系统功耗的措施。
内容小四,文字宋体,字母Times New Roman2. 选用dsPIC30F2012单片机的CCP模块设计频率计,频率测量范围0.1HZ至10KHz,写出设计方案。
内容小四,文字宋体,字母Times New Roman1、从软件和硬件两个方面简述单片机系统抗干扰的措施,以及降低单片机系统功耗的措施。
硬件:1.1选择合理元器件在满足系统性能要求的前提下,尽量选择低频率的单片机。
选择外部低频率的单片机可以降低噪声和提高系统抗干扰能力。
对于其它器件,尽量选择集成度高、温漂小、抗干扰能力强、功耗低的器件。
1.2采用良好的接地系统单片机系统既有模拟电路,又有数字电路,因此模拟地和数字地要分开。
高频电路应就近多点接地。
低频电路应一点接地。
交流地与信号地不能共地。
当A/ D转换器的模拟信号较弱时,可采用三线采样双层屏蔽浮地技术,提高抗共模干扰的能力。
1.3电磁场干扰对策以铜或铝等导电性能好的金属材料制作封闭的金属盒,以破坏电场的干扰途径,且具有静电屏蔽功能,金属盒接大地,还可以破坏磁场干扰途径,兼有电磁屏蔽功能。
1.4通道干扰采用隔离技术对数字信号的隔离采用光电藕合器。
采用这种方法时,信号的传递是通过光一电信号传递的,没有直接的电信号连接,因此隔离了干扰传播途径。
这种方法隔离不断辐射和感应干扰,在具体设计时应在A/ D后和D/ A前加光电藕合器。
对模拟信号隔离常采用隔离放大器。
采用隔离放大器的变压器将信号磁藕合,隔离了通路的线路连接,从而切断了干扰源。
也可以采用压频转换器(VFC)把模拟信号转换成数字信号,在通过光电藕合器隔离,光电藕合器的输出信号再由频压转换器(FVC)转换成模拟信号。
PIC18F452单片机原理及编程实践(第十五章)PIC18的CCP和ECCP编程
1. 2. 3. 4.
2017/8/29
5
CCP1CON寄存器
--MSB
--- DC1B1
DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0
LSB
DC1B1 DC1B0
PWM模式下10位占空比中的第1位 PWM模式下10位占空比中的第0位
返回
2017/8/29 6
CCP1CON寄存器
FLAG EQU DISP EQU 0x10 0x00 ;定义一个标志寄存器FLAG ;定义FLAG,0=1为捕捉完成标志
ORG 0000H GOTO MAIN ORG 0008H BTFSC PIR1,CCP1IF GOTO CCP_ISR RETFIE
第一次捕 捉上升沿
T1计数
第二次捕 捉下降沿
捕捉脉宽参数
2017/8/29
27
MAIN
MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CLRF CLRF BSF CLRF CLRF BCF
2017/8/29
PIC 18F458 microchip
FLASH型
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 V dd V ss RD7 RD6 RD5 RD4 / ECCP1 RC7 RC6 RC5 RC4 RD3 RD2
13
15.2 输入捕捉(Capture)
用于测量外部的周期性方波信号的周期(频率); 外部信号由CCP1/RC2输入。
返回
2017/8/29
12
15.1 .3 CCP 信号引脚
/MCLR / Vpp RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3 RA4/T0CKI RA5/AN4 RE0/AN5 RE1/AN6 RE2/AN7 V dd V ss OSC1/CLKI OSC2/CLKO/RA6 T1CIK / RC0 RC1 CCP1 / RC2 RC3 RD0 RD1
第9章 STC单片机CCP_PCA_PWM模块原理及实现
2
CCP/PCA/PWM结构
STC15系列部分单片机内部集成了3路CCP/PCA/PWM
模块
如需原始PPT文件请点击此处 /ppt
3
CCP/PCA/PWM结构
PCA模块包含一个特殊的16位定时器,有3个16位的捕 获/比较模块和该定时器/计数器模块相连。通过软件程 序,每个模块可以设置工作在下面四种模式中的一种:
--PCA比较捕获寄存器CCAPM0
TOG0
翻转控制位。当该位为1时,工作在PCA高速脉冲输出模式,PCA计
数器的值与模块的比较/捕获寄存器值的匹配将使CCP0引脚翻转。
CCP/PCA/PWM寄存器组
PWM0
脉冲宽度调节模式。当该位为1时,允许CCP0用于PWM输出;当该
位为0时,禁止CCP0用于PWM输出。
CCP/PCA/PWM寄存器组
当复位后,该寄存器的值为“x0000000”。
PCA比较捕获寄存器CCAPM1 各位的含义
比特 B7 B6 B5 B4 B3 B2 B1 B0
名字
--
ECOM1
CAPP1
CAPN1
MAT1
TOG1
PWM1
EECF1
ECOM1
允许比较器功能控制位。当该位为1时,允许比较器功能;当该位为0 时,禁止比较器功能。
CCF2
PCA模块2中断标志。当出现匹配或者捕获时,由硬件将该位置 1。该位 必须通过软件清0。
CCF1
PCA模块1中断标志。当出现匹配或者捕获时,由硬件将该位置 1。该位 必须通过软件清0。
CCF0
PCA模块0中断标志。当出现匹配或者捕获时,由硬件将该位置 1。该位 必须通过软件清0。
初学pic的笔记
端口分析:PORTA(RA0~RA5)、PORTB(RB0~RB7)、PORTC(RC0~RC7)、PORTD(RD0~RD7)和PORTE(RE0~RE2)端口A:端口A是一个6位双向端口。
相应的数据方向寄存器TRISA,将TRISA的一位置1,把相应的引脚变为 输入,即把相应的输出驱动器置成高阻抗方式。
对TRISA的一位清零,相应的引脚变为输出。
读端口A寄存器读的是引脚的状态,反之,写入端口将是写向端口寄存器。
所有写操作都是先读后 写操作。
RA4(T0CKI)RA2(AN2/VREF-)RA3(AN3/VREF+)端口B: 端口B是一个8位双向端口。
相应的数据方向寄存器TRISB,将TRISB的一位置1,把相应的引脚变为 输入,即把相应的输出驱动器置成高阻抗方式。
对TRISB的一位清零,相应的引脚变为输出。
PORTB的3个引脚对于低电压编程功能。
RB2/PGM,RB6/PGC和RB7/PGD是复用的。
端口B的每一个引脚都有一个内部弱上拉,一个单独控制位能够打开所有的弱上拉。
这个可以通 过对RBPU(OPTION_REG<7>)位清零来实现。
当端口设置为一个输出时弱上拉自动关闭。
上拉不能 使用在上电复位。
RB0/INT是一个外部中断输入引脚和通过使用INTEDG(option>6)位来设置端口C:端口A是一个6位双向端口。
相应的数据方向寄存器TRISA,将TRISA的一位置1,把相应的引脚变为 输入,即把相应的输出驱动器置成高阻抗方式。
对TRISA的一位清零,相应的引脚变为输出。
端口D:端口A是一个6位双向端口。
相应的数据方向寄存器TRISA,将TRISA的一位置1,把相应的引脚变为 输入,即把相应的输出驱动器置成高阻抗方式。
对TRISA的一位清零,相应的引脚变为输出。
Timer0:8位定时器/计数器寄存器;内部或外部时钟选择;中断从FFH到00H溢出通过对OPTION_REG<5> T0CS清零可选择定时器方式,Timer0模块在每个指令周期加1(无预分频器),如果是在写入TMR0寄存器时,递增将会延迟两个指令周期发生。
第6章PIC单片机定时计数器与CCP的应用
第6章PIC单片机定时计数器与CCP的应用第6 章 PIC 单片机定时/ 计数器第6 章 PIC 单片机定时/ 计数器与CCP 的应用与CCP 的应用1 概述1 概述2 定时器/ 计数器的控制与应用2 定时器/ 计数器的控制与应用3 CCP 的应用3 CCP 的应用§6.1 概述§6.1 概述三个定时/ 计数器三个定时/ 计数器定时/ 计数器0 (TIMER0 )、定时/ 计数器1 (TIMER1 )定时/ 计数器0 (TIMER0 )、定时/ 计数器1 (TIMER1 )和定时和定时/ / 计数器计数器2 2 ( (T TI IM ME ER R2 2 )。
)。
TIMER0 ,TIMER2 是8 位的增量溢出计数器,TIMER1 是TIMER0 ,TIMER2 是8 位的增量溢出计数器,TIMER1 是16 位的增量溢出计数器。
16 位的增量溢出计数器。
时钟源时钟源TIMER0 和TIMER1 的时钟源可以是内部系统时钟,也可TIMER0 和TIMER1 的时钟源可以是内部系统时钟,也可以是外部时钟;TIMER0 和TIMER1 既可以作定时器又可以是外部时钟;TIMER0 和TIMER1 既可以作定时器又可以作计数器使用。
以作计数器使用。
而TIMER2 的时钟源只能是内部系统时钟,这就意味着而TIMER2 的时钟源只能是内部系统时钟,这就意味着TIMER2 只能作定时器使用。
TIMER2 只能作定时器使用。
CCP 模块CCP 模块TIMER1 还可以配合捕捉/ 比较/PWM (CCP1 或CCP2 )TIMER1 还可以配合捕捉/ 比较/PWM (CCP1 或CCP2 )工作,作为16 位捕捉器或16 位比较器的时基。
工作,作为16 位捕捉器或16 位比较器的时基。
§6.2 定时器/ 计数器的控制与应用§6.2 定时器/ 计数器的控制与应用定时功能在单片机程序中有很大的用途,合理地使定时功能在单片机程序中有很大的用途,合理地使用定时器可以使程序更加简单有序。
CCP技术笔记
与输入捕捉模式\比较器相关的寄存器作用:1)用于测量输入引脚的周期信号的周期,频率和占空比等2)测量输入的非周期性矩形脉冲信号的宽度,到达时刻和消失时刻等特点: 1)时钟源来自TMR12)应先设好TMR1,且RC2/CCP1脚设为输入状态3)捕捉开启后,TMR1自动累加,CCP1一直检测引脚状态,与设定事件相同符时,TMR1的值被捕捉到CCPR1中,并产生中断.工作原理:捕捉条件,1)每个脉冲下降沿; 2)每个门诊部上升沿; 3) 每4个脉冲上升沿;4) 每16个脉冲下降沿; 发生后,CCPR1马上记下TMR1的值注意点:1) CCP1中断后,应用软件将其清0; 2)当CCPR1中的值还没取出时有新的捕捉发生,则原有的值被覆盖;3) 如果修改预分频器的值,可能会产生一次错误中断,并且预分频器不会清0.因此第一次捕捉可能是从预分频器的一个非0的起始值开始计数的.4)TMR1要设为定时器或同步工作方式;输出比较模式作用:从引脚上输出不同宽弃的矩形脉冲,延时驱动信息,晶闸管驱动信号,步进电机驱动信号等特点:由TMR1作为时钟源,选好TMR1工作方式,如果比较符合的事件发生后,改变RC2的状态工作原理:比较模式时,CCPR1和TMR1的值会一直作比较,当值相同时,产生中断,驱动事件发生:1)RC2/CCP1输出高电平; 2)输出低电平; 3)电平不变,内部产生软件中断; 4)引脚电平不变,内部触发特殊事件./////由CCP1CON中的D3---D0选择///////使用输出比较模式的步骤:1)RC2/CCP1设为输出, CCP1CON清0 迫使RC2/CCP1比较输出引脚对低电平锁存.2)TMR1设为定时器(时钟由内部产生) 或同步计数方式(时钟来自外引脚或自带振荡器)3)设定产生软件中断方式,当CCP1M3-CCP1M0=1010时,则为软件中断方式,当输出比较匹配时,RC2不受影响,而CCP1IF置1,可产生中断4)当CCP1M3-CCP1M0=1011时,为特殊事件触发方式,匹配时内部硬件产生一个触发信号,启动一些操作,同时TMR1复位清0但TMR1F不会置1PWM工作模式作用:在RC2中输出频率与脉宽随时可调的方波信号,时钟来自TMR2说明: 1) 脉宽寄存器用来调整PWM信号的脉冲宽度.2) 10位从属脉宽寄存器,CCPR1H+内部2位专用锁存器,只读,减少干扰3) 当脉宽寄存器=TMR2时,输出高电平4) 当对CCP1CON清0时,RC2输出一个低电平.并非是正确的PWM输出结果5) PWM的周期由8位的TMR2确定,宽度由TMR2的8位+其低端扩展两位工作原理: 周期确定由PR2的值确定,公式:T=(PR2+1)x4TOSCxTMR2预分频器TOSC为系统的时钟周期,4TOSC为指令周期, 预分频器可为1/4/16*****TMR2后分频不影响周期设定,但可利用其产生的中断来对PR2和CCLR1L换新值,调节脉宽.**********脉冲确定: 由CCPR1L+CCP1CON的D5和D4位确定, 公式:脉宽=DC1xTOSCxTMR2预分频器当PR2=TMR2时,脉宽值补装到从属脉宽寄存器中编程步骤: 1) 向PR2写入周期2) 写入脉宽值3) 将RC2/CCP1设为输出4) 通过T2CON设定TMR2,启用TMR25) 设定CCP1CON低4位为11XX,为PWM模式。
pic学习记录(自动保留的)
PIC 器件具有几个包括配置位或熔丝的存储单元。
这些位指定大体的器件操作,例如振荡器模式、看门狗按时器、编程模式和代码保护。
未正确设置这些位可能致使代码失败或器件无法运行。
对于 PIC18 器件,这些位可以利用配置 pragma 伪指令进行设置。
(在未来版本中,也会对于其他 8 位器件引入 pragma 伪指令。
)该 pragma 伪指令具有以下形式。
#pragma config setting = state|value#pragma config register = value其中, setting 是配置设置描述符(如 WDT), state 是所需状态的文本描述(如OFF)。
value 字段是一个可以优先用于描述符的数值。
* PIC16F1x端口控制实验* 芯片型号:PIC16F1936* 主要特性:增强性中档8位CPU,8K Flash,512字节RAM,最高速度8MIPS,11通道10位 AD,2个比较器,96段LCD控制器,16通道电容触摸模块,3个增强性PWM/捕获模块 */#include/* 配置芯片的工作方式,相当于其他单片机的熔丝位 */一个C 原程序的范例字节的内部数据存储空间,又该如何让概念指针?PICC仍是将这一问题留给编程员自己解决:在定义指针时必需明确指定该指针所适用的寻址区域,例如:unsigned char *ptr0; 向ROM常数的指针若是一组变量是已经被概念在ROM区的常数,那么指向它的指针可以这样定义:const unsigned char company[]=”Microchip”;向函数的指针单片机编程时函数指针的应用相对较少,但作为标准 C 语法的一部份,PICC一样支持函数指针挪用。
若是你对编译原理有必然的了解,就应该明白在PIC 单片机这一特定的架构上实现函数指针调用的效率是不高的:PICC 将在RAM中成立一个调用返回表,真正的调用和返回进程是靠直接修改PC指针来实现的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
与输入捕捉模式\比较器相关的寄存器
作用:1)用于测量输入引脚的周期信号的周期,频率和占空比等
2)测量输入的非周期性矩形脉冲信号的宽度,到达时刻和消失时刻等
特点: 1)时钟源来自TMR1
2)应先设好TMR1,且RC2/CCP1脚设为输入状态
3)捕捉开启后,TMR1自动累加,CCP1一直检测引脚状态,与设定事件相
同符时,TMR1的值被捕捉到CCPR1中,并产生中断.
工作原理:捕捉条件,1)每个脉冲下降沿; 2)每个脉冲上升沿; 3) 每4个脉冲上升沿;
4) 每16个脉冲下降沿; 发生后,CCPR1马上记下TMR1的值
注意点:1) CCP1中断后,应用软件将其清0; 2)当CCPR1中的值还没取出时有新的捕捉发生,
则原有的值被覆盖;
3) 如果修改预分频器的值,可能会产生一次错误中断,并且预分频器不会清0.因此第
一次捕捉可能是从预分频器的一个非0的起始值开始计数的.
4)TMR1要设为定时器或同步工作方式;
使用输入捕捉模式的步骤:
1 设置RC2/CCP1为引脚输入;(TRISC寄存器)
2 设置TIMER1的参数:
T1CON=--000001:内部时钟,计数器频率FOSC/4,工作允许(进一步可设置PIE1中的TMR1IE中断允许,PIR1中的TMR1IF)
3 设置CCP1CON的参数:
CCP1CON=----0100;每个下降沿捕捉;(进一步可设置PIE1中的CCP1IE中断允许,
PIR1中的CCP1IF)
4 等待捕捉成功(中断或者查询)
5 从CCPR1L和CCPR1H取值,该值代表捕捉发生的时刻;
6 和上次的捕捉值相减,得到两次捕捉之间的时间;
7 保留本次捕捉值,为下次作准备;
8 重复等待捕捉成功(跳到第4步);
输出比较模式
作用:从引脚上输出不同宽度的矩形脉冲,延时驱动信息,晶闸管驱动信号,步进电机驱动信号等
特点:由TMR1作为时钟源,选好TMR1工作方式,如果比较符合的事件发生后,改变RC2的状态
工作原理:比较模式时,CCPR1和TMR1的值会一直作比较,当值相同时,产生中断,驱动事件发生:1)RC2/CCP1输出高电平; 2)输出低电平; 3)电平不变,内部产生软件中断; 4)引脚电平不变,内部触发特殊事件./////由CCP1CON中的D3---D0选择///////
使用输出比较模式的步骤:
1)RC2/CCP1设为输出, CCP1CON清0 迫使RC2/CCP1比较输出引脚对低电平锁存.
2)TMR1设为定时器(时钟由内部产生) 或同步计数方式(时钟来自外引脚或自带振荡器)
3)设定产生软件中断方式,当CCP1M3-CCP1M0=1010时,则为软件中断方式,当输出比较
匹配时,RC2不受影响,而CCP1IF置1,可产生中断
4)当CCP1M3-CCP1M0=1011时,为特殊事件触发方式,匹配时内部硬件产生一个触发信号,
启动一些操作,同时TMR1复位清0但TMR1F不会置1
PWM工作模式
作用:在RC2中输出频率与脉宽随时可调的方波信号,时钟来自TMR2
说明: 1) 脉宽寄存器用来调整PWM信号的脉冲宽度.
2) 10位从属脉宽寄存器,CCPR1H+内部2位专用锁存器,只读,减少干扰
3) 当脉宽寄存器=TMR2时,输出高电平
4) 当对CCP1CON清0时,RC2输出一个低电平.并非是正确的PWM输出结果
5) PWM的周期由8位的TMR2确定,宽度由TMR2的8位+其低端扩展两位
工作原理: 周期确定由PR2的值确定,公式:T=(PR2+1)x4TOSCxTMR2预分频器
TOSC为系统的时钟周期,4TOSC为指令周期, 预分频器可为1/4/16
*****TMR2后分频不影响周期设定,但可利用其产生的中断来对PR2和CCLR1L换新值,调节脉宽.**********
脉冲确定: 由CCPR1L+CCP1CON的D5和D4位确定, 公式:
脉宽=DC1xTOSCxTMR2预分频器
当PR2=TMR2时,脉宽值补装到从属脉宽寄存器中
编程步骤: 1) 向PR2写入周期
2) 写入脉宽值
3) 将RC2/CCP1设为输出
4) 通过T2CON设定TMR2,启用TMR2
5) 设定CCP1CON低4位为11XX,为PWM模式。