单片机中级教程 第5章 定时器.docx
- 文档编号:30631119
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:18
- 大小:36.74KB
单片机中级教程 第5章 定时器.docx
《单片机中级教程 第5章 定时器.docx》由会员分享,可在线阅读,更多相关《单片机中级教程 第5章 定时器.docx(18页珍藏版)》请在冰豆网上搜索。
单片机中级教程第5章定时器
第5章定时器/计数器
在控制系统中,常常要求有一些定时或延时控制,如定时输出、定时检测、定时扫描等;也往往要求有计数功能,能对外部事件进行计数。
要实现上述功能,一般可用下面三种方法:
(1)软件定时:
让CPU循环执行一段程序,以实现软件定时。
但软件定时占用了CPU时间,降低了CPU的利用率,因此软件定时的时间不宜太长。
(2)硬件定时:
采用时基电路(例如555定时芯片),外接必要的元器件(电阻和电容),即可构成硬件定时电路。
这种定时电路在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。
(3)可编程的定时器:
这种定时器的定时值及定时范围可以很容易地用软件来确定和修改,因而功能强,使用灵活。
例如8253可编程芯片。
MCS-51系列单片机的硬件上集成有16位的可编程定时/计数器。
-51子系列单片机有2个定时器/计数器,即定时/计数器0和1;简称T0和T1。
-52子系列单片机(8032/8052)除了有上述2个定时/计数器外,还有一个定时/计数器2,即三个定时/计数器,且后者的功能比前两者强。
5.1定时/计数器0和1
5.1.1定时/计数器的结构及功能
1.定时/计数器的结构
定时/计数器的结构如图5-1所示,定时/计数器T0由TH0和TL0构成,T1由TH1和TL1构成。
TMOD用于控制和确定各定时/计数器的功能和工作模式。
TCON用于控制定时/计数器T0、T1启动和停止计数,同时包含定时/计数器的状态。
它们属于特殊功能寄存器。
这些寄存器的内容靠软件设置。
系统复位时,寄存器的所有位都被清零。
图5-1定时/计数器的结构
定时/计数器T0和T1都是加法计数器,每输入一个脉冲,计数器加1,当加到计数器为全1时,再输入一个脉冲,就使计数器发生溢出,溢出时,计数器回0,并置位TCON中的TF0或TF1,以表示定时时间已到或计数值已满,向CPU发出中断申请。
2.T0和T1的功能选择
T0和T1都具有定时和计数两种功能。
在TMOD(定时器模式控制寄存器)中,有一个控制位(C/
),分别用于选择T0和T1是工作在定时器方式,还是计数器方式。
(1)计数功能
所谓计数,是对外部事件进行计数。
当选择计数器方式时,计数脉冲来自相应的外部输入引脚T0(P3.4)或T1(P3.5)。
当输入信号发生由1至0的负跳变时,计数器(TH0,TL0或TH1,TL1)的值增1。
每个机器周期的S5P2期间,对外部脉冲信号输入进行采样。
如在第一个周期中采样值为1,而在下一个周期中采样值为0,则在紧跟着的再下一个周期的S3P1期间,计数值就增1。
由于确认一次下跳变要
花2个机器周期,即24个振荡器周期,因此
外部输入的计数脉冲的最高频率为振荡器频
率的1/24。
对外部输入信号的占空比并没有
什么限制,但为了确保某一给定的电平在变
化之前至少被采样一次,则这一电平至少要
保持一个机器周期。
故对输入信号的基本要
求如图5-2所示,图中,Tcy为机器周期。
图5-2对输入信号的基本要求
(2)定时功能
T0、T1的定时功能也是通过计数实现的。
当选择定时器方式时,计数脉冲来自于内部时钟脉冲,每个机器周期使计数器的值增1。
每个机器周期等于12个振荡器周期,故计数速率为振荡器频率的1/12。
当采用12MHz晶体时,计数速率为1MHz。
即每1µs计数器加1。
计数值乘以单片机的机器周期就是定时时间。
5.1.2定时/计数器0和1的控制和状态寄存器
特殊功能寄存器TMOD和TCON分别是定时/计数器0和1的控制和状态寄存器,用于控制和确定各定时/计数器的功能和工作模式等。
1.模式控制寄存器TMOD
TMOD用于控制T0和T1的工作方式和4种工作模式。
其中低4位用于控制T0,高4位用于控制T1。
其格式如下:
(MSB)(LSB)
GATE
C/
M1
M0
GATE
C/
M1
M0
GATE位:
门控位。
当GATE=1时,只有
或
引脚为高电平且TR0或TR1置1时,相应的定时/计数器才被选通工作,这时可用于测量在
端出现的正脉冲的宽度。
若GATE=0,则只要TR0和TR1置1,定时/计数器就被选通,而不管
或
的电平是高还是低。
C/
位:
计数/定时功能选择位。
C/
=0,设置为定时器方式,计数器的输入是内部时钟脉冲,其周期等于机器周期。
C/
=1,设置为计数器方式,计数器的输入来自T0(P3.4)或T1(P3.5)端的外部脉冲。
M1、M0位:
工作模式选择位。
2位可形成4种编码,对应于4种工作模式,见表5-1。
表5-1定时/计数器工作模式
M1 M0
功 能 描 述
0 0
模式0。
TLx中低5位与THX中的8位构成13位计数器。
计满溢出时,13位计数器回0。
0 1
模式1。
TLx与THx构成16位计数器。
计满溢出时,16位计数器回0
1 0
模式2。
8位自动重装载的定时器/计数器,每当计数器TLx溢出时,THX中的内容重新装载到TLx.
1 1
模式3.对定时器0,分成2个8位计数器,对于定时器1,停止计数.
TMOD寄存器的单元地址是89H,不能位寻址,只能用字节传送指令设置其内容。
2.控制寄存器TCON
TCON用来控制T0和T1的启、停,并给出相应的状态,字节地址为88H,位地址为88H~8FH,其格式如下:
(MSB)(LSB)
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TF1位:
定时器1溢出标志位。
当定时/计数器1溢出时,由硬件置1。
使用查询方式时,此位做状态位供查询,查询有效后需由软件清0;使用中断方式时,此位做中断申请标志位,进入中断服务后被硬件自动清0。
TR1位:
定时器1运行控制位。
该位靠软件置位或清0,置位时,定时/计数器接通工作,清0时,停止工作。
TF0位:
定时器0溢出标志位。
其功能和操作情况类同于TF1。
TR0位:
定时器0运行控制位。
其功能和操作类同于TR1。
TCON的低4位与外部中断有关,将在中断系统的有关章节中作介绍。
3.定时/计数器的初始化
MCS-51系列单片机的定时/计数器是可编程的,因此,在进行定时或计数之前也要用程序进行初始化。
初始化一般应包括以下几个步骤:
(1)对TMOD寄存器赋值,以确定定时器的工作模式。
(2)置定时/计数器初值,直接将初值写入寄存器的TH0,TL0或TH1,TL1。
(3)根据需要,对寄存器IE置初值,开放定时器中断。
(4)对TCON寄存器中的TR0或TR1置位,启动定时/计数器。
置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。
在初始化过程中,要置入定时/计数器的初值,这时要作一些计算。
由于计数器是加法计数,并在溢出时申请中断,因此不能直接输入所需的计数值,而是要从计数最大值倒退回去一个计数值才是应置入的初值。
设计数器的最大值为M(在不同的工作模式中,M可以为213,216或28),则置入的初值X可这样来计算:
计数方式时:
X=M-计数值
定时方式时:
(M-X)·T=定时值
所以X=M-定时值/T
其中T为计数周期,它是单片机的机器周期。
当机器周期为1µs时,工作在模式0时,最大定时值为
213×1µs=8.192ms
若工作在模式1,则最大定时值为
216×1µs=65.536ms
5.1.3T0和T1的四种工作模式
T0和T1除了可以选择定时器或计数器功能外,每个定时/计数器还有4种工作模式,其中前3种模式对两者都是一样的,而模式3对两者是不同的。
下面以T1为例进行介绍。
1.模式0
当M1M0为00时,则T0或T1便工作在模式0。
图5-3表示了T1在模式0下的逻辑图,对T0也适用,只要把图中相应的标识符后缀1改为0即可。
模式0为13位计数器,由TL1的低5位和TH1的8位构成,TL1中的高3位弃之未用。
由图可见,当C/
=0时,多路开关接通内部振荡器的十二分频输出,此时13位计数器就是对机器周期进行计数,这就是所谓定时器工作方式。
当C/
=1时,多路开关接通计数引脚T1,外部计数脉冲由T1(P3.5)输入。
当计数脉冲发生负跳变时,计数器加1,这就是所谓计数工作方式。
图5-3定时/计数器1工作模式0(13位计数器)
不管是哪种工作方式,当TL1的低5位计数溢出时,向TH1进位,而全部13位计数器溢出时,使计数器回0,并使溢出标志TF1置1,向CPU发中断请求。
由图中也可以看出门控位GATE的作用。
当GATE=0时,经反相后使或门输出为1,此时仅由TR1控制与门的开启。
当TR1=1时,与门输出为1,控制开关闭合,启动计数器工作;当TR1=0时,控制开关断开,停止计数器工作。
当GATE=1时,则由
控制或门的输出,此时与门的开启由
和TR1共同控制。
当TR1=1时,外部中断
直接控制定时/计数器的启动和停止,即
由0变为1电平时,启动计数,当
由1变为0电平时,停止计数。
这样情况常用来测量在
端出现的正脉冲的宽度。
2.模式1
当M1M0为01时,T1工作于模式1下,模式1的逻辑电路和工作情况与模式0几乎完全相同,唯一的差别是:
在模式1中,定时器TH1和TL1组合成一个16位定时/计数器,即TL1中的高三位也参与计数。
3.模式2
模式2是把计数寄存器TL1(或TL0)配置成一个可以自动重装载的8位计数器,如图5-4所示。
TL1做8位加法计数器,TH1做8位初值寄存器,TH0的初值由软件设置。
当装入初值和启动定时/计数器工作后,TL1按8位加法计数器工作,TL1计数溢出时,不仅使溢出标志TF1置1,而且还自动把TH1中的初值重装载到TL1中,重装载后TH1的内容不变。
模式2对定时控制特别有用。
例如,当希望利用定时器每隔250μs产生一个定时控制脉冲,则可以采用12MHz的振荡器,把TH1预置为6,并使C/
=0。
模式2还特别适合于把定时/计数器作为串行口波特率发生器使用。
图5-4定时/计数器1工作模式2(8位自动装载模式)
4.模式3
工作模式3对定时/计数器0和定时/计数器1是大不相同的。
对于T1,设置为模式3,将使它停止计数并保持原有的计数值,其作用如同使TR1=0,因此,没有什么实质意义。
对于T0,设置为模式3则有所不同。
这时,它将把16位计数器分成2个互相独立的8位计数器TL0和TH0,如图5-5所示。
其中TL0利用了定时/计数器0本身的一些控制位:
C/
、GATE、TR0、
和TF0。
它的操作情况与模式0和模式1类似,既可以按计数方式工作,也可以按定时方式工作。
而TH0被规定只可用作定时器,即只对机器周期计数,它借用了T1的控制位TR1和TF1,因此,TH0的启、停受TR1控制,TH0的溢出将置位TF1,这时的TH0占用了T1的中断。
图5-5定时/计数器0工作在模式3(2个8位计数器)
模式3适用于要求增加一个额外的8位定时器的场合。
把T0设置为模式3,TH0控制了T1的中断,此时T1可以设置为模式0~2,用在任何不需要中断控制的场合。
5.2定时/计数器2
-52子系列单片机中有一个功能较强的定时/计数器2,简称T2,它是一个16位的,具有自动重装载和捕获能力的定时/计数器。
在特殊功能寄存器组中有5个与T2有关的寄存器:
控制寄存器T2CON、捕获寄存器RCAP2H和RCAP2L、定时寄存器高低字节TH2和TL2。
5.2.1T2控制寄存器T2CON
T2CON为T2的状态控制寄存器,用于确定T2的工作方式、各种功能选择及有关状态信息,T2CON的各位定义如下:
(MSB)(LSB)
TF2
EXF2
RCLK
TCLK
EXEN2
TR2
C/
2
CP/
TF2(T2CON.7)位:
T2溢出中断标志位。
T2计数溢出时置位,并申请中断。
该位只能靠软件清除。
但在波特率发生器方式下,也即RCLK=1或TCLK=1时,定时器溢出不对TF2置位。
EXF2(T2CON.6)位:
T2外部触发中断标志。
当EXEN2=1且T2EX引脚上出现负跳变而造成捕获或重装载时,EXF2置位,申请中断。
这时若已允许定时器2中断,CPU将响应中断,并转向中断服务程序。
EXF2也要靠软件来清除。
RCLK(T2CON.5)位:
接收时钟选择位。
靠软件置位或清除,用以选择定时/计数器2或1作串行口接收波特率发生器。
RCLK=1时,用T2溢出脉冲作串行口的接收时钟;RCLK=0时,用T1的溢出脉冲作接收时钟。
TCLK(T2CON.4)位:
发送时钟选择位。
靠软件置位或清除,以选择定时/计数器2或1作串行口发送波特率发生器。
TCLK=1时,用T2溢出脉冲作串行口的发送时钟;TCLK=0时,用T1的溢出脉冲作发送时钟。
EXEN2(T2CON.3)位:
定时/计数器2外部触发允许标志。
靠软件置位或清除,以允许或禁止用外部信号来触发捕获或重装载操作。
当EXEN2=1时,若T2未用作串行口的波特率发生器,则在T2EX端出现的信号负跳变时,将造成定时/计数器2捕获或重装载,并置EXF2标志为1,请求中断。
EXEN2=0时,T2EX端的外部信号不起作用。
TR2(T2CON.2)位:
定时/计数器2运行控制位。
靠软件设置或清除,以决定T2是否运行。
TR2=1,启动定时/计数器2,否则停止。
C/
2(T2CON.1)位:
定时/计数功能选择位(或计数脉冲选择位)。
靠软件设置或清除。
C/
2=0,选择定时器工作方式(作波特率发生器时,对fosc/2计数;当不用作波特率发生器时,对fosc/12计数),C/
2=1选择计数器工作方式(计数脉冲来源于外引脚T2CLK),下降沿触发。
CP/
(T2CON.0)位:
捕获或重装载标志。
靠软件设置或清除。
CP/
=1选择捕获功能,这时若EXEN2=1,且T2EX端的信号负跳变时,发生捕获操作,即把TH2和TL2的内容传递给RCAP2H和RCAP2L。
CP/
=0,选择重装载功能,这时若定时器2溢出,或在EXEN2=1条件下T2EX端信号有负跳变,都会造成自动重装载操作,即把RCAP2H和RCAP2L的内容传送给TH2和TL2。
当RCLK=1或TCLK=1时,CP/
控制位不起作用,定时器2被强制工作于重装载方式。
重装载发生于定时器2溢出时,常用来作波特率发生器。
特殊功能寄存器T2CON中的各位是可位寻址的,因此,所有标志或控制位都可以用位操作指令来置位或清0。
5.2.2定时计数器T2的工作方式
-52子系列单片机中的定时/计数器2也是一个加1计数器。
它具有两种工作方式:
定时/计数器方式和波特率发生器方式。
1.T2的定时/计数器工作方式
图5-6是T2定时/计数器工作方式下的逻辑图。
在定时/计数器方式下,控制位C/
决定了定时/计数器2是工作在计数器方式还是定时器方式。
C/
=0时,TH2和TL2计的是机器周期数,作定时器使用。
C/
=1时,计数脉冲来自T2(P1.0)引脚,TH2和TL2作外部信号脉冲计数器用,其工作情况和时序关系与定时器/计数器0和1完全一样,对外部计数脉冲的要求也如图5-2所示。
图5-6定时/计数器方式下的定时/计数器2
控制位CP/
(T2CON.0)用来选择定时/计数器2是工作于捕获方式还是重装载方式。
TH2和TL2的内容的捕获或自动重装载是通过一对捕获/重装载寄存器RCAP2H和RCAP2L来实现的。
TH2、TL2和RCAP2H、RCAP2L之间接有双向缓冲器(三态门)。
当CP/
=0时,选择自动重装载方式,在一定条件下,RCAP2H和RCAP2L的数据将自动装入TH2和TL2;当CP/
=1时,选择捕获方式,数据传送方向则与上述相反。
捕获或重装载操作发生于下述2种情况下:
⑴T2寄存器TH2和TL2溢出时。
若CP/
=0,则打开三态缓冲器,把RCAP2H和RCAP2L的内容自动重装载到TH2和TL2中。
同时,溢出标志TF2置1,申请中断。
⑵当EXEN2=1且T2EX(P1.1)端的信号有负跳变时。
这时根据CP/
是0还是1,将发生捕获操作或重装载操作,同时标志EXF2置1,申请中断。
若T2的中断是被允许的,则无论发生TF2=1还是EXF2=1,CPU都会响应中断,此中断向量地址为2BH。
.响应中断后,应靠软件撤除中断申请,以免无休止地发生中断。
TF2和EXF2都是直接可寻址位,可采用CLRTF2和CLREXF2指令实现中断申请标志的撤除。
2.波特率发生器方式
图5-7是波特率发生器方式下的定时/计数器2的逻辑图。
波特率(Baudrate)即每秒钟传输数据位数,波特率发生器用于决定串行口的数据传输速率。
在T2CON中有2个控制位:
RCLK和TCLK,用于选择定时/计数器1或定时/计数器2作串行通信的波特率发生器。
由图5-7看出,这两位的值用来控制2个电子开关的位置。
值为0时,选用定时/计数器1作波特率发生器;值为1时,选用定时/计数器2作波特率发生器。
RCLK选择串行口接收波特率发生器,TCLK选择串行口发送波特率发生器。
当选用定时/计数器2作波特率发生器时,其溢出脉冲用作串行口的时钟,此时钟频率可由内部时钟决定,也可由外部时钟决定。
图5-7波特率发生器方式下的定时/计数器2
若C/
2=1,选用外部时钟作为计数脉冲,该时钟由T2CLK(P1.0)端输入,每当外部脉冲出现负跳变时,计数器值增1。
外部脉冲频率不超过振荡器频率的1/24。
由于溢出时,RCAP2H和RCAP2L的内容会自动装载到TH2和TL2中,故波特率的值还决定于装载值。
若C/
2=0,选用内部时钟,计数脉冲的频率为振荡频率的二分之一。
当定时/计数器2用作波特率发生器时,若EXEN2置1,则T2EX端的信号产生负跳变,EXF2将置1,但不会发生捕获或重装载操作。
这时T2EX可以作为一个附加的外部中断源。
另外,在波特率发生器工作方式下,TH2和TL2的内容不能再读写,也不能改写RCAP2H和RCAP2L。
5.3定时器/计数器的应用
定时器是单片机应用系统中的重要组成部件,其工作模式的灵活应用对提高编程技巧、减轻CPU负担和简化外围电路有很大益处。
本节将通过应用实例,说明定时器的使用方法。
在此,暂不使用中断方式。
5.3.1定时/计数器模式0的应用
模式0是一种13位计数器的工作模式,由THx和TLx组成的16位计数器中TLx的高3位没有被使用。
例5-1试利用T0产生周期为1ms、宽度为一个机器周期的负脉冲串,并由P1.0送出。
假定系统晶振为12MHz,则计数频率为1MHz。
若计数器的初值为X,则要求:
(213―X)×10-6=1×10-3
故X=7192=1110000011000B。
其中高8位应赋给TH0,低5位应赋给TL0,所以TH0的初值为0E0H,TL0的初值为18H。
若采用查询方式,则编程如下:
MOVTMOD,#00H;设置定时器0模式0
MOVTH0,#0E0H;设置计数初值
MOVTL0,#18H
SETBTR0;启动定时器0
T0INT:
JNBTF0,T0INT
CLRTF0
CLRP1.0
SETBP1.0
MOVTH0,#0E0H;用软件重新装载TH0和TL0
MOVTL0,#18H;
SJMPT0INT
一般情况下,CPU要完成大量的其它任务,而1ms产生一个脉冲,其间CPU有足够的时间处理大量的其它事情。
所以,在这种情况下,更宜采用中断方式,而不宜采用查询方式。
5.3.2定时/计数器模式1的应用
模式1与模式0基本相同,只是模式1改用了16位计数器。
当要求定时周期较长,13位计数器不够用时,可改用16位计数器。
例5-2利用T0模式1产生一个50Hz的方波,由P1.0输出。
假设系统仍采用12MHz晶体,则计数器初值X可由下式算得:
(216―X)×10-6=
因而,X=55536=0D0F0H。
若采用查询方式,则编程如下:
MOVTMOD,#01H;设置定时器0模式1
SETBTR0
LOOP:
MOVTH0,#0D8H
MOVTL0,#0F0H
JNBTF0,$
CLRTF0
CPLP1.0
SJMPLOOP
值得一提的是:
TMOD不是可位寻址的,因此不能用SETB或CLR命令对TMOD进行按位操作,否则汇编时将出错。
5.3.3定时/计数器模式2的应用
模式2是自动重装载模式。
在这种模式下,计数初值只需设置一次,以后不再需要用软件重新设置。
例5-3利用T1模式2进行计数,每计200次进行累加器加1操作。
计算计数初值:
28-200=56D=38H
采用查询方式,编程如下:
MOVTMOD,#60H;设置定时器1模式2,计数功能
MOVTH1,#38H;保存计数初值
MOVTL1,#38H;设置计数初值
SETBTR1;启动计数
DEL:
JBCTF1,LOOP;查询是否计数溢出
AJMPDEL
LOOP:
INCA;累加器加1
AJMPDEL;循环
5.3.4定时/计数器门控位GATE的应用
一般情况下,设置门控位GATE=0,使定时/计数器的运行只受TRx位的控制。
当GATE=1时,定时/计数器的运行将同时受TRx位和
引脚电平的控制。
在TRx=1时,若
=1,则启动计数,若
=0时,则停止计数。
这一特点可极为方便地用于测试外部输入脉冲的宽度。
例5-4利用T0的门控位GATE,编程实现检测外部输入脉冲的宽度。
解:
外部脉冲由
(P3.2)输入,其宽度为TP,如图5-8所示。
定时器/计数器0工作于定时方式,模式1(16位计数器)。
测试
时,应在
为低电平时,设置TR0=1;
当
变为高电平时,就启动计数;当
再次变低时,停止计数。
并使TR0=0,
读出TH0、TL0的计数值保存,此计数值
乘以定时脉冲周期(即机器周期),就得到图5-8利用GATE功能来检测脉冲的宽度
被检测正脉冲的宽度TP。
下面是有关的程序,该程序把计数结果存放在30H和31H两个单元:
MOVTMOD,#09H;设T0为模式1,定时方式,GATE=1
MOVTL0,#00H设置计数初值为0
MOVTH0,#00H
MOVR0,#30H;地址指针送R0
JBINT0,$;等待INT0变低
SETBTR0;准备启动定时器0
JNBINT0,$;等待INT0变高
JBINT0,$;启动计数,并等待INT0再次变低
CLRTR0;停止计数
MOV@R0,TL0;读取计数值
INCR0
MOV@R0,TH0
设fosc=12MHz,则这种方案的最大被测脉冲宽度为65536微秒,由于靠软件启动和停止计数,有一定的测量误差,其最大可能的误差应由有关指令的时序确定。
5.3.5运行中读定时/计数器
上例中,在读取定时器的计数值之前,已把它停止计数。
但是在某些情况下,不希望在读计数值时打断计数的过程。
虽然MCS-51系列单片机中,随时可以读取计数寄存器THx和TLx,但在读取
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机中级教程 第5章 定时器 单片机 中级 教程