收藏 分享(赏)

定时器95581.ppt

上传人:kpmy5893 文档编号:8460187 上传时间:2019-06-28 格式:PPT 页数:60 大小:446.50KB
下载 相关 举报
定时器95581.ppt_第1页
第1页 / 共60页
定时器95581.ppt_第2页
第2页 / 共60页
定时器95581.ppt_第3页
第3页 / 共60页
定时器95581.ppt_第4页
第4页 / 共60页
定时器95581.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

1、第六章 定时器及应用,返回主目录,6.1 定时器概述,6.2 定时器的控制,6.3 定时器的四种模式及应用,6.2.1 工作模式寄存器TMOD,6.3.1 模式0及应用,6.2.2 控制寄存器TCON,6.3.2 模式1及应用,6.3.3 模式2及应用,6.3.4 模式3及应用,6.3.5 综合应用举例,6.1 定时器概述,51系列单片机内有两个十六位增一 定时 / 计数器,TH0,计数值高八位,TL0,计数值低八位,TH1,计数值高八位,TL1,计数值低八位,TMOD,TCON,工作方式,定时 / 计数控制,89C51单片机有2个16位的定时/计数器,即定时器0(T0)和定时器1(T1)。T

2、0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。这些功能都由特殊功能寄存器TMOD和TCON所控制。 当设置为定时工作方式时,定时器计数89C51片内振荡器输出经12分频后的脉冲,即每个机器周期使定时器(T0或T1)的数值加1直至计满溢出。当89C51采用12MHz晶振时,一个机器周期为1s,计数频率为1MHz。,当设置为计数工作方式时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的下降沿时,定时器的值加1。在每个机器周期的S5P2期间采样T0和T1引脚的输入电平,若前一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。

3、此后的机器周期S3P1期间,新的数值装入计数器。所以,检测一个1至0的跳变需要二个机器周期,故最高计数频率为振荡频率的1/24。对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期,对输入脉冲的基本要求如图6-2所示,Tcy为机器周期。,不管定时还是计数,都不占用CPU时间。每个定时器有四种工作模式。,图6-2 对输入脉冲宽度的要求,6.2定时器的控制,6.2.1工作模式寄存器TMOD(89H) TMOD用于控制T0和T1的工作模式,其各位的定义格式如图6-1所示。,图6-3 工作模式寄存器TMOD的位定义,其中,低4位用于T0。高

4、4位用于T1。,表6-1 M1,M0控制的四种工作模式,TMOD GATE C/T M1 M0 用于T0工作模式 (89H),工作模式,00模式0 01模式1 10模式2 11模式3,功能选择,1计数 0定时,选通控制,1受/INT0控制 0不受/INT0控制,TMOD不能位寻址,只能字节寻址。,C/T:定时器 /计数器方式选择位C/T=0:定时方式 计数片内脉冲(即对机器周期计数,周期确定)C/T=0:计数方式 计数片外脉冲(即对通过P3.4/P3.5来自片外的计数信号计数,周期不定),GATE:门控位GATE =0:软件使TR0/TR1置1,即可启动定时器GATE =1:只有INT0/IN

5、T1输入信号为高电平,软件使TR0/TR1置1,才可启动定时器定时器的使用: 设置工作方式-置初值-启动-溢出中断,6.2.2控制寄存器TCON(88H),图6-5 控制寄存器TCON的位定义,TCON各位的作用如下: TF1(TCON.7)T1溢出标志位。TF0(TCON.5)T0溢出标志位。TR1(TCON.6)T1运行控制位。TR0(TCON.4)T0运行控制位。IE1,IT1,IE0和IT0(TCON.3TCON.0)外部中断INT1,INT0请求及请求方式控制位。89C51复位后,TCON的所有位被清0。,TCON TF1 TR1 TF0 TR0 用于外部中断 (88H),T0运行控

