第6章 定时器/计数器
第六章 定时器/计数器
结构/工作方式
MCS-51系列单片机有2个16位定时/计数器T0和T1,分别有8位计数器TH0、TL0和TH1、TL1构成各自的16位计数器
都是以加"1"的方式完成计数
特殊功能寄存器TMOD控制定时/计数器的工作方式
TCON控制定时/计数器的启动运行并记录T0、T1的溢出标志
通过对TH0、TL0和TH1、TL1的初始化编程可以预置T0、T1的计数初值
通过对TMOD和TCON的初始化编程可以分别置入方式字和控制字,以指定其工作方式并控制T0、T1按规定的工作方式计数
定时器工作原理
当设置为定时器工作方式时,计数输入信号来自内部振荡信号,在每个机器周期内定时器的计数器做一次“+1”运算
每个机器周期等于12个振荡脉冲,故定时器的计数速率为振荡周期的1/12(即12分频)——若单片机的晶振主频为12MHz,则计数周期为1us
当定时器的计数器“+1”产生溢出时,标志着定时时间到
计数器工作原理
当设置为计数器工作方式时,计数输入信号来自外部引脚T0(P3.4)、T1(P3.5)的脉冲
外部每输入一个脉冲,计数器TH0、TL0(或TH1、TL1)“+1”
计数器由计数脉冲的下降沿触发——即CPU在每个机器周期的S5P2对外部输入引脚T0(或T1)采样,若在一个机器周期中采样值为高电平,而在下一个机器周期中采样值为低电平,则紧跟着的再下一个机器周期的S3P1期间计数值就“+1”,完成一次计数操作。因此确认一次外部输入脉冲的有效跳变至少要花费2个机器周期,即24个振荡周期,所以最高计数频率为振荡频率的1/24
为了确保计数脉冲不被丢失,脉冲的高电平及低电平应保持一个机器周期以上
方式寄存器TMOD
定时/计数器的方式寄存器,是一可编程的特殊功能寄存器,字节地址为89H,不可位寻址
前四位控制定时器/计数器T1,后四位控制定时器/计数器T0
GATE:门控位。当GATE=1时,计数器受外部信号\(\overline{INTx}\) 控制,当运行控制位TR0(或TR1)为“1”且\(\overline{INTx}\)为高电平时开始计数,否则停止计数
\(C/\overline{T}\):计数器方式还是定时器方式选择位。当\(C/\overline{T}=0\)时为定时器方式,其计数器输入为晶振的12分频,即对机器周期计数;当\(C/\overline{T}=1\)时为计数器方式,计数器的触发输入来自T0(P3.4)或T1(P3.5)端输入的外部脉冲。
M1和M0:操作方式选择位
单片机复位时,TMOD各位均为“0”
四种工作方式
方式0
13位计数器
由TL的低5位(TL的高3位未用)和TH的高8位构成13位计数器(对T0、T1都适用)
方式1
当编程使方式寄存器TMOD中 M1M0 = 01时,计数器按16位工作TL、TH全部使用,构成16位计数器。
其它控制与操作方式与方式0完全相同
方式2
当编程使方式寄存器TMOD中 M1M0 = 10时,定时/计数器就变为可自动装载计数初值的8位计数器
在这种方式下,TL1(或TL0)被当做8位计数器,TH1(或TH0)被定义为赋值寄存器(存储计数器的初值)
当TLx计数溢出时,除了产生中断信号TFx外,还自动将THx的值装载到TLx,并继续进行计数
方式3
当编程使方式寄存器TMOD中 M1M0 = 11时,内部控制逻辑把T0的TL0和TH0配置成2个相互独立的8位计数器
TL0使用T0本身的一些控制位和控制信号,可作为计数器和定时器
TH0借用T1相关的一些控制位(TR1和TF1),只可用作定时器
T1此时只能用在不要中断控制的情况下,如串行口的波特率发生器
方式3只适合于定时/计数器T0,使其增加一个8位定时器;若定时器T1选择方式3,T1将停止工作,相当于TR1=0的情况;当定时器T0选择为方式3工作时,定时器T1仍可工作在方式0、方式1、方式2,用在不需要中断控制的场合。
控制寄存器TCON
定时/计数器的控制寄存器也是一个8位特殊功能寄存器,字节地址为88H,可以位寻址,位地址88~8FH,用来存放控制字
TF1(TCON.7,timer-flag):T1溢出标志。当T1产生溢出时,由硬件置“1”,可向CPU发中断请求,响应中断后被硬件自动清“0”。
TR1(TCON.6,timer-run):T1运行控制位。由软件置“1”或置“0”来启动或关闭T1工作,因而又称启/停控制位。
TF0(TCON.5):T0溢出标志(类同TF1)。
TR0(TCON.4):T0运行控制位(类同TR1)。
低四位与中断相关
复位后,TCON的各位均被清“0”
定时/计数器的初始化
由于定时/计数器是可编程的,因此在定时或计数之前要用程序进行初始化,初始化一般有以下几个步骤:
确定工作方式——对方式寄存器TMOD赋值
预置定时或计数初值,直接将初值写入TL0、TH0或TL1、TH1中
根据需要对中断允许寄存器有关位赋值,以开放或禁止定时/计数器中断(ET0、ET1、ET2、EA)
启动定时/计数器,将TCON中的TR0或TR1置“1”,计数器即按确定的工作方式和初值开始计数或定时