第九讲 定时器T2的用法
定时器
声明,定时器T2只有52以上的芯片才有,51没有的。
1 C- D- I; e# z7 i9 Y8 {:
, X- ?' h- F- |' f P\
捕捉模式
在捕捉模式时,两种操作模式由T2CON中的EXEN2位选择。如果EXEN2=0,Timer2作为一个16位向上定时或计数器,当溢出时将T2CON中的TF2置1。这个标志位可以产生一个中断。如果EXEN2=1,Timer2起同样的作用,但是,外部输入端T2EX上的下降延也可以使TH2和TL2中的值捕捉到RCAP2H和RCAP2L中,另外,T2EX上的下降延可以将EXF2置1,像TF2一样,也可以产生一个中断。捕捉模式详见图5。
自动重载模式
Timer2在指定为16为自动重载模式时可以编程为加计数或减计数,此功能由T2MOD
中的DCEN位决定。DCEN=0,计数器向上计数,默认置为0,DCEN=1时,Timer2的加或减由T2EX的值决定。
& H* p: |* l# t/ m1 W7 [7 t& Y
图6显示Timer2在DCEN=0时自动向上计数。在这个模式时,T2CON的EXEN2为可以选择两种操作。EXEN2=0,Timer2向上计数到0FFFFH时将TF2为置1,溢出可以把RCAP2H和RCAP2L中的16为值重新加载到定时寄存器中。捕捉模式时RCAP2H和RCAP2L中的值由软件预先设定。EXEN2=1,既可以由溢出重载也可以由T2EX引脚的下降延触发重载。TF2和EXF2都可以产生中断。设置DCEN为可以时Timer2向上或向下计数,如图6所示,此模式下,T2EX脚控制计数方向。T2EX如果为1,Timer2向上计数。计数器到0FFFFH时溢出并将TF2置1。溢出可以使RCAP2H和RCAP2L中的16为值重新加载到定时寄存器中。T2EX如果为0,Timer2向下计数,当TH2和TL2中的值和RCAP2H和RCAP2L相等时向下溢出。溢出使TF2置1并
将0FFFFH重新加载到计时寄存器中。
- s0 @5 E8 |2 N4 4 v- y: ^# ?/ f\q: O/ z) O8 k0 i
波特率发生器
通过设置T2CON中TCLK或RCLK位选择Timer2位波特窥测发生器Timer2作为发送和接收时可以应用早不同的波特率,设置TCLK或RCLK位使Timer2工作在波特率发生器模式,
如图8所示。
波特率发生器模式和重载模式相似,TH2中值的溢出将使软件预设的16位寄存器值重载到计数器中。
波特率1、3模式由Timer2的溢出速率决定,由下面的等式表示 模式1、3波特率=(Timer2计数值)/16
定时器可以指定为计数或定时模式,在许多应用中,被设置成定时模式,Timer2的定时操作和波特率发生器的操作不同,作为定时器,它每机器周期(1/12个晶振周期)增加1,作为波特率发生器它每个状态时间(1/2晶振周期)增加1。波特率公式如下:
- k& K3 h# z2 ]$ g$
模式1、3 =
; f. M2 i4 F: ]! u) H; q' H1 J; b7 D! ]
晶振频率
* w& A: @( \\7 |3 O8 s* z4
波特率
32×(65536-RCAP2H,RCAP2L)
这里(RCAP2H,RCAP2L)是RCAP2H和RCAP2L作为16为无符号整数。
Timer2作为波特率发生器如图8,这个只有在TCLK或者RCLK=1是才有效。需要注意的是TH2的的溢出不会将TF2置1,也不会产生中断,如果这时EXEN2置1,T2EX引脚的下降延将会使TF2置1并不会引发(RCAP2H,RCAP2L)到(TH2,TL2)的重载,那样,当Timer2作为波特率发生器时,T2EX可以作为一个外部中断使用。
当Timer2在波特率发生器模式作为定时器运行时(TR1=1),TH2,TL2不能进行读写,在这种情况下,计时器每个状态时间增加1,对其读写的结果将会不正确RACAP2寄存器可以读不可以写,因为写可能引起交迭重载或者重载出错。在处理Timer2的RACAP2寄存器前必须停止计时(TR2=0)。