一、MCS-51的定时/计数器概述
1.1 定时/计数器的特点
(1)二进制加法计数器,当计数器计满回零时刻自动产生溢出中断请求;
(2)既可以用作计数器,也可以用作定时器;
(3)有四种工作模式:模式0、模式1、模式2、模式3;
(4)定时时间和计数值均可通过程序设定,最大值取决于工作模式和单片机的时钟频率;
(5)硬件延时逻辑电路,与软件延时相比,可以提高CPU的工作效率。
1.2 定时/计数器的应用
(1)定时——产生一个标准的时间间隔;
(2)计数:对外部事件(脉冲)进行统计
外部事件的发生是随机的,单片机不可能预知外部事件何时发生,但可以进行统计(计数)。当达到所要求的计数值时,单片机进行相应的操作。
二、定时/计数器的四种工作模式
2.1 模式0——13位定时/计数
13位定时/计数,使用TLi的低5位和THi的8位组成13位。
最大计数值:8192
计数值C=8192-初值
定时时间=(8192-初值)*Tosc*12
当计数满中断后,定时/计数器清零,此时应在程序中设置将其改为初值,才能正常进行下一次计数/定时。
2.2 模式1——16位定时/计数
16位定时/计数,使用TLi的8位和THi的8位组成16位。
最大计数值:65536
计数值C=65536-初值
定时时间=(65536-初值)*Tosc*12
当计数满中断后,定时/计数器清零,此时应在程序中设置将其改为初值,才能正常进行下一次计数/定时。
2.3 模式2——自动重装初值的8位定时/计数
8位定时/计数,TLi做计数器,THi做初值寄存器。
最大计数值:256
计数值C=256-初值
定时时间=(256-初值)*Tosc*12
当计数满中断后,定时/计数器清零,THi中存放的初值自动存到TLi中,因此不需要程序单独说明即可正常进行下一次计数/定时。
2.4 模式3——组合扩展模式(仅T0具备该模式)
三、MCS-51对定时/计数器的控制
3.1 模式控制寄存器TMOD(SFR的地址:89H)
GATE | C//T | M1 | M0 | GATE | C//T | M1 | M0 |
高4位控制T1,低4位控制T0
GATE选通门:若GATE=0,只要TRi=1,就启动Ti;
若GATE0,只有当/INTi=TRi=1,才启动Ti(测量/INTi脚的正脉冲宽度)
C//T计数、定时功能的选择:C//T=1时为计数器,C//T=0时为定时器;
M1、M0:模式选择,确定四种工作方式。
M1 M0 | 工作模式 | 备注 |
0 0 | 模式0:13位定时/计数器 | 二者区别仅在长度上 |
0 1 | 模式1:16位定时/计数器 | |
1 0 | 模式2:8位自动重装模式 | 串行通讯“波特率”发生器 |
1 1 | 模式3 | 仅T0可以工作在该模式 |
3.2 控制寄存器TCON(SFR地址:88H)
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
TR0:TR0=1,则T0开始工作,TR0=0,则T0停止工作;
TR1:TR1=1,则T1开始工作,TR1=0,则T1停止工作;
四、定时/计数器的初始化
4.1 定时器初始化步骤
①根据需要,设定工作方式(C//T)以及工作模式(M1、M0)
②确定初值TC
③若采用中断方式,初始化中断
④送命令字,启动计数器
4.2 计数、定时初值的计算
TC=M-C
TC:初值;M:计数最大值;C:计数值