收藏 分享(赏)

《单片机原理及应用》第5章 定时器及应用.ppt

上传人:dreamzhangning 文档编号:5753321 上传时间:2019-03-15 格式:PPT 页数:52 大小:469.50KB
下载 相关 举报
《单片机原理及应用》第5章 定时器及应用.ppt_第1页
第1页 / 共52页
《单片机原理及应用》第5章 定时器及应用.ppt_第2页
第2页 / 共52页
《单片机原理及应用》第5章 定时器及应用.ppt_第3页
第3页 / 共52页
《单片机原理及应用》第5章 定时器及应用.ppt_第4页
第4页 / 共52页
《单片机原理及应用》第5章 定时器及应用.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、5 定时器及应用,早期的计时器-沙漏,根据流沙从一个容器漏到另一个容器的数量来计量时间。我们小时候的装饰品中就有沙漏。 焚香也是一种计时方式,一般来说一注香烧完的时间是确定的。 现代,计时的仪器有机械表/钟、石英电子表、数字电子钟等。 单片机是如何实现自动计数或定时的呢? 如果某一个事件按一定的时间间隔发生,那么通过计算这个事件出现的次数,是不是就等于计时了呢?如,分针转一圈为1分钟,那么对分针转的圈进行计数,计数到60时,说明一个小时过去了。 因此,如果从单片机的一个引脚输入方波信号,通过检测方波信号上升沿的个数,可间接地实现计时或定时的功能。,5.1 单片机的定时/计数器,大多数单片机内部

2、都集成了定时/计数器的功能模块,而且单片机的定时/计数模块在单片机中使用同一个电路实现。只是定时/计数功能模块“计算个数”的对象不一样一个是时间单位的个数,一个是外部事件的个数。 计数电路(定时/计数模块)通过一个开关选择输入的信号是时间单位脉冲或是外部事件,同一时刻,计数电路只能工作在一种功能下要么是定时器,要么是计数器。当计数完成后,定时/计数模块向CPU输出一个计数完成信号来中断计数操作。,5.2 89C51定时器概述,89C51有两个16位的定时器/计数器,即定时器0(T0)和定时器1(T1)。它们实际上都是16位加1计数器。 T0由两个8位特殊功能寄存器TH0和TL0构成;T1由TH

3、1和TL1构成。 每个定时器都可由软件设置为定时工作方式或计数工作方式。这些功能由特殊功能寄存器TMOD和TCON所控制。 定时器工作不占用CPU时间,除非定时器/计数器溢出,才能中断CPU的当前操作。 每个定时器/计数器还有四种工作模式。其中模式0-2对T0和T1是一样的,模式3对两者不同。,89C51定时器结构,定时器/计数器工作方式,定时工作方式 定时器计数89C51片内振荡器输出经12分频后的脉冲,即每个机器周期使定时器(T0或T1)的数值加1直至计满溢出。当89C51采用12MHz晶振时,一个机器周期为1s,计数频率为1MHz。 计数工作方式 通过引脚T0(P3.4)和T1(P3.5

4、)对外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时定时器的值加1。 CPU检测一个1至0的跳变需要两个机器周期,故最高计数频率为振荡频率的1/24。 为了确保某个电平在变化之前被采样一次,要求电平保持时间至少是一个完整的机器周期。 对输入脉冲信号的基本要求如图5-2所示。,图5-2 对输入脉冲宽度的要求,5.3 定时器的控制,定时器的启动、关闭和设置与特殊功能寄存器中的TMOD、TCON、TL0、TH0等寄存器有关。 TMOD用于控制T0和T1的工作模式。 TCON的功能:显示定时器溢出与否、启动/关闭定时器、 、外部中断方式控制、外部中断标志位。 TL0、TH0分别用于存放T0计数初

5、值的低8位和高8位。 TL1、TH1分别用于存放T1计数初值的低8位和高8位。,5.3.1 工作模式寄存器TMOD,TMOD用于控制T0和T1的工作模式。 TMOD不能位寻址,只能用字节传送方式设置定时器的工作模式,低半字节设置T0,高半字节设置T1。 89C51系统复位时,TMOD的所有位被清0。,TMOD各位的功能, M1和M0操作模式控制位两位可形成四种编码,对应于四种模式,见下表。, GATE门控位 GATE=0,只要用软件使TR0(或TR1)置1就可以启动定时器,而不管INT0(或INT1)的电平是高还是低。 如执行指令: SETB TR0 ;软件使TR0置1,T0启动计数。 GAT

