51单片机的定时器/计数器接口
定时器/计数器0和1
T0由特殊功能寄存器TH0(T0高8位)、TL0(T0低8位)构成,T1由特殊功能寄存器TH1(T1高8位)、TL1(T1低8位)构成。
原理:定时/计数器实质上是一个加1计数器,当加到计数器为全1时,在输入一个脉冲就使计数器为0,并溢出发出中断请求。
- 不需要CPU的参与。
- 定时器:机器内部的时钟的脉冲信号对寄存器中的数据加1;
计数器:机器外部的时钟的脉冲信号对寄存器中的数据加1; - 精确定时作用
与T0/T1相关的寄存器
- 工作方式控制寄存器TMOD
1.不可位寻址
符号 | 字节地址 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
TMOD | 89H | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 | 00000000 |
高四位为定时/计数器1的方式控制段,低四位为定时/计数器0的方式控制段。
- M1,M0:定时/计数器工作方式选择位
M1 | M0 | 方式 | 工作说明 |
---|---|---|---|
0 | 0 | 0 | 13位定时器(TH的8位和TL的低5位) |
0 | 1 | 1 | 16位定时器/计数器 |
1 | 0 | 2 | 自动重装入初值的8位计数器 |
1 | 1 | 3 | T0分成两个独立的8位计数器,T1在方式3时停止工作 |
- C/T:定时/计数器工作模式选择位
C/T=0时:定时/计数器为定时器方式
C/T=1时:定时/计数器为计数器方式 - GATE:门控位
GATE=0时,定时/计数器只由软件控制位TRx(x为0或1)来控制启/停。TRx位为1时,定时/计数器启动工作;为0时,定时/计数器停止工作。
GATE=1时,定时/计数器的启动受外部中断引脚和TRx共同控制。只有当外部中断引脚INT0或INT1为高电平时,同时TR0或TR1置1时,才能启动定时/计数器0或定时/计数器1。
- 定时/计数器控制寄存器TCON
符号 | 字节地址 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 位名称 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
TCON | 88H | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | 00000000 |
- TR0:T0运行控制位。TR0置1时,T0开始工作;TR1置0时,T1停止工作。TR0由软件置1或清0。
- TF0:T0溢出中断请求标志位。T0计数溢出时由硬件自动置TF0为1。CPU响应中断后TF0由硬件自动清0。
- TR1:T1运行控制位。
- TF1:T1溢出中断请求标志位。
定时/计数器0/1的编程
- 定时/计数器0/1初始化的步骤
- 确定工作方式(即对TMOD赋值)
- 预置定时/计数器的初值,可直接将初值写入TH0、TL0或TH1、TL1。
- 根据需要决定是否开始定时/计数器的中断,直接对IE对应位赋值。
- 启动定时/计数器。若步骤(1)中设定为非门控方式(GATE=0),则将TRx(x为0或1)置1,定时/计数器即开始工作;若设定为门控方式(GATE=1),则必须由外部引脚INTX(x为0或1)和TRx共同控制,只有当INTX引脚为高电平时,将TRx置1才能启动定时/计数器工作。
- 定时/计数器0/1初值的计算
- 方式0:最大计数值=213=8192,最长定时时间=8192*Tcy(Tcy为机器周期)。
- 方式1:最大计数值=216=65536,最长定时时间=65536*Tcy(Tcy为机器周期)。
- 方式2:最大计数值=28=256,最长定时时间=256*Tcy(Tcy为机器周期)。
- 方式3:定时器0分成两个8位计数器,其最大计数值均为256,最长定时时间均为256*Tcy(Tcy为机器周期)。
初值计算
- 计数器模式下:初值=最大计数值-计数值
- 定时器模式下:初值=最大计数值-定时时间/Tcy