6、制(软件),1启动 0禁止,T0溢出标志(硬件),1溢出 0未溢出,T1运行控制(软件),1启动 0禁止,T1溢出标志(硬件),1溢出 0未溢出,6.3定时器的四种模式及应用 89C51单片机的定时/计数器T0和T1可由软件对特殊功能寄存器TMOD中控制位C/T进行设置,以选择定时功能或计数功能。对M1和M0位的设置对应于四种工作模式,即模式0、模式1、模式2和模式3。在模式0、模式1和模式2时,T0和T1的工作模式相同;在模式3时,两个定时器的工作模式不同。,6.3.1模式0及应用 模式0是选择定时器(T0或T1)的高8位和低5位组成的一个13位定时器/计数器。图6-5是在T0模式0时的逻辑

7、电路结构。,图6-7 定时器0模式013位计数器,在图6-5中,C/ T =0时,控制开关接通振荡器12分频输出端,T0对机器周期计数。这就是定时工作方式。其定时时间为 t=(213 T0初值)振荡周期12,例6-1:设定时器T0选择工作模式0,定时时间为1ms,fOSC=6MHz。试确定T0初值,计算最大定时时间T。解:当T0处于工作模式0时,加1计数器为13位。设T0的初值为X。则,X=7692转换为二进制数X=1111000001100B=1E0CHT0的低5位:01100B=0CHT0的高8位:11110000B=F0HT0最大定时时间对应于13位计数器T0的各位全为1,即( TH0)

8、=FFH,(TL0)=1FH。则,例6-2:设T0工作在模式0,定时时间为1ms,fOSC =6MHz。编程实现其定时功能,在P1.0口输出1ms方波脉冲。解: (1)计算T0初值X结果为(TH0)=0F0H,(TL0)=0CH。(2)程序清单ORG 0000HRESET:AJMP MAIN ;跳过中断服务程序区ORG 000BH ;中断服务程序固定入口AJMP ITOP主程序ORG 0100HMAIN: MOV SP,#60H ;设堆栈指针 ACALL PTOMDHERE: AJMP HERE ; 等待时间到,转入中断,PTOMD:MOV TL0,#0CH ;装入初值MOV TH0,#0F0

9、HSETB TR0 ;启动定时SETB ET0 ;开中断SETB EARET ;子程序返回 中断服务程序ORG 0120HITOP:MOV TL0,#0CH ;重装入初值MOV TH0,#0F0HCPL P1.0 ;P1.0输出取反;产生 周期2ms的方波RETI ;中断返回,例6-3:利用T0的工作模式0产生1ms的定时,在P1.0引脚上输出2ms的方波。设单片机晶振 =12MHz。解:(1)选择工作模式要在P1.0引脚输出周期为2ms方波,只要使P1.0每隔1ms取反一次即可。T0 的模式字节TMOD=00H,即TMOD.1TMOD.0 M1M0=00,T0为模式0;TMOD.2 C/T=

10、0,T0为定时状态;TMOD.3 GATE=0,表示计数不受INT0控制;TMOD.4TMOD.7 可为任意值。因T1不用,这里取0,(2)计算1ms定时时T0的初值机器周期设T0 的计数初值为X,则 =8192-1000=7192D=11100000 11000BTH0初值为E0H,TL0初值为18H。可查询TF0的状态来控制P1.0输出。,7192 32 商为高8位, 余数为低5位,(3)查询方式采用查询方式的程序很简单,但在定时器计数过程中,CPU要不断查询溢出标志位TF0的状态。这就占用了很多CPU的工作时间,使CPU的效率下降。程序清单:MOV TMOD,#00H ;设置T0为模式0

11、MOV TL0,#18H ;送初值MOV TH0,#0E0HSETB TR0 ;启动T0 LOOP:JBC TF0,NEXT ;查询定时时间到否?SJMP LOOPNEXT:MOV TL0,#18H ;重装计数初值MOV TH0,#0E0HCPL P1.0 ;输出取反SJMP LOOP ;重复循环,(4)定时器溢出中断方式 主程序MAIN:MOV TMOD,#00H ;设置T0为模式0MOV TL0,#18H ;送初值MOV TH0,#0E0HSETB EA ;CPU开中断SETB ET0 ;T0中断允许SETB TR0 ;启动T0 HERE:SJMP HERE ;等待中断 中断服务程序 OR

