作 者:武力戡乱
修改日期:2017-3-12
备 注:
1、总备注信息
2、联系方式
3、更多51文章请参见:单片机——51——目录
内 容:
一、作用
定时器/计数器以定时器的作用最为突出。一般来说涉及到定时器,都可以算作定时器算法。简单的如秒表等。复杂的如果系统内核的定时算法等。在学习单片机的路上,必学会定时器。
二、工作原理
定时器/计数器的原理其实没那么难。
定时器也就是一个计数器。而每计一个数的时间是一定的,于是就等价了定时器。51的定时器是从你设置的初值开始计数,直到他所能达到的最高数值为止。即:
定时时间 =(最大值–初值)X每计一个数的时间
最大值因不同模式而定,初值需要你设计。
当达到定时器最大值的时候,就会触发定时器标志置位。当开启全局中断和定时器中断的时候,定时器标记置位会触发定时器中断函数,执行玩中断后,标记会自动复位。备注:如果没有触发中断函数,标记不会自动复位。
三、定时器术语理解
1、溢出:当定时器达到定时或者计数标准的时候,定时器就处在溢出停止状态。
2、溢出标记:当定时器溢出的时候,定时器标志就会置位。
3、初值:设计者自行设计的定时器计数的起步值。定时器是从这个值开始定时或者计数到最大值。
4、初值的计算:定时器有装载定时计数的寄存器,只要对这个寄存器进行操作即可。
四、工作模式寄存器TMOD,地址89H(不可按位寻址)
TMOD 定时器控制寄存器 |
|||||||
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
GATE |
C/T |
M1 |
M0 |
GATE |
C/T |
M1 |
M0 |
表1:工作模式寄存器TMOD
GATE:定时操作开关控制位。当GATE=1时,INT0或INT1引脚为高电平,同时TCON中的TR0或TR1控制位为1时,计时/计数器0或1才开始工作。若GATE=0,则只要将TR0或TR1控制位设为1,计时/计数器0或1就开始工作。
C/T:定时器/计数器功能的选择位。C/T=1为计数器,通过外部引脚T0或T1输入计数脉冲。C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。
M1和M0为定时器工作模式选择位。
定时器的工作模式如图2所示:
M1 、M0:T0、T1工作模式选择位 |
||
M1 |
M0 |
工作模式 |
0 |
0 |
方式0,13位计数/计时器 |
0 |
1 |
方式,1,16位计数/计时器 |
1 |
0 |
方式2,8位自动加载计数/计时器 |
1 |
1 |
方式3,仅适用于T0,定时器0分为两个独立的8位定时器/计数器TH0及TL0,T1在方式3时停止工作 |
表2:定时器0、1的模式
五、控制寄存器TCON,地址位88H(可按位寻址)
TCON 定时器控制寄存器 |
|||||||
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
表3:控制寄存器TCON
TF1:定时器T1溢出标志,可由程序查询和清零,TF1也是中断请求源,当CPU响应T1中断时由硬件清零。
TF0:定时器T0溢出标志,可由程序查询和清零,TF0也是中断请求源,当CPU响应T0中断时由硬件清零。
TR1:T1充许计数控制位,为1时充许T1计数。
TR0:T0充许计数控制位,为1时充许T0计数。
备注:其他位供其他功能使用
六、控制寄存器T2CON
T2定时器控制寄存器T2CON |
|||||||
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
TF2 |
EXF2 |
RCLK |
TCLK |
EXEN2 |
TR2 |
C/T2 |
CP/RL2 |
表4:控制寄存器T2CON
TF2:T2溢出中断标志。TF2必须由用户程序清“0”。当T2作为串口波特率发生器时,TF2不会被置“1”。
EXF2:定时器T2外部中断标志。EXEN2为1时,当T2EX(P1.1)发生负跳变时置1中断标志DXF2,EXF2必须由用户程序清“0”。
TCLK:串行接口的发送时钟选择标志。TCLK=1时,T2工作于波特率发生器方式。
RCLK:串行接口的接收时钟选择标志位。RCLK=1时,T2工作于波特率发生器方式。
EXEN2:T2的外部中断充许标志。
C/T2:外部计数器/定时器选择位。C/T2=1时,T2为外部事件计数器,计数脉冲来自T2(P1.0);C/T2=0时,T2为定时器,振荡脉冲的十二分频信号作为计数信号。
TR2:T2计数/定时控制位。TR1为1时充许计数,为0时禁止计数。
CP/RL2:捕捉和常数自动再装入方式选择位。为1时工作于捕捉方式,为0时T2工作于常数自动再装入方式。当TCLK或RCLK为1时,CP/RL2被忽略,T2总是工作于常数自动再装入方式。
定时器2工作模式如图5所示:
定时器T2方式选择 |
|||
RCLK+TCLK |
CP/RL2 |
TR2 |
工作方式 |
0 |
0 |
1 |
16位常数自动再装入方式 |
0 |
1 |
1 |
16位捕捉方式 |
1 |
× |
1 |
串行口波特率发生器方式 |
× |
× |
0 |
停止计数 |
表5:定时器2工作模式
七、定时器应用技巧
1、定时器定时长度扩展。可以人为的加入变量,每当定时器溢出,变量进行自加。这样就可以无限的扩展定时时间长度。
2、定时器误差问题。因为在执行定时器中断的时候,执行里面指令肯定要耗时。所以减少误差的就两种办法:简化中断服务程序;将定时器中断的程序外迁。