单片机的定时器/计数器
6.1定时/计数器的结构与基本原理
定时计数器的基本原理
计数器:当脉冲信号是来自单片机外部信号,通过脉冲计数统计,可做计数器使用。
定时器:当脉冲信号是来自单片机内部的时钟信号,则由于单片机的振荡周期非常精准,故溢出时统计的脉冲数便可换算成定时时间因此可做定时器使用。
注意:定时器/计数器本质都是计数器,只是脉冲信号来源不同。两种功能的切换通过逻辑开关C/T的切换实现。
定时时间的计算: t = (计数器满计数值 - 计数初值) X 机器周期(机器周期 内部振荡器经过12分频后的脉冲)
fosc 时钟频率(MHZ)。
同理,计数器方式下的计数值 N 可表示为
N = 计数器满级数值 - 计数初值 = 2^n - a
定时/计数器的结构
定时/计数器结构图
T0 和 T1 分别由高八位和低八位两个特殊功能寄存器组成,高八位 TH1、 低八位 TL1
定时/计数器的控制是通过两个特殊功能寄存器实现的,
TMOD 定时/计数器的 工作方式 寄存器,由它确定 定时/计数器的工作方式和功能;
TCON 定时/计数器的 控制 寄存器,用于管理 T0 和 T1 的启停、溢出和中断。
对应的外部引脚 T0 (P3.4) 、 T1(P3.5)。
定时计数器工作起来后,按硬件方式独立运行,无需CPU干预,降低CPU操作时间。
6.2 定时计数器的控制
TMOD寄存器(89H)
定义格式如下图
1.低4位为T0方式字,高四位为T1的方式字。(两部分定义完全对称)
2.不能位寻址,只能整体赋值。
3.M1和M0 :工作方式选择位,两位可组成四种编码对应4中工作方式。
C/T:定时和外部事件计数选择位,
0: 定时器方式
1: 外部事件计数器方式,
GATE: 门控位
0:定时器不受外部引脚输入电平的控制,只受定时器运行控制位(TR0、TR1)控制
1:定时器的计数受定时器运行控制位和外部引脚输入电平(INT0、INT1)控制,其中TR0和INT0控制T0的运行。
注意 GATE位 位 0 时 (一般状态),只要TR0 = 1就能使T0启动,TR1 = 0 就能使T0停止,而与INT0无关。GATE为1时只有TR0 = 1和 INT0 引脚为高电平时 才会启动定时器 T0.在这种方式常用来测量在 INT0 引脚出现的正脉冲宽度。
M0、M1;工作方式定义位
由表可知 T0 共有4种工作方式。T1 没有工作方式3. 除 工作方式3 外,每种工作方式都有定时和计数两种方式。单片机复位时TMOD为0,单片机默认设置为:T0 和 T1 均为定时器方式 0 允许TR0 和 TR1 启动定时器。
TCON寄存器(88H)
定义格式如图:
位7: TF0(TF1)——计数溢出标志位,当计数器计数溢出时,该位置1。
位6: TR0(TR1)——定时器运行控制位
当TR0(TR1)=0 停止定时器/计数器工作
当TR0(TR1)=1 启动定时器/计数器工作
位3: IE0(IE1)——外中断请求标志位(当CPU采样到P3.2(P3.3)出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务时,再由硬件自动清0。)
位2: IT0(IT1)——外中断请求信号方式控制位
当IT0(IT1)=1 脉冲方式(后沿负跳有效)
当IT0(IT1)=0 电平方式(低电平有效)此位由软件置1或清0。
TF0(TF1) ——计数溢出标志位
当计数器产生计数溢出时,此位由硬件置1。当转向中断服务时,再有硬件自动清0。计数溢出的标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。
注意:系统复位时,TCON 初值位0 ,即默认设置为:TR0、TR1均为关闭状态,电平中断触发方式、没有外部中断触发请求,也没有定时/计数器中断请求。
6.3定时计数器的工作方式
51单片机的定时/计数器具有4种工作方式(方式0,1,2,3)
方式一:
M1M0 = 01 时 定时器工作在方式 1,高八位TH1 与 低八位 TH0 组成一个16位的加一计数器,计满值为 2^16
C/T = 0 工作在定时器方式。C/T = 1 工作在计数器方式。
若初值为 a 则其定时时间为 t = (2^16-6)* 12 / focs。最高计数值 N = 2^16-a
注:检测外部脉冲(负跳变)作为T1的计数信号, 检测一个负跳变需要 2 个机器周期,故最高计数频率为focs/24 。
方式二:
当 M1M0 = 10 时 定时/计数器工作于方式2,方式 2 采用 TLx(低八位)作为加一计数器计满值为 2^8 另一个8位寄存器THx(高八位)用于存放8位初值。
由图:若TH1计数溢出,TH1会自动将其初值装入TL1中,(初始化时 TH1 和 TL1 有软件赋予相同的初值)
定时器2的定时和计数次数计算公式分别为
T = (2^8 - a)*12/focs ; a 为初值;
计数值 N = 2^8 -a ;
注:定时器方式2可产生非常精确的定时时间,尤其适合作为串行口波特率发生器。
方式0:
当 M1M0 = 00 时 ,定时/计数器工作于方式0,方式0 采用低五位 TLx和高八位 THx组成一个13位的加 1 计数器,计满值位 2^13,初值不能自动重装载。方式0 除位数与方式1不同外,其他并无差异。方式0采用13位计数器主要是为了与早期MCS-48兼容。定时时间计数方法计算公式如下:
定时时间:t = (2^13-a)*12/fosc
计 数 值:N = 2^13 - a
注意:方式0 的TLx高三位是无效的,可以为任意值,计算初值时要注意。
方式三:
当M1M0 =11 时,定时/计数器工作于方式3,
对于定时器1,在模式3时,定时器 1 停止计数,效果与将 TR1设置为0相同。
对于定时器2,在此模式下定时器 0 的 TL0 与 TH0 作为两个独立的八位计数器,写图为定时器0的逻辑图:
模式3的目的是为了增加一个附加的八位定时/计数器而提供的。使单片机具有三个定时/计数器。模式3只是用于定时/计数器0。T0可作为2个定时器使用。T1变为一个无中断功能的定时器。(T1仍可用于工作方式 0~2 )。