12、G 000BH ;T0入口AJMP CTC0 ;转中断服务程序CTC0:MOV TL0,#18H ;重装初值MOV TH0, #0E0H CPL P1.0 ;输出方波RETI ;中断返回,6.3.2模式1及应用 该模式对应的是一个16位的定时器/计数器,见图6-8。其结构与操作几乎与模式0完全相同,唯一的差别是:在模式1中,寄存器TH0和TL0是以全部16位参与操作。用于定时工作方式时,定时时间为 t=(216 T0初值)振荡周期12 用于计数工作方式时,计数长度为216 =65536(个外部脉冲)。,图6-8 T0(或T1)模式1结构16位计数器,例6-2:用定时器T1产生一个50Hz的方波

13、,由P1.1输出。仍使用程序查询方式,fosc=12MHz。 解:方波周期 T=1/50Hz=0.02s=20ms ,用T1定时10ms,计数初值X为 X=216 -12101000/12=65536-10000=55536=D8F0H 源程序如下: MOV TMOD,#10H ;T1模式1,定时 SETB TR1 ;启动T1 LOOP:MOV TH1,#0D8H ;装入T1计数初值 MOV TL1,#0F0H JNB TF1,$ ;T1没有溢出等待 CLR TF1 ;产生溢出,请标志位 CPL P1.1 ;P1.1取反 输出 SJMP LOOP ;循环 问题:此题是否可以应用模式0来求解?,

14、6.3.3模式2及应用 模式2把TL0(或TL1)配置成一个可以自动重装载的8位定时器/计数器,如图6-9所示。,图6-9 T0(或T1)模式2结构8位计数器,TL0计数溢出时,不仅使溢出中断标志位TF0置1,而且还自动把TH0中的内容重新装载到TL0中。这里,16位计数器被拆成二个,TL0用作8位计数器,TH0用以保护初值。 在程序初始化时,TL0和TH0由软件赋予相同的初值。一旦TL0计数溢出,便置位TF0,并将TH0中的初值再自动装入TL0,继续计数,循环重复。用于定时工作模式时,其定时时间(TF0溢出周期)为t=(28TH0初值)振荡周期12 用于计数工作方式时,最大计数长度(TH0初

15、值=0)为28=256(个外部脉冲)。 这种工作模式可省去用户软件中重装常数的语句,并可产生相当精确的定时时间,特别适于串行口波特率发生器。,例6-5:当P3.4引脚上的电平发生负跳变时,从P1.0输出一个500s的同步脉冲。请编程实现该功能。 解:模式选择 首先选T0为模式2,外部事件计数方式。当P3.4引脚上的电平发生负跳变时,T0计数器加1,溢出标志TF0置1;然后改变T0为500s定时工作方式,并使P1.0输出由1变为0。T0定时到产生溢出,使P1.0引脚恢复输出高电平,T0又恢复外部事件方式。如图6-8所示。,计数初值 T0工作在外部事件计数方式,当计数到28 时,再加1计数器就会溢

16、出。设计数初值为X,当再出现一次外部事件时,计数器溢出。则 X+1=28 X=281=11111111B=0FFH T0工作在定时方式时,设晶振频率为6MHz,500s相当于250个机器周期。因此,初值X为 (28X) 2s=500sX=28250=6=06H,程序清单 START: MOV TMOD,#06H ;设置T0为模式2。外部计数方式 MOV TH0,#0FFH ;T0计数器初值 MOV TL0,#0FFH SETB TR0 ;启动T0计数 LOOP1: JBC TF0,PTFO1 ;查询T0溢出标志,TF0=1时转移 TF0=0(即查P3.4负跳变) SJMP LOOP1PTFO1

