8051有两个16位的定时器/计数器T0、T1,8052还有第三个定时器/计数器T2,通过内部编程都可以设定为内部定时器和外部计数器。
1、方式寄存器TMOD
特殊功能寄存器TMOD是TO、T1的工作方式寄存器,其格式如下:
TMOD低四位为T0方式字段,高四位为T1方式字段。复位时TMOD的所有位置0。
(1)工作方式选择位M1、M0
定时器/计数器有四种工作方式,它们由M1、M0的取值决定,对应关系如下图:
(2) 方式选择位C/T
C/T=0为定时器方式,以fosc(晶振频率)的12分频作为计数信号,即每个机器周期定时器加1。
C/T=1为计数器方式,以外部引脚(T0为P3.4,T1为P3.5)上输入的脉冲为输入信号,当外部信号发生负跳变时加1,外部事件计数的{zg}频率为fosc的1/24。
(3) 门控位GATE
当GATE=1时,由外部中断引脚INT0、INT1和内部TR0、TR1位来启动定时器。当INT0为高电平且TR0置位时,启动定时器T0。定时器T1的启动同T0。
当GATE=0时,仅由TR0和TR1置位来启动定时器T0和T1。
2、控制寄存器TCON
特殊功能寄存器TCON的高4位存放着定时器的运行控制和溢出标志,低4位存放外部中断的触发方式控制位和锁存外部中断请求源。TCON的格式如下:
(1)定时器T0的运行控制位TR0
TR0由软件置位或者清0。当门控位GATE=0时,TO计数器仅由TR0控制,TR0=1启动计数,TR0=0时停止。当门控位GATE=1时,T0计数器由INT0和TR0共同控制,当INT0=1且TR0=1时启动T0计数器。
(2)定时器T0溢出标志位TF0
当T0溢出时TF0=1,并向CPU申请中断,CPU响应中断后由硬件将TF0清0,也可以由软件查询方式将TF0清0。
(3)定时器T1的运行控制位TR1
功能同TR0。
(4)定时器T1溢出标志为TF1
功能同TF1。
(5)外部中断源1(INT1、P3.3)中断请求标志IE1
IE1=1时外部中断源1正在向CPU请求中断,当CPU响应该中断时由硬件将IE1清0(下降沿触发方式)。
(6)外部中断源1触发方式选择位IT1
IT1=0时外部中断源1选择电平触发方式,当输入低电平时置位IE1;IT1=1时外部中断源1选择下降沿触发方式,当中断源由高电平变低电平时置位IE1,向CPU请求中断。
(7)外部中断源0(INT0、P3.2)中断请求标志IE0
功能类同IE1。
(8)外部中断源0触发方式选择位IT0
功能类同IT1。
3、定时器工作方式
如上所述,定时器有4种工作方式,它们由TMOD寄存器中的M1、M0两位决定。注意:只有T0才有工作方式3。
(1)工作方式0
当TMOD寄存器中的M1、M0为00时,定时器工作在方式0。下图以定时器T1来示例说明:
计数时,TL1的低5位溢出后向TH1进位,TH1溢出后将TF1置位,并向CPU发出中断请求。注意:在方式0时,TL1只用到了低5位,高3位内容不定不能使用,控制逻辑计数的允许/禁止并不改变计数值。
(2)工作方式1
当TMOD寄存器中M1、M0的值为01时,定时器工作于方式1。工作方式1和工作方式0的{wy}区别在于,工作方式1可以实现16位计数,其它都和工作方式0相同。如果以定时器T1为例来图示讲解,可如下:
(3)工作方式2
当TMOD寄存器的M1、M0位值为10时,定时器工作于工作方式2。方式2为自动恢复初值的8位计数器,TL1作为8位计数寄存器,TH1作为8位计数常数寄存器,当TL1溢出时,一方面将TF1置位,并向CPU发出中断请求,另一方面将预设在TH1中的常数重新装入TL1,继续计数。重新装入不会影响TH1的内容。其结构简图如下:
在方式2中通过改变TH1的值可以改变计数次数。
(4)工作方式3
方式3只适用于T0,此时T1停止计数。
4、定时器/计数器溢出率的计算
定时器/计数器在工作之前必须先设定计数初始值Ta。初值计数公式如下:
在给定时间t后,求初值的公式如下:
5、总结
对定时器/计数器编程的步骤如下:
a、写TMOD,设定工作方式、定时/计数方式、启动哪个定时器(开启相应的门控位GATE);
b、将初值写入对于寄存器;
c、定时器中断开或关;
d、启动定时器,即向TCON写入数据。