6、E=1,只有INT0(或INT1)引脚为高电平且由软件使TR0(或TR1)置1时,才能启动定时器工作。 问题:TR0或TR1是什么?,6.3.2 控制器寄存器 TCON,TCON除可字节寻址外,各位还可位寻址。 89C51系统复位时,TCON的所有位被清0。,请编写以下指令: (a) 启动Timer 0 (b) 判断Timer 1计数是否完成,如果完成就跳转到LOOP标号 (c) 关闭Timer 0,5.4 定时器的四种模式及应用,TMOD中的M1和M0位决定了定时器的工作模式模式0,模式1,模式2,模式3。 这4种模式的区别在于是否自动重载计数初始值,计数器位数不同等。 模式0和模式1相似,

7、只是定时/计数器的位数不同(模式0用13位计数,模式1用16位计数)。 先学习模式0的逻辑结构和特点,该模式对应的是一个13位的定时器/计数器。,在模式0下,16位寄存器(TH0和TL0)只用了13位。其中TL0的高3位未用,其余5位为整个13位的低5位,TH0占高8位。当TL0的低5位溢出时,向TH0进位;TH0溢出时,使溢出中断标志TF0置位(硬件置位TF0),并申请中断。 用于定时工作方式时,定时时间为:t=(213T0初值)振荡周期12 用于计数工作方式时,计数长度最大为:213= 8192(个外部脉冲),模式0的工作特点及应用,T0(或T1)模式0逻辑电路13位计数器,计数初值的计算

8、,当T0工作在模式0的定时方式时, 定时时间为:t=(213T0初值)振荡周期12 则: T0初值 = 213 - t/(12*振荡周期) 依次类推, 当T0工作在模式1的定时方式时, 定时时间为:t=(216T0初值)振荡周期12 则: T0初值 = 216 - t/(12*振荡周期) 从以上公式可知:计数初值越大,则定时/计数器溢出时所花的时间就越少;反之,则定时/计数器溢出时所花的时间就越多。,定时/计数器初始化工作如下:,1. 确定工作方式及工作模式,即对TMOD寄存器进行赋值; 2. 计算计数初值,并写入寄存器TH0、TL0或TH1、TL1; 4. 采用中断方式时,对IE赋值,开放中

9、断; 3. 置位TR1或TR0启动定时器工作; 模式0应用举例 设定时器T0选择工作模式0,定时时间为1ms,fosc=6MHz。试确定T0初值,并计算最大定时时间T。,模式0应用举例,1. 设定时器T0选择工作模式0,定时时间为1ms,fosc=6MHz。试确定T0初值,计算最大定时时间T。 解:当T0处于工作模式0时,加1计数器为13位。 (1)设T0的初值为X。 则:(213X)1/6 10-612=110-3 sX=7692D =1 1110 0000 1100BT0的低5位:01100B=0CH即(TL0)=0CHT0的高8位:11110000B=F0H即(TH0)=F0H (2)计

10、算最大定时时间TT0的最大定时时间对应于初值为0. 则:T=2131/6 10-612=16.384ms,例2:利用T0的工作模式0产生1ms定时,在P1.0引脚输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。编程实现其功能。 解:要在P1.0引脚输出周期为2ms的方波,只要使P1.0每隔1ms取反一次即可。 (1)选择工作模式T0的模式字为TMOD=00H,即M1M0=00,C/T=0,GATE=0,其余位为0。 (2)计算1ms定时时T0的初值(213X)1/12 10-612=110-3 sX=7193D=11100000 11000BT0的低5位:11000B=18H即

11、(TL0)=18HT0的高8位:11100000B=E0H即 (TH0)=E0H,(3)采用查询方式的程序 程序清单:MOV TMOD, #00H ;设置T0为模式0MOV TL0, #18H ;送初值MOV TH0, #0E0HSETB TR0 ;启动定时LOOP:JBC TF0,NEXT ;查询定时时间到否SJMP LOOPNEXT:MOV TL0, #18H ;重装计数初值MOV TH0, #0E0HCPL P1.0 ;取反SJMP LOOP ;重复循环,(4)采用定时器溢出中断方式的程序 主程序ORG 0000HRESET: AJMP MAIN ; 跳过中断服务程序区ORG 000BH