17、: CLR TR0 ;停止计数 MOV TMOD,#02H ;设置T0为模式2,定时方式MOV TH0,#06H ;T0定时500us初值MOV TL0,#06HCLR P1.0 ;P1.0清0SETB TR0 ;启动定时500us,LOOP2: JBC TF0,PTFO2 ;查询溢出标志,定时到TF0=1转 移,且TF0=0(第一个500us到否?)SJMP LOOP2 PTFO2: SETB P1.0 ;P1.0置1(到了第一个500us) CLR TR0 ;停止计数SJMP START问题:1.此题是否可以应用模式0/1来求解?2.如果在定时500us期间,又在P3.4引脚上的电平发生负

18、跳变时,CPU会如何响应?,例6-6:利用定时器T1的模式2对外部信号计数。要求每计满100次,将P1.0端取反。解:(1)选择模式外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器发生溢出中断,中断服务器将P1.0取反一次。T1计数工作方式模式2的模式字为TMOD=60H。T0不用时,TMOD的低4位可任取,但不能使T0进入模式3,一般取0。(2)计算T1的计数初值X=28-100=156D=9CH 因此,TL1的初值为9CH,重装初值寄存器TH1=9CH。,(3)程序清单MAIN:MOV TMOD,#60H ;置T1为模式2计数工作方式MOV TL1

19、,#9CH ;赋初值MOV TH1,#9CHMOV IE,#88H ;定时器T1开中断SETB TR 1 ;启动计数器HERE: SJMP HERE ;等待中断ORG 001BH ;中断服务程序入口CPL P1.0RETI,6.3.4模式3及应用 工作模式3对T0和T1大不相同。 若将T0设置为模式3,TL0和TH0被分成为两个相互独立的8位计数器,如图6-11所示。,图6-11 T0 模式3结构:分成二个8位计数器,TL0使用T0的各控制位、引脚和中断源,其操作模式和模式0、1相同。 TH0用于简单的内部定时,它占用定时器T1的控制位TR1和TF1,其启动和关闭仅受TR1的控制。TH0仅占用

20、T1的与中断有关的IE中的位,但并未占用TMOD中的位,TMOD中的T1的控制位仍然由T1使用。定时器T1无工作模式3,若T1设置为模式3,就会使T1立即停止计数。,在定时器T0用作模式3时,T1仍可设置为模式02,见图6-9(a)和(b)。由于TR1和TF1被定时器T0占用,计数器开关K已被接通,此时,仅用T1控制位C/T切换其定时器或计数器工作方式就可使T1运行。寄存器(8位、13位或16位)溢出时,只能将输出送入串行口或用于不需要中断的场合。一般情况下,当定时器T1用作串行口波特率发生器时,定时器T0才设置为工作模式3。此时,常把定时器T1设置为模式2,用作波特率发生器,见图6-9(b)

21、。,图6-12 T0模式3下的T1结构,例6-7:设某用户系统中已使用了两个外部中断源,并置定时器T1工作模式2,做串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0引脚输出一个5KHz的方波。fosc=12MHz。 解:为了不增加其它硬件开销,可设置T0工作模式3计数方式,把T0的引脚作附加的外部中断输入端,TL0的计数初值为FFH,当检测到T0引脚电平出现由1至0的负跳变时,TL0产生溢出,申请中断。这相当于边沿触发的外部中断源。T0模式3下,TL0作计数用,而TH0可用作8位的定时器,定时控制P1.0引脚输出5KHz的方波信号。 TL0的计数初值为FFH,TH0的计数初值X计

22、算如下: P1.0的方波频率为5KHz,故周期T=1/(5KHz)=0.2ms=200us 用TH0定时100us时,X=256-10012/12=156,程序如下:MOV TMOD,#27H ;T0为模式3,计数方式;T1为 模式2,定时方式 0010 0111BMOV TL0,#0FFH ;置TL0计数初值 MOV TH0,#156 ;置TH0计数初值MOV TH1,#data ;data是根据波特率要求设置的常数(即初值) MOV TL1,#dataMOV TCON,#55H ;外中断0,外中断1边沿触发,启动T0,T1 0101 0101BMOV IE,#9FH ;开放全部中断 ,TL

