资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第六章 定时器及应用,6.1,概述,两个,16,位定时器,/,计数器:,T0,、,T1,各有两个,8,位,加,1,计数器,TH,、,TL,工作方式由软件设定:,定时器方式,内部脉冲触发,每个机器周期定时器加,1,。,计数器方式,,T0/T1,引脚外部脉冲下降沿触发计数器加,1,。,由,TMOD,和,TCON,两个,SFR,控制,计数器,TH,、,TL,溢出时产生中断请求,对,外部输入脉冲宽度的要求:,高电平、低电平的保持时间至少,1,个完整的机器周期,T,CY,。,故最高计数频率为单片机系统振荡频率的,1/24,。,6.2,定时器的控制,定时器两个控制字,初始化时写入寄存器,工作方式寄存器写入,TMOD(89H),运行控制写入,TCON(88H),时间常数字写入,TH/TL,每个定时器有四种工作方式。,6.2,定时器的控制,6.2.1,工作模式寄存器,高,4,位用于,T1,,低,4,位用于,T0,M1,、,M0,模式控制,对应有,4,种模式,0,为定时器方式,,1,为计数器方式,GATE,门控位。定时器是否受,控制:,0,:,TR,直接启动定时器,,不参与启动;,1,:,和,TR,均为高电平时,定时器工作。,参见图,6-7,TMOD,(89H),D7,D6,D5,D4,D3,D2,D1,D0,GATE,M1,M0,GATE,M1,M0,6.2.1,控制寄存器,TCON,TF1,当,T1,计数溢出时,硬件自动置位,TF1,标志,并可以向,CPU,申请中断。,CPU,响应中断时,自动清除,TF1,。,TF1,也可用软件清,0,。,TR1T1,运行控制位,,TR1,由软件控制,为,1,时启动,T1,,为,0,时停止,T1,工作。,TF0,、,TR0,用于,T0,,,含义同上。,TCON,(88H),8F,8E,8D,8C,8B,8A,89,88,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,6.3,定时器的四种模式及应用,定时器(,T0,),有四种模式,由,TMOD,中的,M1,、,M0,选择:,M1M0,模式,00,0,01,1,10,2,11,3,模式,0,:,13,位定时计数器,注意:,TL0,的低,5,位和,TH0,共同组成,模式,1,:,16,位定时计数器,模式,2,:,自动重新装载的,8,位定时计数器,溢出后(,TF0=1),,,TH0TL0,模式,3,:,T0,成为两个独立的,8,位定时计数器,,T1,为无,中断、自动重新装载的,8,位计数器,TL0,作为,8,位定时,/,计数器,使用,T0,的中断控制;,TH0,仅作为,8,位定时器,使用原,T1,的中断控制;,T1,工作在方式,0,2,,溢出时送串行口,经常作为串行口波特率发生器,6.3,定时器的四种模式及应用,6.3.1,模式,0,及应用,6.3,定时器的四种模式及应用,6.3.1,模式,0,及应用,模式,0,由,TH,、,TL,组成,13,位加,1,计数器:,D7,D6,D5,D4,D3,D2,D1,D0,D4,D3,D2,D1,D0,TH0(8),TL0(5),C/T=0,定时:对机器周期计数;全,0,时溢出,置位,TF0,。,C/T=1,计数:对,T0,引脚的外部信号计数;,定时时间:,t=,(,2,13,初值)*振荡周期*,12,时间常数(初值),2,13,t/,(,振荡周期*,12,),取整,GATE=1,,,门控,INT0,6.3,定时器的四种模式及应用,6.3.1,模式,1,及应用,6.3,定时器的四种模式及应用,C/T=0,定时:对机器周期计数;,全,0,时溢出,置位,TF0,。,C/T=1,计数:对,T0,引脚的外部信号计数;,GATE=1,,,门控,INT0,6.3,定时器的四种模式及应用,6.3.2,模式,1,及应用,TH,、,TL,组成,16,位加,1,计数器:,定时时间:,t=,(,2,16,初值)*振荡周期*,12,时间常数(初值),2,16,t/,(,振荡周期*,12,),取整,D7,D6,D5,D4,D3,D2,D1,D0,D7,D6,D5,D4,D3,D2,D1,D0,TH0,TL0,6.3,定时器的四种模式及应用,6.3.2,模式,1,及应用,例,6-1,利用,T1,产生一个,50Hz,的方波,由,P1.1,输出,,f,osc,12MHz,。,【,解,】,思路:方波周期,T,20ms,,,高、低电平时间各为,10ms,。,利用,T1,产生,10ms,定时,切换,P1.1,的电平。,机器周期,1,s;,计数初值,X=2,16,-t/,机器周期,2,16,-10,ms,/1,s,=65536-10000=55536=D8F0H,20ms,10,s,10,s,P1.1,ORG,0000H,MOV,TMOD,#10H,;T1,定时,方式,1,SETB,TR1,;,启动,T1,LOOP:,MOV,TH1,#0D8H,;,装入时间常数,MOV,TL1,#0F0H,JNB,TF1,$,;,定时没到,等待,CLR,TF1,;,软件清除标志,CPL,P1.1,;P1.1,取反,SJMP,LOOP,;,循环,END,(1),利用查询方式:,T0,不用,一般设为,0,,不能设,3,ORG,0000H,AJMP,START,;,跳转,ORG,001BH,;T1,中断服务程序,MOV,TL1,#0F0H,;,重新装入时间常数,MOV,TH1,#0D8H,CPL,P1.1,;P1.1,取反,RETI,;,中断返回,(2),利用中断方式,,T1,定时,10ms,产生中断,输出方波:,ORG,0030H,;,主程序,START:,MOV,TMOD,#10H,;T1,定时,方式,1,MOV,TL1,#0F0H,;,装入时间常数,MOV,TH1,#0D8H,SETB,TR1,;,启动,T1,SETB,ET1,;,允许,T1,中断,SETB,EA,;CPU,开中断,SJMP,$,END,6.3,定时器的四种模式及应用,6.3.3,模式,2,及应用,TL,作为,8,位,计数器,溢出时,TH,中的内容,自动,装入,TL,。,定时时间:,t=,(,2,8,TH0,初值)*振荡周期*,12,8,例,6-2,当,P3.4,引脚的电平发生负跳变时,从,P1.0,引脚上输出一个,500,s,的同步脉冲。振荡频率为,6MHz,。,【,解,】,思路:检测,P3.4,,,负跳变时,P1.0,输出低电平,并启动,T0,定时,500,s,,,定时到后置位,P1.0,。,T0,时间常数:,X=2,8,-500,s/2,s=6,ORG,0000H,;,主程序,MOV,TMOD,#02H,;T0,模式,2,,定时,START:,MOV,TL0,#06H,;,置时间常数,MOV,TH0,#06H,JNB,P3.4,$,;P3.4,为,0,,等待变,1,JB,P3.4,$,;P3.4,为,1,,等待变,0,CLR,P1.0,;P1.0,输出低电平,SETB,TR0,;,启动,T0,定时,500,s,LOOP:,JBC,TF0,NEXT,;,定时到,清除,TF0,,,跳转,SJMP,LOOP,;,等待定时到,NEXT:,SETB,P1.0,;P1.0,输出高电平,CLR,TR0,;T0,停止计数,SJMP,START,例,6-3,利用,T1,计数,每计,100,个脉冲,将,P1.0,取反。,【,解,】,思路:,T1,计数,100,,申请中断,将,P1.0,取反。可以利用模式,2,,初值为,256-100,156,9CH,。,MAIN:,MOV,TMOD,#60H,;T1,模式,2,,计数,MOV,TL1,#9CH,赋初值,MOV,TH1,#9CH,MOV,IE,#88H,;,置,EA,、,ET1,,,T1,开中断,SETB,TR1,;,启动,T1,SJMP,$,;,等待中断,ORG,001BH,CPL,P1.0,;P1.0,取反,RETI,6.3,定时器的四种模式及应用,6.3.4,模式,3,及应用,TL0,占用,TR0,、,TF0,、,INT0,和外部引脚,T0,,,可工作在,定时或计数,方式。,TH0,占用,TR1,和,TF1,,,启动,/,关闭只受,TR1,控制,只能作,定时器,。,只有,T0,可工作在模式,3,,分为,TH0,和,TL0,两个独立的,8,位计数器,6.3.4,模式,3,及应用,当,T0,工作在模式,3,时,,T1,只能工作在,模式,0,2,(定时器或计数器,),因,TR1,及,TF1,已被,TH0,占用,,T1,的运行取决于,C/T,,,无中断功能,。,一般情况下,当,T0,工作在模式,3,时,,T1,常用作串行口的波特率发生器,。,计数器作为外部中断,【,解,】,思路:,T0,工作在模式,3,,,TH0,作为定时器输出方波;,TL0,作为,计数器,初值为,FFH,,,T0,引脚作为外部中断源,每当信号负跳变时请求中断。,TH0,:,定时,100,s,,中断入口地址,001BH,(,T1,),输出周期,200,s,(,5kHz,),的方波,初值为,256-100,s/1,s=156,;,TL0,:,计数器,初值,FFH,,,中断入口地址,000BH;,T1,:,定时器,模式,2,,初值取决于波特率。,例,6-4,某系统已使用两个外部中断源,且,T1,工作在模式,2,,作为串行口波特率发生器。现要求增加一个外部中断源,并由,P1.0,输出,5kHz,的方波。,fosc,12MHz,。,ORG,0000H,AJMP,MAIN,ORG,0003H,ORG,000BH,MOV,TL0,#0FFH,RETI,ORG,0013H,ORG,001BH,MOV,TH0,#156,CPL,P1.0,RETI,MAIN:,MOV,SP,#60H,MOV,TMOD,#27H,MOV,TL0,#0FFH,MOV,TH0,#156,MOV,TL1,#,MOV,TH1,#,MOV,IE,#9FH,MOV,TCON,#55H,IE,AF,AE,AD,AC,AB,AA,A9,A8,EA,ES,ET1,EX1,ET0,EX0,INT0/1,边沿触发,启动,T0,、,T1,开中断,总结:,定时器,/,计数器的初始化:,根据要求给方式寄存器,TMOD,送一个方式控制字,以设定定时器响应的工作方式;,根据需要给,C/T,选送初值,(,时间常数,),以确定需要的定时时间或计数的初值;,根据需要给中断允许寄存器,IE,送中断控制字,以开放相应的中断和设定中断优先级;,给,TCON,送命令字以启动或禁止,C/T,的运行。,初值,X,的计算,计数器初值:,设计数模值为,M,(,M=2,13,,,2,16,,,2,8,),,计数脉冲个数为,C,,,则:,X=M-C,定时器初值:,设定时长度为,T,(,),振荡频率,fosc,(,MHz,),,,机器周期,T,MC,=12/fosc,(,),则:,X=M-T/T,MC,模式,0,2,的最大定时时间,定时时间:,t=,(,M,X,)*,机器周期,可见,t,与振荡频率、定时器模式及初值,X,有关。,初值,X,为,0,时,定时时间最长。,初值,X,为,M-1,时,定时时间最短,仅一个机器周期。,设,f,OSC,=12MHz,,,不同工作模式下的最大定时时间为:,Mode 0,:,t,MAX,=2,13,1,s,8.192ms,Mode 1,:,t,MAX,=2,16,1,s,65.536ms,Mode 2,:,t,MAX,=2,8,1,s,0.256ms,应用举例(,6-6,):设计显示实时时钟,【,解,】,思路:,T1,模式,1,,定时,100ms,(,fosc,=6M,),,中断,10,次即为,1s,,,累加,形成分、小时、,24,小时。,主程序:,T1,初始化,,RAM,单元初始化,,调用显示子程序,20H,0A,计,10,次,30H,00,小时计数,,24,31H,00,分计数,,60,32H,00,秒计数,,60,ORG,0000H,AJMP,MAIN,ORG,001BH,;T1,入口地址,LJMP,SERVE,MAIN:,MOV,SP,#60H,MOV,TMOD,#10H,;T1,定时,模式,1,MOV,TH1,#3CH,;,时间常数,MOV,TL1,#0B0H,SETB,TR1,;,启动定时器,SETB,ET1,;T1,开中断,SETB,EA,;CPU,开中断,MOV,20H,#0AH,;,中断,10,次计数单元,CLR,A,MOV,30H,A,;,清零时单元,MOV,31H,A,;,清零分单元,MOV,32H,A,;,清零秒单元,;,显示程序,SERVE:,PUSH,PSW,;,保护现场,PUSH,ACC,MOV,TL1,#0B0H,;,时间常数,MOV,TH1,#3CH,DJNZ,20H,RETUNT,;,不到,10,次,返回,MOV,20H,#10,;,重新置,10,次计数,MOV,A,32H,;,秒单元加,1,ADD,A,#01H,DAA,;DAA,调整,MOV,32H,A,CJNE,A,#60H,RETUNT,;,不到,60,秒,返回,MOV,32H,#0,;,清零秒单元,;,判断分、小时计数,RETUNT:,POP,ACC,;,恢复现场,POP,PSW,RETI,;,中断返回,作业,P145,6,,,8,(查询方式),,14,(中断方式),例,:F,OSC,=12MHZ,试计算定时时间,2MS,所需的定时器的初值,.,方式,2,、方式,3 T,MAX,=0.256,MS,,,所以必须将工作方式设在方式,0,或方式,1,:,方式,0,:,TC=2,13,-2,MS,/1,US,=6192=1830H,TL0=10H,,,TH0=0C1H,方式,1,:,TC=2,16,-2,MS,/1,US,=63536=0F830H,TL0=30H,,,TH0=0F8H,编程方式,采用查询方式:程序一直检测,TF0,(,TF1),,若,TF0,1(TF1=1),,,说明定时时间到或计满数,采用中断方式:程序初始化时,设置定时器溢出中断允许后,内部硬件自动检测到,TF0,1(TF1=1),时,自动响应中断,进入中断服务程序。,应用举例,例,1,选用,T1,方式,0,产生,500,US,的定时,在,P,1.1,输出周期为,1,MS,的方波,;F,OSC,=6MHZ,注意,:T0,不用时的处理,一般置,0,方式,禁止进入方式,3.,初值计算,:T=500,US,=,(,2,13,-TC,)*,2,US,,,TC=7942,TC=7942D=8F06H,主程序,BEGIN,:,MOV TMOD,,,#0,MOV TL1,,,#06H,MOV TH1,,,#0F8H,SETB TR1,LOOP,:,JBC TF1,,,PF0,SJMP LOOP,PF0,:,MOV TL1,,,#06H,MOV TH1,,,#0F8H,CPL P1.1,AJMP LOOP,例,2,从,P3.4T0,输入低频脉冲,要求该脉冲每发生一次跳变时由,P1.0,输出一个,500,US,的负脉冲,与此同时由,P1.1,输出一个宽为,1,MS,的正脉冲,.,先设,T0,为计数方式,当外部脉冲来一个负跳变时,计数加,1,并产生溢出,TF0=1;,检测到,TF0=1,时,即可设定,T1,为定时方式,;,T0,设为方式,2;,初值设为,0FFH,即加,1,即刻产生溢出,.,ORG 0H,SJMP BEGIN,ORG 000BH,AJMP TT1,ORG 0030H,BEGIN:MOV TMOD,#06H,MOV TH0,#0FFH,MOV TL0,#0FFH,CLR P1.1,Setb,et0,Setb,ea,SETB P1.0,SETB TR0,S1:SJMP$,中断服务程序,ORG 300H,TT1:MOV TMOD,#20H,MOV TH1,#0AH;06H,MOV TL1,#0AH;06H,SETB P1.1,CLR P1.0,SETB TR1,DEL2:JBC TF1,RP1,SJMP DEL2,RP1:SETB P1.0,DEL3:JBC TF1,RP2,SJMP DEL3,RP2:CLR P1.1,CLR TR1,RETI,例,3,:门控位的应用,GATE,位是控制外部输入脉冲对定时计数器的控制,利用这个特性。可测量输入脉冲的宽度。,如:利用,T0,门控位测试,INT0,引脚上出现的正脉冲的宽度,并以周期数显示。,ST:MOV TMOD,#09H,MOV TL0,#00H,MOV TH0,#00H,WAIT1:JB P3.2,WAIT1,SETB TR0,WAIT2:JNB P3.2,WAIT2,WAIT3:JB P3.2,WAIT3,CLR TR0,MOV A,TL0,MOV R0,#DISBUF,XCHD A,R0,INC R0,SWAP A,XCHD A,R0,INC R0,MOV A,TH0,XCHD A,R0,INC R0,SWAP A,XCHD A,R0,DIS:LCALL DISP,AJMP DIS,
展开阅读全文