12、AJMP CTC0ORG 0030HMAIN: MOV TMOD,#00H ;设置T0为模式0MOV TL0,#18H ;送初值MOV TH0,#0E0HSETB EA ;CPU开中断SETB ET0 ;T0中断允许SETB TR0 ;启动定时HERE:SJMP HERE ;等待中断,中断服务程序ORG 0120HCTC0: MOV TL0, #18H ;重新装计数初值MOV TH0, #0E0H CPL P1.0 ;P1.0取反RETI,模式1应用举例,用定时器T1产生一个50 Hz,占空比为1:1的方波,由 P1.1输出。使用程序查询方式。fosc=6MHz。 分析:方波周期T=1/50=

13、0.02s =20ms,10 ms高电平和10 ms低电平组成一个方波周期,用T1定时10ms。计数初值X为:X= 216 - t/(12*振荡周期) = 2161010006/12=655365000 = 60536 = EC78H如果用P1.1驱动一个LED灯,则这个LED灯可产生闪烁效果。,使用程序查询方式软件设计,源程序清单:MOV TMOD,#10H ;设置T1为工作在模式1下SETB TR1 ;启动定时 LOOP: MOV TL1,#78H ;送初值MOV TH1,#0ECHJNB TF1,$ ;查询定时时间到否CLR TF1 ; 产生溢出,清溢出标志位CPL P1.1 ;取反SJ