23、0溢出中断服务程序(由000BH转来) TL0INT: MOV TL0,#0FFH ;TL0重赋初值 (中断处理) RETI TH0溢出中断服务程序(由001BH转来) TH0INT: MOV TH0,#156 ;TH0重赋初值 CPL P1.0 ;P1.0取反输出 RETI 串行口及外部中断0,外中断1的服务程序在此不再一一列出。,6.3.5 综合应用举例 例6-8:设时钟频率为6MHz。试编写利用T0产生1s定时的程序。 解:定时器T0工作模式的确定 因定时时间较长,采用哪一种工作模式合适呢?可以算出: 模式0最长可定时16.384ms; 模式1最长可定时131.072ms; 模式2最长可

24、定时512s。 题中要求定时1s,可选模式1,每隔100ms中断一次,中断10次为1s。求计数值X X=15536=3CB0H 因此,(TL0)=0B0H,(TH0)=3CH。,实现方法 对于中断10次计数,可使T0工作在计数方式,也可用循环程序的方法实现。 源程序清单 ORG 0000H LJMP MAIN ;上电,转向主程序 ORG 000BH ;T0的中断入口地址 AJMP SERVE ;转向中断服务程序 ORG 2000H ;主程序 MAIN:MOV SP,#60H ;设堆栈指针 MOV B,#0AH ;设循环次数 MOV TMOD,#01H ;设置T0工作模式1 MOV TL0,#0

25、B0H ;装入计数值低8位 MOV TH0,#3CH ;装入计数值高8位,SETB TR0 ;启动定时器T0 SETB ET0 ;允许T0中断 SETB EA ;允许CPU中断 SJMP $ ;等待中断 SERVE:MOV TL0,#0B0H MOV TH0,#3CH ;重新赋计数值 DJNZ B,LOOP CLR TR0 ;1s定时到,停止T0工作 LOOP:RETI ;中断返回 END,例6-9:设计定时时钟程序。解:本例涉及到了定时器与中断的联合应用。时钟就是以秒、分、时为单位进行计时。(1)实现时钟计时的基本方法计算计数初值。时钟计时的最小单位是秒,但使用单片机定时器/计数器进行定时,

26、即使按方式1工作,其最大定时时间也只能达131ms.鉴于此,可把定时器的定时时间定为100ms,这样,计数溢出10次即得到时钟计时的最小单位-秒;而10次计数可用软件方法实现。假定使用定时器T1,以工作模式1进行100ms的定时。如单片机晶振频率为6MHZ,为得到100ms定时,设计数初值为X,则,采用中断方式进行溢出次数的累计,记满10次即得到秒计时。从秒到分和从分到时的计时是通过累加和数值比较实现的。时钟显示及显示缓存区部分留给读者自己设计。,(2)程序流程及程序清单主程序(MAIN)的主要功能是进行定时器T1的初始化编程并启动T1,然后通过反复调用显示子程序,等待100ms定时中断的到来

27、。其流程图如图6-13所示。中断服务程序(PITO)的主要功能是进行计时操作。程序开始先判断计数溢出是否满了10次,不满10次表明还没达到最小计时单位-秒,中断返回;满10次表示已达到最小计时单位-秒,程序继续往下运行,进行计时操作。要求满1秒则“秒位”32H单元内容加1,满60s则“分位”31H单元内容加1,满60min则“时位”30H单元内容加1,满24h则将30H,31H,32H的内容全部清0。,图6-13 时钟主程序流程,源程序如下:ORG 0000HAJMP MAIN ;上电,转向主程序ORG 001BH ;T1的中断入口地址AJMP SERVE ;转向中段服务程序 MAIN:MOV

