定时器/计数器MCS-51单片机内部有两个16位可编程的定时器/计数器,即定时器T0(由TH0和TL0组成)和定时器T1(由TH1和TL1组成),它们既可用作定时器定时,又可用作计数器记录外部脉冲个数,其工作方式、定时时间、启动、停止等均用指令设定。
定时器/计数器的结构1.定时器/计数器的工作原理定时器/计数器T0和T1的工作方式通过八位寄存器TMOD设定,T0和T1 的启动、停止由八位寄存器TCON控制。
工作前需先装入初值,利用传送指令将初值装入加1计数器TH0和TL0或TH1和TL1,高位数装入TH0或TH1,低位数装入TL0或TL1。
当发出启动命令后,加1计数器开始加1计数,加到满值(各位全1)后,再加1就会产生溢出,系统将初值寄存器清0。
如果需要继续计数或定时,则需要重新赋计数初值。
2.定时器的方式寄存器TMOD特殊功能寄存器TMOD为定时器的方式控制寄存器。
TMOD是用来设定定时器的工作方式,其格式如下:各位功能如下:(1)GATE控制定时器的两种启动方式当GATE=0时,只要TR0或TR1置1,定时器启动。
当GATE=1时,除TR0或TR1置1外,还必须等待外部脉冲输入端(P3.3)或(P3.2)高电平到,定时器才能启动。
若外部输入低电平则定时器关闭,这样可实现由外部控制定时器的启动、停止,故该位被称为门控位。
定时器1类同。
(2)定时/计数方式选择位当该位为0时,T0或T1为定时方式;当该位为1时,T0或T1为计数方式。
(3)方式选择位M1、M0M1、M0两位可组合成4种状态,控制4种工作方式。
每种方式的功能如表5-1。
表5-1 M1、M0控制的工作方式M1 M0 工作方式说明0 00 11 01 1 0123 13位计数器16位计数器可再装入8位计数器T0分为两个8位计数器,T1停止计数3.控制及标志寄存器TCON特殊功能寄存器TCON控制定时器的启动、停止、溢出、中断等。
有些位是控制设置,有些是标志位,各位都有对应地址。
其格式如下:TCON 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H(88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0各位功能如下:(1)TFl:定时器1溢出标志,T1溢出时由硬件置1,并申请中断,CPU响应中断后,又由硬件清0。
TF1也可由软件清0。
(2)TF0:定时器0溢出标志,功能与TFl相同。
(3)TRl:定时器1运行控制位,可由软件置1或清0来启动或停止T1。
(4)TR0:定时器0运行控制位,功能与TRl相同。
(5)IE1:外部中断l请求标志。
(6)IE0:外部中断0请求标志。
(7)IT1;外部中断1触发方式选择位。
(8)IT0:外部中断0触发方式选择位。
TCON中各位均是1有效,如利用程序把TR1或TR0置1则启动定时器,否则定时器处于关闭状态。
当T1或T0溢出时,由硬件把TF1或TF0置1,作为溢出标志。
TCON中的低4位IE1、IE0、IT1、IT0用于中断工作方式,这方面内容在讲述中断的章节中再详细讨论。
当整机复位后,TCON中的各位均为0。
工作方式MCS-51片内的定时器/计数器可以通过对TMOD寄存器中的控制位的设置来选择定时或计数方式,通过对M1、M0的设置来选择四种工作方式,下面以T0为例说明。
1. 方式0当M1、M0设置为00时,定时器选定为方式0工作。
T0在工作方式0的逻辑结构如图5-1所示。
在这种工作方式下,16位的计数器(TH0和TL0)只用了13位,构成13位定时器/计数器。
TL0的高3位未用,当TL0的低5位计满时,向TH0进位。
而TH0溢出后对中断标志位TF0置1,并申请中断,同时把计数器清零。
图5-1 T0在工作方式0的逻辑结构当GATE=0时,INT0被封锁,且仅由TR0便可控制T0的开启和关闭,即只要TCON 中的TR0为1,TL0及TH0组成的13位计数器就可以开始计数。
当GATE=1时,T0的开启与关闭取决于和TR0相与的结果,即只有当=1和TR0=1时,T0才开始工作。
这可以用来测量在端出现的脉冲宽度。
2.方式1方式1和方式0的工作方式相同,唯一的差别时TH0和TL0组成一个16位计数器。
如图5-2。
3.方式2T0在工作方式2的逻辑结构图如图5-3所示。
定时器/计数器构成一个能自动重复置初值的8位计数器。
在工作方式0、1,每次计满溢出后,计数值变为0,故还得重新装入初值。
而工作方式2可在计数器计满溢出时自动装入初值,实际是把16位的计数器拆成两个8位,TL0用作8位计数器,TH0用来保存初值。
每当TL0计满溢出时,可自动将TH0的值装入TL0中。
方式2还用作串行口波特率发生器。
4.方式3方式3对定时器T0和T1是不相同的。
若T1设置为方式3,则停止工作(其效果与TR1=0相同)。
所以方式3只适用于T0。
方式3使MCS-51具有三个定时器/计数器(增加了一个附加的8位定时器/计数器)。
当T0设置为方式3时,将使TL0和TH0成为两个相互独立的8位计数器,如图5-4。
其中,TL0使用原T0的各控制位、引脚和中断源;、GATE、TR0、和TF0;而TH0则只能作为定时器使用,但它占用T1的TR1和TFl,即T1的中断标志和运行控制位。
通常,当T1用作串行口波特率发生器时,T0才设置为工作方式3,此时,T1虽仍可定义为工作方式0、工作方式1和工作方式2,但只能用在不需中断控制的场合。
定时器初始化使用定时器时,必须先利用指令对其进行正确设置,这种设置过程称为初始化。
1.初始化主要内容(1)选择工作方式通过对方式寄存器TMOD进行设置,选择工作方式。
例如,欲设置T0为定时方式1,TMOD状态应置为:GATE M1 M0 GATE M1 M0TMOD 0 0 0 0 0 0 0 1其状态字为01H。
利用指令“MOV TMOD,#01H”,则可把TMOD设置成T0方式1状态。
同样,若设置T1为计数方式1,只需=1,M0=1,则用指令MOV TMOD,#50H 可达此目的。
注意:TMOD不能位寻址。
(2)给定时器赋初值赋初值即把初始常数装入TH0、TL0或TH1、TL1。
例 T0初值3CB0H,T1初值00FFH。
利用字节传送指令装入初值:MOV TH0,#3CHMOV TL0,#0B0HMOV TH1,#00HMOV TL1,#0FFH(3)根据需要设置中断控制字对中断允许寄存器IE和优先级寄存器IP设置,详细在中断一节介绍。
(4)启动定时器例 SETB TR0 ;启动T0SETB TR1 ;启动T1设定时器T1为方式1,初值3CB0H,若未用中断,初始化程序如下:MOV TMOD, #10HMOV TH1, #3CHMOV TL1, #0B0HSETB TR12.定时器初值设定方法定时时间和定时器工作方式、初值及时钟周期均有关系,欲设定准确时间,必须会计算定时器初值。
即使同样的时间,工作方式不同,初值则不同;时钟频率不同即使工作方式相同,初值也不同。
一般设定初值分几步考虑。
(1)根据时间长短,选择工作方式因为工作方式不同,溢出一次计数最大值不同。
设用M表示最大计数值,则各种方式计数最大值如下:方式0 M=213=8192方式1 M=216=65536方式2 M=28=256方式3 M=28=256原则上,定时时间长选用16位或13位计数器,即方式0或方式1。
若时间短选8位计数器即方式2和方式3,如果需要自动装入初值,只能选择方式2。
(2)定时初值计算设初值为X,最大计数值为M。
初值X与机器周期TM、定时时间T的关系如下:(M-X)TM=T其中,TM=12个时钟周期=12/ fosc,X=M-T/TM由以上可以看出,计数次数为(M-X),初值越大,达到满值所需计数次数越小,若时钟频率一定,定时越短。
而且时钟频率越大,时钟周期越短,机器周期越小,计数器加1一次时间越短。
因为 TM=12/fosc所以当fosc=6MHZ时, TM=2μs当fosc=12MHZ时, TM=1μs例:设采用定时器T1,方式1,定时50ms,计算定时初值。
已知晶振频率fosc =12MHZ解:fosc=12MHZ TM=1μs定时方式1时 M=216=65536所以 X=M-T/TM=65536-50000/1=15536=3CB0H这样只要把定时器T1装入初值3CB0H,定时器计满溢出一次的时间就是50ms。
若需要继续定时,应再装入初值。
溢出信号使TCON寄存器中的溢出标志位TF1置1,称硬件置位。
应用程序设计例编写用定时器延时50ms的子程序。
MOV TMOD, #01H ;T0为方式1,送方式字MOV TH0, #3CH ;送初值高字节MOV TL0, #0B0H ;送初值低字节SETB TR0 ;启动T0LP: JBC TF0 LP1 ;判断溢出标志TF0是否等于1,是就转LP1SJMP LP ;继续查询50ms到否LP1: MOV TH0, #3CH ;重新赋初值MOV TL0, #0B0HSJMP LP ;返回LP,继续查询下一次。