资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,5,章 定时器,/,计数器及其应用,定时器,/,计数器的应用场合,:,定时或延时控制、对外部事件的检测、计数等,;,MCS-51,系列,8031,、,8051,单片机有,两个,16,位,定时器,/,计数器(即,T0,和,T1,);,8032,、,8052,单片机有,3,个,16,位定时器,/,计数器(即,T0,、,T1,和,T2,);,定时器,/,计数器,所谓,计数器,就是,对外部输入脉冲的计数,;,所谓,定时器,也是对脉冲进行计数完成的,计数的是,MCS-51,内部产生的标准脉冲,,通过,计数脉冲个数实现定时,。,所以,定时器和计数器本质上是一致的,在以后的叙述中将定时器,/,计数器,笼统称为定时器,。,MCS-51,的定时器,/,计数器,:,T0,T1,两个,每个,16,位、可编程,(,可程序设定四种工作模式、定时器初值,),、加,1,计数器,定时器,/,计数器的工作原理,:,定时器控制寄存器,TCON,TMOD,寄存器,定时器的工作方式,(2),方式,1,方式,1,为主要应用方式,,16,位计数器,可产生定时器溢出中断。,(1),方式,0,方式,0,主要是为了兼容,MCS-48,系列单片机,将,TL0/TL1,的高,3,位抛弃不用,其他和方式,1,一样。,(3),方式,2,方式,2,,,T0,或,T1,变成两个八位计数器,当定时时间到后,定时器的高位字节会自动装入低位字节重新开始定时,特点无须程序干预,自动定时。,MCS-51,定时器,/,计数器的应用,1.,定时器,/,计数器的初始化,(1),方式设置,TMOD,(2),初值装入,TH,X,TL,X,(3),定时器,/,计数器有关的中断初始化,IP,IE,(4),启动或禁止定时器,/,计数器,TCON,定时器,/,计数器的计数初值的计算,:(X,为计数初值,),(1),作为计数器时,:(M,为计数器的位数,n,为所需,计数值,),X=2,M,-n,(2),作为定时器时,:(T,为所需定时时间,t,为定时器时钟的周期,),X=2,M,-T/t (t=12/fosc),方式,0,最大定时时间(晶振,12M,),Tmax,=2,13,*12*/12=8.192ms,方式,1,最大定时时间(晶振,12M,),Tmax,=2,16,*12*/12=65.536ms,例:若单片机的时钟频率为,12M,,请计算定时,2ms,所需的定时器初值(采用,T0,,方式,1,),TC=2,16,-2ms/1us=63536=0F830H,,,TH0=0F8H,,,TL0=30H,应用举例,:,利用定时器控制产生方波信号,(,系统时钟,12MHz),20ms,40ms,8031,P1.0,主程序及,中断服务,子程序流程图,定时器初始化,定时中断初始化,等待,重装定时常数,取反,P1.0,中断返回,启动定时器,计数初值计算,:,已知系统时钟,12MHz,则,定时器时钟频率为,1MHz,t=,1,1,10,6,S,=1,S,设定时器工作在方式,1,则,M=16,X=2,M,-T/t,=2,16,-20,10,3,=45536=B1E0H,则,:TH0=0B1H,TL0=0E0H,ORG0000H,AJMPMAIN,ORG000BH,AJMPT0INT,MAIN:MOVSP,#60H,MOVTMOD,#01H,MOVTH0,#0B1H,MOVTL0,#0E0H,MOVIE,#10000010B,SETBTR0,HERE:SJMPHERE,T0INT:MOVTH0,#0B1H,MOVTL0,#0E0H,CPLP1.0,RETI,1s,1s,例,2,:用,MCS-51,的定时器,/,计数器控制,P1.0,产生周期为,2S,的方波信号。(晶振,12M,),计数初值计算,:,已知系统时钟,12MHz,则定时器时钟频率为,1MHz,t=,1,1,10,6,S,=1S,设定时器工作在方式,1,则,M=16,X=2,M,-T/t,=2,16,-20,10,3,=45536=B1E0H,则,:TH0=0B1H,TL0=0E0H,ORG0000H,AJMPMAIN,ORG000BH,AJMPT0INT,ORG 0030H,MAIN:MOVSP,#60H,MOVTMOD,#01H,MOVTH0,#0B1H,MOVTL0,#0E0H,MOVIE,#10000010B,SETBTR0,HERE:SJMPHERE,T0INT:MOVTH0,#0B1H,MOVTL0,#0E0H,CPLP1.0,RETI,1s,1s,例,2,:用,MCS-51,的定时器,/,计数器控制,P1.0,产生周期为,2S,的方波信号。(晶振,12M,),ORG0000H,AJMPMAIN,ORG000BH,AJMPT0INT,ORG0030H,MAIN:MOVSP,#60H,MOVTMOD,#01H,MOVTH0,#0B1H,MOVTL0,#0E0H,MOVIE,#10000010B,SETBTR0,MOVR0,#00H,HERE:SJMPHERE,T0INT:MOVTH0,#0B1H,MOVTL0,#0E0H,INCR0,CJNER0,#32H,LOOP1,MOVR0,#00H,CPLP1.0,LOOP1:RETI,定时时间的精确计算:,CPU,从相应定时器中断到完成定时器的重装期间,定时器会继续计数,所以定时器的初值应当作适当的修正,包含相应中断的时间(一般按,4,到,5,个机器周期计算)和在中断服务程序中执行完重装指令的时间(由程序指令来确定),作业:利用,8031,的定时器,T0,(,晶振,6M,)完成如下功能,(,1,)在,p1.1,输出周期为,50ms,的方波,(,2,)在,p1.0,输出周期为,2s,的方波,注意:,1,、两个例程的结合;,2,、晶振采用,6MHz,时间常数的计算;,3,、两个要求结合起来考虑;,51,系列单片机定时器,/,计数器 总结,两个可编程的定时器,/,计数器,T1,、,T0,。,2,种,工作模式,:,(,1,)计数器工作模式,(,2,)定时器工作模式,4,种,工作方式,(,方式,0-,方式,3),。,定时器,/,计数器的结构,TMOD,:,选择定时器,/,计数器,T0,、,T1,的工作模式和工作方式。,TCON,:,控制,T0,、,T1,的启动和停止计数,同时包含了,T0,、,T1,的状态。,26,组成:两个,16,位的定时器,T0,和,T1,,以及他们的工作方式寄存器,TMOD,和控制寄存器,TCON,等组成。内部通过,总线,与,CPU,相连。,定时器,T0,和,T1,各由两个,8,位特殊功能寄存器,TH0,、,TL0,、,TH1,、,TL1,构成。,工作方式寄存器,TMOD,:,用于设置定时器的,工作模式和工作方式,;,控制寄存器,TCON,:,用于,启动和停止,定时器的计数,并控制定时器的状态;,单片机复位时,两个寄存器的所有位都被清,0,。,8051,定时器,内部结构框图,方式,2,省去程序中重装初值的指令,并可产生相当精确的定时。,例,:,当,T0,(,P3.4,)引脚上发生负跳变时,从,P1.0,引脚上输出一个周期为,1ms,的方波,如图所示。(系统时钟为,6MHz,),方式,2,的应用实例,(,1,)工作方式选择,T0,为方式,1,计数,,,初值,0FFFFH,,即外部计数输入端,T0,(,P3.4,)发生,一次负跳变,时,,T0,加,1,且溢出,溢出标志,TF0,置,“,1,”,,发中断请求。,在进入,T0,中断程序后,把,F0,标志置,“,1,”,,,说明,T0,脚已接收了负跳变信号。,T1,定义为方式,2,定时,。在,T0,脚发生一次负跳变后,启动,T1,每,500,s,产生一次中断,,在中断服务程序中对,P1.0,求反,使,P1.0,产生周期,1ms,的方波。,方式,2,的应用实例,(,2,)计算,T1,初值,设,T1,的初值为,X,:,则,(2,8,-X),2,10,-6,=5,10,-4,X=2,8,-250=6=06H,(,3,)程序设计,ORG 0000H,RESET:LJMP MAIN,;复位入口转主程序,ORG 000BH,LJMP IT0P,;转,T0,中断服务程序,方式,2,的应用实例,ORG 001BH,LJMP IT1P,;转,T1,中断服务程序,ORG 0100H,MAIN:MOV SP,#60H,LCALL PT0M2,;调用对,T0,,,T1,初始化子程序,LOOP:MOV C,F0,;,T0,产生过中断了吗,产生过中断,,;,则,TF0=1,JNC LOOP,;,T0,没有产生过中断,则跳到,;LOOP,,等待,T0,中断,SETB TR1,;启动,T1,SETB ET1,;允许,T1,中断,HERE:AJMP HERE,PT0M2:MOV TMOD,#25H,;初始化,,T1,为方式,2,定,;,时,,T0,为方式,1,计数,MOV TL0,#0FFH,;,T0,置初值,MOV TH0,#0FFH,SETB TR0,;启动,T0,SETB ET0,;允许,T0,中断,MOV TL1,#06H,;,T1,置初值,MOV TH1,#06H,CLR F0,;把,T0,已发生中断标志,F0,清,0,SETB EA,RET,IT0P:CLR TR0,;,T0,中断服务程序,停止,T0,计数,SETB F0,;建立产生中断标志,RETI,IT1P:CPL P1.0,;,T1,中断服务,,P1.0,位取反,RETI,在,T1,定时中断服务程序,IT1P,中,省去了,T1,中断服务程序中重新装入初值,06H,的指令。,定时器,/,计数器对输入信号的要求,外部计数脉冲的最高频率为系统振荡器频率的,1/24,,,例如选 用,12MHz,频率的晶体,则可输入,500KHz,的外部脉冲。,输入信号的高、低电平至少要保持一个机器周期。,如图所示,图中,Tcy,为机器周期。,34,1.,实时时钟实现的基本思想,(,晶振为,6MHz),如何获得,1,秒的定时,,可把定时时间定为,100ms,,采用中断方式进行溢出次数的累计,计满,10,次,即得到秒计时。,片内,RAM,中规定,3,个单元作为秒、分、时单元,具体安排如下,:,42H:“,秒”单元;,41H:“,分”单元;,40H:“,时”单元,从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。,实时时钟的设计,35,2.,程序设计,(1),主程序的设计,流程如图所示。,实时时钟的设计,36,(2),中断服务程序的设计,中断服务程序的主要功能是实现秒、分、时的计时处理。,参考程序略。,实时时钟的设计,利用查询法使用定时器,利用定时器控制产生方波信号,(,系统时钟,12MHz),20ms,40ms,8031,P1.0,ORG0000H,AJMPMAIN,ORG000BH,AJMPT0INT,ORG 0030H,MAIN:MOVSP,#60H,MOVTMOD,#01H,MOVTH0,#0B1H,MOVTL0,#0E0H,MOVIE,#10000010B,SETBTR0,HERE:SJMPHERE,T0INT:MOVTH0,#0B1H,MOVTL0,#0E0H,CPLP1.0,RETI,应用中断法,ORG0000H,AJMPMAIN,ORG000BH,AJMPT0INT,ORG 0030H,MAIN:MOVSP,#60H,MOVTMOD,#01H,MOVTH0,#0B1H,MOVTL0,#0E0H,MOVIE,#00000000B,SETBTR0,HERE:JBC TF0,NEXT,;查询定时时间到,转,NEXT,,同时清,TF0,SJMPHERE,NEXT:MOVTH0,#0B1H,;,T0,重置初值,MOVTL0,#0E0H,;,T0,重置初值,CPLP1.0,;,P1.0,的状态取反,SJMP HERE,END,应用查询法,40,以上例题采用,查询,的方法,这种方法很,简单,,但是在定时器整个计数的过程中,,CPU,要,不断地查询,溢出标志,TFx,的状态,很难执行其他操作,,占用了,CPU,的工作时间,使得,CPU,的,工作效率不高,在复杂系统中不可取,。,采用中断,的方式来实现,可大大提高,CPU,的工作效率,学习重点。,41,在读取运行中的定时器,/,计数器时,,需注意,:,若恰好出现,TLX,溢出向,THX,进位的情况,则读得的,(TLX),值就完全不对,。同样,先读,(THX),再读,(TLX),也可能出错。,方法,:,先读,(THX),,后读,(TLX),,再读,(THX),。若两次读得,(THX),相同,则读的内容正确,。若前后两次读的,(THX),有变化,则再重复上述过程,这次重复读得的内容就应是正确的。下面是有关的程序,读得的,(TH0),和,(TL0),放置在,R1,和,R0,内。,运行中读定时器,/,计数器,42,运行中读定时器,/,计数器,RDTIME:,MOV A,TH0,;读,(TH0),MOV R0,TL0,;读,(TL0),CJNE A,TH0,RDTIME,;比较,2,次读得的,(TH0),;不相等则重复读,MOV R1,A,;,(TH0),送入,R1,中,RET,
展开阅读全文