3.3 定时器和计数器
51单片机包含两个16位定时/计数器:T1计数器分为高8位TH1和低8位TL1,T0计数器分为高8位TH0和低8位TL0。单片机用作定时器时,对机器周期进行计数,每一个机器周期计数器加1,直到计数器计满溢出。当用作对外部事件计数时,计数器接相应的外部输入引脚T0(P3.4)或T1(P3.5)并在每个机器周期进行采样,当采样1~0负跳变时,计数器加1。
1.定时/计数器结构
图3-5定时/计数器结构图。定时器T0由特殊寄存器的低8位TL0和高8位TH0构成,定时器T1是由特殊寄存器的低8位TL1和高8位TH1所构成。每个寄存器都可以单独访问,程序开始时,需要对TL0、TH0、TL1、TH1进行初始化并定义其工作方式。
2.定时/计数器特殊寄存器
定时/计数器0和定时计数器1特殊寄存器——TMOD、TCON用于控制和确定定时/计数功能和工作模式。
图3-5 定时/计数器结构图
(1)定时/计数器工作方式寄存器TMOD
定时/计数器的特殊寄存器主要是用来设工作模式,地址89H,不可以进行寻址,只可通过字节传送指令设定其工作方式。TMOD低4位控制寄存器T0高4位控制寄存器T1。见表3-6。
表3-6 TMOD
GATE定时操作开关控制位:GATE=0时TR0或TR1为1,定时/计数器选通开关,和INT0/INT1无关。
GATE=1时INT0/INT1为1并且TR0/TR1为1时定时/计数器选通开始工作。C/T定时/计数器功能选择位:C/T=1为计数器,通过引脚端口输入计数脉冲。
C/T=0为定时器,由内部系统时钟提供计时工作脉冲进行机器周期脉冲计数。
M0、M1工作方式选择位有4种,见表3-7。
表3-7 TMOD工作方式
方式0为13位计数结构工作方式。由TL0的低5位(高3位未用)和TH0的8位组成,定时或者计数溢出则TCON中的TF0置1,向CPU发出中断请求,如图3-6所示。
1)作为计数工作。
计数范围:1~213
计数值计算公式:计数值=
图3-6 工作方式0逻辑图
213-计数初值
针对T0定时器其计数初值为TH0高8位和TL0低5位的初始值。
2)作为定时器工作。
定时范围:1~213机器周期
定时计算公式:定时时间=(213-定时初值)×机器周期
针对T0定时器其定时初值为TH0高8位和TL0低5位的初始值。
机器周期时间=12/fosc,其中fosc为晶体振荡频率。
初始化案例:单片机外接晶振12M,则机器周期1μs,使用工作方式0,进行100μs定时。
100μs=(8192-定时初值)1μs,得到定时初值=FC1C
初始化程序如下:
TMOD=0x00;
TH0=0xFC;
TL0=0x1C;
EA=1;
TR0=1;
ET0=1;
方式1为16位定时/计数结构工作方式。由TL0(TL1)作为低8位、TH0(TH1)作为高8位,组成16位定时/计数器,如图3-7所示。
1)作为计数器工作。
计数范围:1~216
计数值计算公式:计数值=
216-计数初值
针对T0定时器其计数初值为TH0高8位和TL0低8位的初始值。
2)作为定时器工作。
定时范围:1~216机器周期
图3-7 工作方式1逻辑图
定时时间计算公式:定时时间=(216-定时初值)×机器周期
针对T0定时器其定时初值为TH0高8位和TL0低8位的初始值。
机器周期时间=12/fosc,其中fosc为晶体振荡频率。
初始化案例:单片机外接晶振12MHz,则机器周期1μs,使用工作方式1,进行100μs定时。
100μs=(65536-定时初值)1μs,得到定时初值=FF9C
初始化程序如下:
TMOD=0x01;
TH0=0xFF;
TL0=0x9C;
EA=1;
TR0=1;
ET0=1;
当M1M0=10时,定时/计数器处于工作方式2。此时定时器寄存器TL0配置为可以自动重装载的8位计数器,TH0作为预置寄存器。TL0计数溢出时,TF0置1同时TH0中的内容重装载到TL0中,TH0的内容由软件预置,重装载后内容不变。电路结构如图3-8所示。
图3-8 工作方式2逻辑图
1)作为计数器工作。
计数范围:1~28
计数值计算公式:计数值=28-计数初值
针对T0定时器其计数初值为TH0高8位和TL0低8位的初始值。
2)作为定时器工作
定时范围:1~28机器周期
定时时间计算公式:定时时间=(28-定时初值)×机器周期
针对T0定时器其定时初值为TH0高8位和TL0低8位的初始值。
机器周期时间=12/fosc,其中fosc为晶体振荡频率。
T0工作方式3分为两个独立的8位计数器TL0和TH0,其中TL0既可以作为计数器也可作为定时器,与之前三种工作方式不同体现在方式3只适用于定时器/计数器T0,定时器T1方式3时TR1=0,计数器不工作。工作方式3将T0分成为两个独立的8位计数器TL0和TH0,如图3-9所示。
图3-9 工作方式3逻辑图
(2)定时/计数控制寄存器TCON
定时/计数控制寄存器TCON的地址是88H,可字节寻址也可位寻址,字节地址88H,TCON定义见表3-8。
表3-8 TCON
TF1:T1溢出中断请求标志位。T1计数溢出时候由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可以随时查询TF1的状态,TF1作为查询T1中断溢出标志位,TF1也可以用软件置1或者清0,同硬件置1清0效果一样。
TF0:定时/计数器T0溢出中断请求标志位。当定时/计数器0溢出的时硬件置位,申请中断进入中断后被硬件置0。
TR1:定时/计数器T1运行控制位。靠软件置1或者置0,当TR1=1时启动T1运行,TR1=0则T1停止运行。
TR0:定时/计数器T0运行控制位,TR0=1工作,TR0=0不工作。
IE1:外部边沿触发中断1请求标志,检测到在INT引脚上出现外部中断信号的下降沿时候,硬件置位,请求中断,进入中断程序后被硬件自动置0。
IE0:外部边沿触发中断0请求标志,同IE1。
IT1:外部中断1控制位,IT=1时,下降沿触发,IT1=0低电平触发。
IT0:外部中断1控制位,IT=0时,下降沿触发,IT0=0低电平触发。