定时/计数器的实质是加1计数器(16位的),由高8位和低8位两个寄存器THx和TLx组成。
- TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志;
- TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;
低四位为外部中断使用,高四位控制定时器/计数器。其中TF0、TF1为计数溢出中断标志位。TR0、TR1置1时,允许定时器/计数器运行(必要条件),如果该位为0,则一定禁止使能;
符号1 | 符号2 | 名称 | 说明 |
---|---|---|---|
TR0 | 计数运行控制位 | 为启动定时器/计数器0的必要条件 | |
TR1 | 计数运行控制位 | 为启动定时器/计数器1的必要条件 | |
GATE=0 | TR0 | 门控位、计数运行控制位 | 由TR0或者TR1控制定时器/计数器运行 |
GATE=1 | TR0 | 门控位、计数运行控制位 | 由外部中断(INT0、INT1)与TRx共同控制; GATE=1,且INT0=1时(好像是下降沿触发),TR1=1启动定时器1;即相与 |
GATE位在TMOD寄存器中
高4位控制T1,低4位控制T0,原理相同。
- GATE :门控位。
GATE=0,仅由运行控制位TRx(x = 0,1)来控制定时器/计
数器运行,置1开启;
GATE=1,用外中断引脚上的电平与运行控制位TRx相与的
结果共同来控制定时器/计数器运行。 - C/T:计数器模式和定时器模式选择位
C/T=0:为定时器工作模式,对单片机的晶体振荡器12分频后的脉冲
进行计数。
C/T=1:为计数器工作模式,计数器对外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。 - M1、M0:工作方式选择位
1、方式0与方式1只是计数位数不同,方式1范围更大。方式0初值计算复杂,一般用方式1
2、方式0和方式1中:计数溢出后,计数器为全0。因此循环计数时,需要重新装入初值
3、方式2能自动恢复初值(初值自动装入);在这种方式下THx(x = 0,1)用来存放计数的初值, TLx (x = 0,1)用作计数,因此计数范围较小。当TLx计数溢出时,在溢出标志TFx置“1”的同时,将THx中的初值送至TLx,使TLx从初值开始重新计数
4、一般情况下,当T1用作串口波特率发生器时,T0才工作在方式3,此时T1可工作在方式0、1、2。
定时初值的计算
单片机内部时钟频率是外部时钟的12分频,也就是说为外部晶振的1/12。CPU完成一个基本操作所需要的时间:机器周期=1/单片机的时钟频率。
当晶振为12MHz时,机器周期=1 /(12MHz / 12)= 1us,所以计数器每记一个数的时间为1us。若定时1ms,则计1ms / 1us = 1000个数。
- 方式0最长计时=1us*213=8.192 ms
- 方式1最长计时=1us*216=65.536 ms
- 方式2最长计时=1us*28=0.256 ms
若采用定时器1、方式1定时1ms,装入T0的初值为 65536 - 1000 = 64536 = 0x FC18H,故 TH0 =FCH,TL0 = 18H。
设置定时器中断
1、设置TMOD,以及确定工作方式
2、设置定时器初值
3、开放定时器中断(IE),再使能总中断EA
4、设置TCON,启动定时/计数