14、MP LOOP ;重复循环,模式2工作特点及应用,该模式把TL0(TL1)配置成一个可以自动重装载的8位定时器/计数器。 TL0计数溢出时,不仅使溢出中断标志位TF0置1,而且还自动把TH0中的内容重新装载到TL0中。TL0用作8位计数器,TH0用作寄存器以保存初值。 该模式可省去软件中重装初值的语句,并可产生相当精确的定时时间,适合于作串行口波特率发生器。 在程序初始化时,TL0和TH0由软件赋予相同的初值。 用于定时工作方式时,定时时间为:t=(28TH0初值)振荡周期12 用于计数工作方式时,计数长度最大为:28=256(个外部脉冲,例:当P3.4引脚上的电平发生负跳变时,从P1.0输出

15、一个500s的同步脉冲。请编程序实现该功能。查询方式,fosc=6MHz。,解:(1)模式选择 选T0为模式2,外部事件计数方式。当P3.4引脚上的电平发生负跳变时,T0计数器加1,溢出标志TF0置1;然后改变T0为500s定时工作方式,并使P1.0输出由1变为0。T0定时到产生溢出,使P1.0输出恢复高电平,T0又恢复外部事件计数方式。,(2)计算初值 (1)T0工作在外部事件计数方式,当计数到28-1时,再加1计数器就会溢出。设计数初值为X,当再出现一次外部事件时,计数器溢出。则: X+1=28X= 28 1=11111111B = 0FFH (2)T0工作在定时工作方式,设晶振频率为6M

16、Hz,500s相当于250个机器周期。因此,初值X为(28X)2s = 500sX = 6 = 06H,(3)程序清单 START: MOV TMOD, #06H;设置T0为模式2,外部计数方式MOV TL0, #0FFH ;T0计数器初值MOV TH0, #0FFHSETB TR0 ;启动T0计数LOOP1:JBC TF0,PTFO1 ;查询T0溢出标志,;TF0=1时转,且清TF0=0SJMP LOOP1 ;,PTFO1:CLR TR0 ;停止计数 MOV TMOD,#02H ;设置T0为模式2,定时方式 MOV TL0,#06H ;送初值,定时500sMOV TH0,#06HCLR P1

17、.0 ; P1.0清0SETB TR0 ;启动定时500sLOOP2 : JBC TF0,PTFO2 ;查询T0溢出标志,;TF0=1时转,且清TF0=0; (第一个500s到否?) SJMP LOOP2 ;等待中断,虚拟主程序PTFO2 : SETB P1.0 ; P1.0置1CLR TR0 ;停止计数SJMP START,练习:利用定时器T1的模式2对外部信号计数。要求每计满100次,将 P1.0端取反。,解: (1)选择模式 外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器发生溢出中断,中断服务程序将P1.0取反一次。 T1计数工作方式模式2的模

18、式字为:(TMOD)=60H。 T0不用时,TMOD的低4位可任取,但不能进入模式3,一般取0。 (2)计算T1的计数初值X= 28 100 = 156 = 9CH因此,TL1的初值为9CH,重装初值寄存器TH1=9CH。,(3)程序清单MAIN: MOV TMOD,#60H ;设置T1为模式2,外部计数方式MOV TL1,#9CH ;T1计数器初值MOV TH1,#9CHMOV IE,#88H ; 定时器开中断SETB TR1 ;启动T1计数HERE:SJMP HERE ;等待中断ORG 001BH ;中断服务程序入口CPL P1.0RETI,模式3工作特点及应用,工作模式3对T0和T1大不

19、相同。 T0设置为模式3,TL0和TH0被分成两个相互独立的8位计数器。 TL0可工作在定时方式和计数方式。其功能和操作与模式0、模式1相同(只是8位)。 TL0用原T0的各控制位、引脚和中断源,即C/T,GATE,TR0,TF0,T0(P3.4)引脚,INT0(P3.2)引脚。 TH0只可用作简单的内部定时功能。 TH0用了定时器T1的控制位TR1和T1的中断标志TF1,其启动和关闭仅受TR1的控制。,T0模式3结构,定时器T1无工作模式3状态。在T0用作模式3时,T1仍可设置为模式02。 由于TR1和TF1被定时器T0占用,计数器开关K已被接通,此时,仅用T1控制位C/T切换其定时或计数工

20、作方式就可使T1运行。当计数器溢出时,只能将输出送入串行口或用于不需要中断的场合。一般作波特率发生器。,T0模式3时T1结构,模式3的应用举例,例:设某用户系统已使用了两个外部中断源,并置定时器T1工作在模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0引脚输出一个5kHz的方波。Fosc=12MHz. 解:(1)工作模式 可设置T0工作在模式3计数方式,把T0的引脚作附加的外部中断输入端,TL0的计数初值为FFH,当检测到T0引脚电平出现由1至0的负跳变时,TL0产生溢出,申请中断。 T0模式3下,TL0作计数用,而TH0用作8位的定时器,定时控制P1.0引脚输出5 k

21、Hz的方波信号。,(2)计算初值 TL0的计数初值为FFH。 TH0的计数初值X为:P1.0方波周期T=1/(5kHz)=0.2ms=200s用TH0作定时100s时,X=256-100 12/12=156,(3)程序清单MOV TMOD, #27H ;T0为模式3,计数方式;T1为模式2,定时方式MOV TL0, #0FFH ;TL0计数初值MOV TH0, #156 ;TH0计数初值MOV TL1, #data ;data是根据波特率;要求设置的常数(初值)MOV TH1,#data MOV TCON,#55H ;外中断0,外中断1边沿触发, ;启动T0,T1MOV IE,#9FH ;开放

22、全部中断,TL0溢出中断服务程序(由000BH转来) TL0INT:MOV TL0,#0FFH ;TL0重赋初值(中断处理,略)RETITH0溢出中断服务程序(由001BH转来) TH0INT:MOV TH0,#156 ;TH0重赋初值CPL P1.0 ;P1.0取反输出RETI 串行口及外部中断0,外部中断1的服务程序略。,综合应用举例,例1:设时钟频率为6MHz。编写利用T0产生1s定时的程序。 解: (1)定时器T0工作模式的确定 模式0最长可定时16.384ms;模式1最长可定时131.072ms;模式2最长可定时512s; 定时1s,可选用模式1,每隔100ms中断一 次,中断10次

23、为1s。,(2)求计数器初值X (216X)12/(6 106) =10010-3 s X=15536=3CB0H因此:(TL0)=0B0H,(TH0)=3CH (3)实现方法对于中断10次计数,可使T0工作在计数方式,也可用循环程序的方法实现。本例采用循环程序法。,(4)源程序清单ORG 0000HAJMP MAIN ;上电,转向主程序ORG 000BH ;T0的中断服务程序入口地址AJMP SERVE ;转向中断服务程序ORG 0030H ;主程序 MAIN : MOV SP, #60H ;设堆栈指针MOV B,#0AH ;设循环次数MOV TMOD,#01H ;设置T0工作于模式1MOV

24、 TL0,#0B0H ;装计数值低8位MOV TH0,#3CH ;装计数值高8位SETB TR0 ;启动定时SETB ET0 ;T0开中断SETB EA ;CPU开中断SJMP $ ;等待中断,SERVE: MOV TL0,#0B0H ;重新赋初值MOV TH0,#3CHDJNZ B,LOOP ;B-1不为0,继续定时CLR TR0 ;1s定时到,停止T0工作 LOOP: RETI ;中断返回END,例2:设计一个实时电子时钟。时钟以秒、分、时为单位进行计时。用定时器与中断的联合应用。 解: (1)实现时钟计时的基本方法 计算计数初值。时钟计时的最小单位是秒,但使用单片机定时器/计数器进 行定

25、时,即使按方式1工作,其最大定时时间也只131ms。因此,可把定时器的定时时间定为100ms,计数溢出10次 即得到时钟计时的最小单位秒;而10次计数可用软件方法实 现。,假定使用定时器T0,以工作模式1进行100ms的定时。如fosc=6MHz,则计数初值X为: (216X)12/(6 106 )=10010-3 s X = 15536 = 3CB0H 因此 :(TL0)=0B0H(TH0)=3CH 采用定时方式累计溢出的次数,计满10次即得到秒计时。 从秒到分和从分到时的计时通过累计和数值比较实现。 时钟显示以及显示缓冲区部分在这里略,可自行设计。, 主程序(MAIN)的主要功能:进行定时

26、器T1的初始化编程并启动T1,然后通过反复调用显示子程序,等待100ms定时中断的到来。其流程如 图6-13所示。 中断服务程序(PITO)的主要功能:进行计时操作。程序开始先判断计数溢出是否满了10次,不满表明还没达到最小计时单位秒,中断返回;如满10次则表示已达到最小计时单位秒,程序继续向下运行,进行计时操作。要求满1秒则“秒位”32H单元内容加1,满60s则“分位”31H单元内容加1,满60min则“时位”30H单元内容加1,满24h则30H,31H,32H单元内容全部清0。中断服务程序流程如 图6-14所示。,设T1为模式1,设置中断次数,清计时单元,开中断,启动T1,调用显示子程序,

27、等待定时中断,图6-13 时钟主程序流程,保护现场,赋计数初值,到1s?,(32H)加1,(32H)=60?,(32H)清0,(31H)加1,(31H)=60?,(31H)清0,(30H)加1,(30H)=24?,(30H)清0,恢复现场,返回,入口,a,a,N,N,N,N,Y,Y,Y,Y,图6-14 中断服务程序流程图, 源程序如下:ORG 0000HAJMP MAIN ;上电,转向主程序ORG 001BH ;T1的中断服务程序入口地址AJMP SERVE ;转向中断服务程序ORG 0030H ;主程序 MAIN: MOV SP,#60H ;设堆栈指针MOV TMOD,#10H ;设置T1工

28、作于模式1 MOV 20H,#0AH ;设循环次数CLR AMOV 30H,A ;时单元清0MOV 31H,A ;分单元清0MOV 32H,A ;秒单元清0,SETB ET1 ;T1开中断SETB EA ;CPU开中断MOV TL1,#0B0H ;装计数值低8位MOV TH1,#3CH ;装计数值高8位SETB TR1 ;启动定时SJMP $ ;等待中断(可反复调用显示子程序),ORG 0200H SERVE: PUSH PSW ;保护现场PUSH ACCMOV TL1,#0B0H ;重新赋初值MOV TH1,#3CHDJNZ 20H,RETUNT ;1s未到,返回MOV 20H,#0AH ;

29、重置中断次数MOV A,#01HADD A,32H ;“秒位”加1DA A ;转换为BCD码MOV 32H,ACJNE A,#60H,RETUNT ;未满60s,返回MOV 32H,#00H ;计满60s,“秒位”清0,MOV A,#01HADD A,31H ;“分位”加1DA A ;转换为BCD码 MOV 31H,ACJNE A,#60H,RETUNT ;未满60min,返回MOV 31H,#00H ;计满60min,“分位”清0MOV A,#01H ADD A,30H ;“时位”加1DA A ;转换为BCD码MOV 30H,A CJNE A,#24H,RETUNT ;未满24h,返回MOV 30H,#00H ;计满24h,“时位”清0 RETUNT: POP ACC ;恢复现场POP PSWRETI ;中断返回 END,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报