定时单片机汇编精.ppt
定时单片机汇编第1页,本讲稿共20页例例题题 已已知知某某控控制制系系统统时时钟钟频频率率为为6MHz,请请用用MCS-51单单片片机机T0的的工工作作方方式式0在在P1.0脚脚输输出周期为出周期为500S的方波。的方波。解:题目要求采用解:题目要求采用T0的工作方式的工作方式0进行定时,故(进行定时,故(TMOD)=0000B。设初始值为设初始值为x,则:,则:x+125=213x=8192-125x=8067;t=(213-x)*T机器机器将其转换为十六进制数将其转换为十六进制数1F83H,正确填入,正确填入T0计数器应为:(计数器应为:(TH0)=0FCH,(,(TL0)=03H。如果采用查询方式则程序如下所示(注意。如果采用查询方式则程序如下所示(注意初始化的顺序初始化的顺序)MOV TMOD,#00H MOV TH0,#0FCH;00011111 10000011:11111100 00000011 MOV TL0,#03H MOV IE,#00H ;屏蔽中断;屏蔽中断;屏蔽中断;屏蔽中断 SETB TR0 ;启动定时;启动定时 LOOP:JBC TF0,LOOP1 ;查询查询TF0=1,转到,转到LOOP1,否则顺序执行,否则顺序执行 AJMP LOOP LOOP1:CPL P1.0 MOV TH0,#0FCH ;重新装入初值;重新装入初值 MOV TL0,#03H AJMP LOOP ;循环执行;循环执行第2页,本讲稿共20页设定时器设定时器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)=FFH,(,(TL0)=1FH。则则第3页,本讲稿共20页例:例:利用利用T0的工作模式的工作模式0产生产生1ms的定时,在的定时,在P1.0引脚上输出引脚上输出2ms的的方波。设单片机晶振方波。设单片机晶振=12MHz。解:解:(1 1)选择工作模式)选择工作模式)选择工作模式)选择工作模式要在要在P1.0引脚输出周期为引脚输出周期为2ms方波,只要使方波,只要使P1.0每隔每隔1ms取反一次取反一次即可。即可。T0的模式字节的模式字节TMOD=00H,即,即TMOD.1TMOD.0M1M0=00,T0为模式为模式0;TMOD.2C/T=0,T0为定时状态;为定时状态;TMOD.3GATE=0,表示计数不受表示计数不受INT0控制控制;TMOD.4TMOD.7可为任意值。因可为任意值。因T1不用,这里取不用,这里取0第4页,本讲稿共20页(2 2)计算)计算)计算)计算1ms1ms定时时定时时定时时定时时T0T0的初值的初值的初值的初值机器周期机器周期设设T0的计数初值为的计数初值为X,则,则=8192-1000=7192D=1110000011000BTH0初值为初值为E0H,TL0初值为初值为18H。可查询。可查询TF0的状态来控的状态来控制制P1.0输出。输出。第5页,本讲稿共20页 (3 3)查询方式)查询方式)查询方式)查询方式采用查询方式的程序很简单,但在定时器计数过程中,采用查询方式的程序很简单,但在定时器计数过程中,CPU要不断查询溢出标志位要不断查询溢出标志位TF0的状态。这就占用了很多的状态。这就占用了很多CPU的工作的工作时间,使时间,使CPU的效率下降。的效率下降。程序清单:程序清单:MOVTMOD,#00H;设置设置T0T0为模式为模式0 0MOVTL0,#18H;送初值;送初值MOVTH0,#0E0HSETBTR0;启动;启动T0T0LOOP:JBCTF0,NEXT;查询定时时间到否?;查询定时时间到否?SJMPLOOPNEXT:MOVTL0,#18H;重装计数初值;重装计数初值MOVTH0,#0E0HCPLP1.0;输出取反;输出取反SJMPLOOP;重复循环;重复循环第6页,本讲稿共20页(4 4)定时器溢出中断方式)定时器溢出中断方式)定时器溢出中断方式)定时器溢出中断方式主程序主程序MAIN:MOVTMOD,#00H;设置设置T0T0为模式为模式0 0MOVTL0,#18H;送初值送初值MOVTH0,#0E0HSETBEA;CPUCPU开中断开中断SETBET0;T0T0中断允许中断允许SETBTR0;启动启动T0T0HERE:SJMPHERE;等待中断等待中断中断服务程序中断服务程序ORG000BH;T0T0入口入口AJMPCTC0;转中断服务程序转中断服务程序CTC0:MOVTL0,#18H;重装初值;重装初值MOVTH0,#0E0HCPLP1.0;输出方波;输出方波RETI;中断返回;中断返回第7页,本讲稿共20页模式模式1及应用及应用该模式对应的是该模式对应的是一个一个16位的定时器位的定时器/计数器计数器其结构与操作几乎与模式其结构与操作几乎与模式0完全相同,完全相同,唯一的差别是:在模式唯一的差别是:在模式1中,中,寄存器寄存器TH0和和TL0是以全部是以全部16位参与操作。位参与操作。用于定时工作方式时,定用于定时工作方式时,定时时间为时时间为t=(2t=(21616T0T0初值初值初值初值)振荡周期振荡周期振荡周期振荡周期1212用于用于计数工作方式计数工作方式时,计数长度为时,计数长度为216=65536(个外部脉冲)。(个外部脉冲)。第8页,本讲稿共20页模式模式1结构结构16位计数器位计数器 工工作作方方式式1与与工工作作方方式式0基基本本相相同同,只只是是其其可可以以实实现现16位位定定时时/计计数数,即即在在这这种种方方式式下下使使用用TH0与与TL0的的全全部部16位位。因因此此工工作作方方式式0所所能能完完成成的的功功能能,工工作作方方式式1都都可以实现。可以实现。第9页,本讲稿共20页例例:用定时器:用定时器T1产生一个产生一个50Hz的方波,由的方波,由P1.1输出。仍使用程序输出。仍使用程序查询方式,查询方式,fosc=12MHz。解解:方波周期:方波周期T=1/50Hz=0.02s=20ms,用用T1定时定时10ms,计数初,计数初值值X为为X=216-12101000/12=65536-10000=55536=D8F0H源程序如下:源程序如下:MOVTMOD,#10H;T1;T1模式模式1 1,定时,定时SETBTR1;启动启动T1T1LOOP:MOVTH1,#0D8H;装入装入T1T1计数初值计数初值MOVTL1,#0F0HJNBTF1,$;T1;T1没有溢出等待没有溢出等待CLRTF1;产生溢出,请标志位;产生溢出,请标志位CPLP1.1;P1.1;P1.1取反取反 输出输出SJMPLOOP;循环;循环第10页,本讲稿共20页 用查询方式与中断方式分别完成:用查询方式与中断方式分别完成:用查询方式与中断方式分别完成:用查询方式与中断方式分别完成:已已知知某某控控制制系系统统时时钟钟频频率率为为6MHz,请请用用MCS-51单单片片机机T0的的工工作作方方式式1在在P1.0脚脚输出周期为输出周期为500S的方波。的方波。MCS-51MCS-51单片机的工作方式单片机的工作方式单片机的工作方式单片机的工作方式1 1与方式与方式与方式与方式0 0基本相同,如果使用基本相同,如果使用基本相同,如果使用基本相同,如果使用T1T1的方式的方式的方式的方式1 1则寄存器(则寄存器(则寄存器(则寄存器(TMODTMOD)=10H=10H。计算初始值可得,(计算初始值可得,(计算初始值可得,(计算初始值可得,(TH1TH1)=0FFH=0FFH,(,(,(,(TL1TL1)=83H=83H。查询方式查询方式查询方式查询方式:ORG 0000HORG 0000H AJMP Main AJMP Main ORG 0030H ORG 0030HMain:MOV TMODMain:MOV TMOD,#10H#10H ;00010000B00010000B MOV TH1 MOV TH1,#0FFH#0FFH MOV TL1 MOV TL1,#83H#83H MOV IE MOV IE,#00H#00H;屏蔽所有中断;屏蔽所有中断;屏蔽所有中断;屏蔽所有中断 SETB TR1 SETB TR1 ;启动定时器;启动定时器;启动定时器;启动定时器T1T1LOOPLOOP:JBC TF1JBC TF1,LOOP1LOOP1 SJMP LOOP SJMP LOOP LOOP1 LOOP1:CPL P1.0CPL P1.0 MOV TH1 MOV TH1,#0FFH#0FFH;重新装入初值重新装入初值重新装入初值重新装入初值 MOV TL1MOV TL1,#83H#83H AJMP LOOP AJMP LOOP END END第11页,本讲稿共20页中断方式中断方式:主程序:主程序:ORG 0000H SJMP Main ORG 001BH SJMP INTT1 ORG 0030H Main:MOV TMOD,#10H MOV TH1,#0FFH MOV TL1,#83H SETB TR1 SETB ET1 SETB EA SJMP$中断服务程序:中断服务程序:中断服务程序:中断服务程序:INTT1:CPLP1.0INTT1:CPLP1.0MOVTH1MOVTH1,#0FFH#0FFHMOVTL1MOVTL1,#83H#83HRETIRETIENDEND第12页,本讲稿共20页模式模式2及应用及应用模式模式2结构结构8位计数器位计数器第13页,本讲稿共20页TL0计数溢出时,不仅使溢出中断标志位计数溢出时,不仅使溢出中断标志位TF0置置1,而且还自动把,而且还自动把TH0中的内容重新装载到中的内容重新装载到TL0中。这里,中。这里,16位计数器被拆成二个,位计数器被拆成二个,TL0用作用作8位计数器,位计数器,TH0用以保护初值用以保护初值。在程序初始化时,在程序初始化时,TL0和和TH0由软件赋予相同的初值。由软件赋予相同的初值。一旦一旦TL0计计数溢出,便置位数溢出,便置位TF0,并将,并将TH0中的初值再自动装入中的初值再自动装入TL0,继续计数,继续计数,循环重复。循环重复。用于定时工作模式时用于定时工作模式时用于定时工作模式时用于定时工作模式时,其定时时间(,其定时时间(TF0溢出周期)为溢出周期)为t=(2t=(28 8TH0TH0初值初值初值初值)振荡周期振荡周期振荡周期振荡周期1212用于计数工作方式时用于计数工作方式时用于计数工作方式时用于计数工作方式时,最大计数长度(,最大计数长度(TH0初值初值=0)为)为28=256(个(个外部脉冲)。外部脉冲)。这种工作模式可这种工作模式可省去用户软件中重装常数的语句省去用户软件中重装常数的语句,并,并可产生相当可产生相当精确的定时时间精确的定时时间,特别适于串行口波特率发生器。,特别适于串行口波特率发生器。第14页,本讲稿共20页 在某啤酒自动生产线上,需要每生产在某啤酒自动生产线上,需要每生产1010瓶执行装箱操作,将生产瓶执行装箱操作,将生产出的啤酒自动装箱。试用出的啤酒自动装箱。试用MCS-51MCS-51单片机的计数器实现该控制要求。单片机的计数器实现该控制要求。解:如果在啤酒生产线上装有传感装置,每检测到一瓶啤酒经过就向单片机发送一个脉冲信号,这样使用计数功能就可实现。设用T0的工作方式2来完成该题目。MOV TMOD,#06H;00000110B,T0采用方式2计数 MOV TL0,#0F6H ;装入初值 MOV TH0,#0F6H MOV IE,#00H ;禁止中断 SETB TR0 ;启动定时T0,开始计数 LOOP:JBC TF0,LOOP1 AJMP LOOP LOOP1:(驱动电机转动)AJMP LOOP第15页,本讲稿共20页 例例:当:当P3.4引脚上的电平发生负跳变时,从引脚上的电平发生负跳变时,从P1.0输出一个输出一个500s的同步脉冲。请编程实现该功能。的同步脉冲。请编程实现该功能。解解:模式选择模式选择模式选择模式选择首先选首先选T0为模式为模式2,外部事件计数方式。当,外部事件计数方式。当P3.4引脚上引脚上的电平发生负跳变时,的电平发生负跳变时,T0计数器加计数器加1,溢出标志,溢出标志TF0置置1;然后改变然后改变T0为为500s定时工作方式,并使定时工作方式,并使P1.0输出由输出由1变为变为0。T0定时到产生溢出,使定时到产生溢出,使P1.0引脚恢复输出高电平,引脚恢复输出高电平,T0又恢复外部事件方式。又恢复外部事件方式。第16页,本讲稿共20页计数初值计数初值T0工工作作在在外外部部事事件件计计数数方方式式,当当计计数数到到28时时,再再加加1计计数数器器就就会会溢溢出出。设设计计数数初初值值为为X,当当再再出出现现一一次次外外部部事件时,计数器溢出。则事件时,计数器溢出。则X+1=28X=281=11111111B=0FFHT0工工作作在在定定时时方方式式时时,设设晶晶振振频频率率为为6MHz,500s相当于相当于250个机器周期。因此,初值个机器周期。因此,初值X为为(28X)2s=500sX=28250=6=06H第17页,本讲稿共20页程序清单程序清单程序清单程序清单START:MOVTMOD,#06H;设置设置T0T0为模式为模式2 2。外部计数方式。外部计数方式MOVTH0,#0FFH;T0;T0计数器初值计数器初值 MOVTL0,#0FFHSETBTR0;启动启动T0T0计数计数LOOP1:JBCTF0,PTFO1;查询查询T0T0溢出标志,溢出标志,TF0=1TF0=1时转移时转移 TF0=0(TF0=0(即查即查P3.4P3.4负跳变负跳变)SJMPLOOP1PTFO1:CLRTR0;停止计数停止计数MOVTMOD,#02H;设置设置T0T0为模式为模式2 2,定时方式,定时方式MOVTH0,#06H;T0;T0定时定时500us500us初值初值MOVTL0,#06HCLRP1.0;P1.0;P1.0清清0 0SETBTR0;启动定时启动定时500us500us第18页,本讲稿共20页 LOOP2:JBCTF0,PTFO2;查询溢出标志查询溢出标志,定时到定时到TF0=1TF0=1转转 移移,且且TF0=0(TF0=0(第一个第一个500us500us到否到否?)?)SJMPLOOP2PTFO2:SETBP1.0;P1.0P1.0置置1(1(到了第一个到了第一个500us)500us)CLRTR0;停止计数停止计数SJMPSTART第19页,本讲稿共20页第20页,本讲稿共20页