28、 TMOD,#10H ;设T1工作于模式1MOV 20H,#0AH ;装入中断次数CLR AMOV 30H,A ;时单元清0MOV 31H,A ;分单元清0MOV 32H,A ;秒单元清0SETB ET1 ;允许T1中断SETB EA ;允许CPU中断MOV TH1,#3CHMOV TL1,#0B0H ;赋计数初值SETB TR1 ;启动定时器T1,SJMP $ ;等待中断(可反复调用显示子程序) SERVE:PUSH PSWPUSH ACC ;保护现场MOV TH1,#3CHMOV TL1,#0B0H ;重新赋计数初值DJNZ 20H,RETUNT ;1s未到,返回MOV 20H,#0AH

29、;重置中断次数MOV A,#01HADD A,32H ;“秒位”加1DA AMOV 32H,A ;转换为BCD码CJNE A,#60,RETUNT ;未记满60s,返回MOV 32H,#00H ;记满60s,“秒位”清0MOV A,#01HADD A,31H ;“分位”加1,DA AMOV 31H,A ;转换为BCD码CJNE A,#60H,RETUNT ;未记满60min,返回MOV 31H,#00H ;记满60min,“分位”清0MOV A,#01HADD A,30H ;“时位”加1DA AMOV 30H,A ;转换为BCD码CJNE A,#24H,RETUNT ;未记满24h,返回MOV

30、 30H,#00H ;记满24h,“时位”清0 RETUNT:POP ACCPOP PSW ;恢复现场RETI ;中断返回END,DA AMOV 31H,A ;转换为BCD码CJNE A,#60H,RETUNT ;未记满60min,返回MOV 31H,#00H ;记满60min,“分位”清0MOV A,#01HADD A,30H ;“时位”加1DA AMOV 30H,A ;转换为BCD码CJNE A,#24H,RETUNT ;未记满24h,返回MOV 30H,#00H ;记满24h,“时位”清0 RETUNT:POP ACCPOP PSW ;恢复现场RETI ;中断返回END,补充内容:1.单

31、片机定时误差的校正由于单片机的机器周期为1s2s,定时误差一般应在0s20s之内,对于一般应用,此误差可以忽略,但是对于精确度要求比较高的应用场合,此误差必须进行校正。定时误差是定时溢出后转入执行定时处理语句段之间所耗费的时间,此时间主要由定时溢出转入定时处理语句段所必须执行的指令或硬件过程产生。 定时误差校准的简单原理是:在定时溢出响应后,停止定时器计数,读出当时计数值(它反映了定时响应的延迟时间),然后将完成这一任务的程序段执行时间考虑进去,作为修正因子校正定时初值,以下程序段以中断处理方式为例:,clr EA clr TR1 clr c mov A,n0 clr TR0 subb A,T

32、L0 subb A,08 mov TL0,A mov A,n1 subb A,TH0 mov TH0,A setb TR0 定时处理语句段 reti,由于执行从指令clr R0(停止计数)到指令setb TR0(重新开启计数)之间的指令需8个机器周期,应将此消耗考虑进去。上述程序将定时误差缩小在1个机器周期内。,补充内容:2.读运行中的定时器/计数器的计数值由于不可能同时读取THx和TLx的内容,可能存在TLx溢出向 THx进位的情况 。 解决办法:RDTIME:MOV A,TH0MOV R0,TL0CJNE A,TH0,RGTIMEMOVE R1,ARET,小结:1.定时器/计数器在各种工作

33、方式下的最大计数和最长定时定时(1)最大计数值模式0:213=8192模式1:216=65536模式2、3:28=256(2)最长定时设fosc=6MHz,则一个机器周期Tm=12/6MHz=2s模式0:tmax=213Tm=16.384ms模式1:tmax=216Tm=131.072ms模式2、3:tmax=28Tm=0.512ms2.初值计算(1)作计数器时初值x0=最大计数值-计数个数X(2)作定时器时初值x0=最大计数值-(定时时间t/机器周期Tm),熟悉本章定时器在模式1、2时的应用。P145习题13、15、18。,作业,MCS-51单片机内有几个定时计数器?如何计数? T0、T1有几种工作方式? 编程应用前要事先确定的参数有几个? 定时/计数的四种方式是怎样的? 如何计算计数初值?如何编程送入计数初值? GATE的用法是怎样的?,思考题,

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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