5[1].2定时器应用举例

上传人:ll****x 文档编号:243379978 上传时间:2024-09-22 格式:PPT 页数:40 大小:169KB
返回 下载 相关 举报
5[1].2定时器应用举例_第1页
第1页 / 共40页
5[1].2定时器应用举例_第2页
第2页 / 共40页
5[1].2定时器应用举例_第3页
第3页 / 共40页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,定时器及应用,1,定时/计数器的基本结构如图所示,:,2,例1、设单片机晶振频率为6,MHZ,,使用定时器1以方式0产生周期为500,us,的等宽正方波连续脉冲,并由,P,1.0,输出,以查询方式完成。,3,解:1、计算计数初值,要产生500,us,的等宽正方波脉冲,只需在,P,1.0,端以250,us,为周期交替输出高低电平即可实现,为此定时时间为250,us。,使用6,MHZ,晶振,则一个机器周期为2,us,,方式0为13位计数结构,设初值为,X,,则:,(2,13,-,X)*12*1/6 =250,得:,X=8067,,二进制数表示为:11111100 00011,十六进制表示为,高8位为:0,FCH,,低5位为:03,H。,其中高8位装入,TH,1,即,TH,1,= 0FCH,,低5位装入,TL,1,,,即,TL,1,= 03H。,4,2、,TMOD,寄存器初始化,为把定时器/计数器设定为方式0,则,M,1,M,0,= 00 ;,为实现定时功能,应使,C/T=0;,为实现定时器/计数器1的运行控制,则,GATE =0。,定时器/计数器,T0,不用,有关位设定为0,因此,TMOD,寄存器初始化为00,H。,3、,由定时器控制器,TCON,中的,TR,1,位控制定时的启动和停止,,TR,1,=1,启动,,,TR,1,=0,停止。,4、使用查询就禁止中断,IE=00H,5,5、程序设计:,MOV TMOD ,#00H ;,设置,T1,为工作方式0,MOV TH,1,#0FCH ;,设置计数初值,MOV TL,1,#03H,MOV IE ,#00H ;,禁止中断,SETB TR1,;,启动定时,LOOP:,JBC TF,1,LOOP1 ;,查询计数溢出,AJMP LOOP,LOOP1:MOV TH,1,#0FCH ;,重新设置计数初值,MOV TL,1,#03H,CPL P,1.0,;,输出取反,AJMP LOOP ;,重复循环,6,例3、使用定时器0以工作方式2产生100,us,定时,在,P,1.0,输出周期为200,us,的连续方波脉冲,已知晶振频率,fosc=6MHZ。,7,解:,1、计算计数初值,6,MHZ,晶振下,一个机器周期为2,us,以,TH0,作重装载的预置寄存器,,TL0,作8位计数器,则:,(2,8,-,X)*12*1/6=100 ,,得,X=206=11001110B=0CEH,把0,CEH,分别装入,TH,0,和,TL,0,中。,2、,TMOD,初始化,为把定时器/计数器设定为方式2,则,M,1,M,0,=10;,为实现定时功能,应使,C/T=0;,为实现定时器/计数器0的运行控制,则,GATE=0。,定时器/计数器,T,1,不用,有关位设定为0,因此,TMOD,寄存器初始化为0000 0010,即:02,H,8,3、,由定时器控制器,TCON,中的,TR,0,位控制定时的启动和停止,,TR,0,=1,启动,,,TR,0,=0,停止。,4、使用中断方式,应开中断,EA,位和,ET,0,位置“1”,9,5、程序设计,(查询方式),MOV TMOD ,#02H ;,设置,T,0,为工作方式2,MOV TH,0,#0CEH ;,设置计数初值,MOV TL,0,#0CEH,MOV IE ,#00H ;,禁止中断,SETB TR,0,;,启动定时,LOOP: JBC TF,0,LOOP1 ;,查询计数溢出,AJMP LOOP,LOOP1:CPL P,1.0,;,输出取反,AJMP LOOP ;,重复循环,10,5、程序设计(中断方式),MOV TMOD ,#02H ;,设置,T0,为工作方式2,MOV TH,0,#0CEH ;,设置计数初值,MOV TL,0,#0CEH,SETB EA ;,开中断,SETB ET,0,;,定时器1允许中断,SETB TR,0,;,启动定时,SJMP $ ;,等待中断,ORG 000BH,CPL P1.0,;,输出取反,RETI ;,中断返回,11,设某用户系统中已使用了两个外部中断源,并置定时器T1工作在模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0输出一个5KHz的方波。Fosc = 12MHz。,12,分析:,目的:1) 增加一个外部中断;,2),使,P1.0,输出一个方波。,条件:1)两个外部中断源已被使用,2)定时器,T1,已用于串行口波特率发生器,因此:可利用定时/计数器,T0,,使之工作在模式3,,1)利用,TL0,扩展外部中断源,2)利用,TH0,作定时器使用,输出方波,13,设置初值:,1),TL0 = 0FFH,2),因为输出方波,f = 5kHz,,故方波周期为200,us,,用,TH0,产生100,us,的定时,故,TH0,的初值,X = 256 (,定时时间/机器周期),= 256 - (100,us*,晶振频率/12),= 156,设定,T0,工作方式,,TMOD,TCON.,14,程序:,MOV TMOD,#27H ;T0:,模式3,计数方式,;,T1:,模式2,定时方式,MOV TL0,#0FFH ;,一旦加1,马上溢出,申请中断,MOV TH0,#156 ;TH0,初值,MOV TH1,#data ;,根据波特率要求而定,MOV TL1, #data,MOV TCON,#55H ;01010101,MOV IE,#9FH ;,开放全部中断,.,ORG 000BH,TL0INT: MOV TL0,#0FFH ;TL0,重新赋值,.,RETI,ORG 001BH,TH0INT: MOV TH0,#156 ;TH0,重新赋值,CPL P1.0,RETI,15,低频信号发生器驱动程序,设计一个控制程序,使8,9c51,的,P1,口输出8路低频方波脉冲,频率分别为100,50,25,20,10,5,2,1,Hz。,16,1. 计算定时器初值,使用,T0,,产生5,ms,的定时,若晶振选12,MHz,,则5,ms,相当于5000个机器周期,,T0,应工作在模式1,初值,x,为:,x= 65536-5000=60536,,用十六进制表示,则,x=0EC78H。,(注意,TH,TL,分开赋值-因为,T0/T1,都是16位),2 . 设立8个计数器,对应于,P1.0P1.7,,设立8个计数器,初值分别为1,2,4,5,10,20,50,100,由,T0,的溢出中断服务程序对它们减“1”计数,当减为0时恢复初值,并使相应的口引脚改变状态,这样就可以使,P1,口输出所要求的方波。,17,程序:,ORG 0,START: AJMP MAIN,ORG 0BH,PTP0: MOV TL0,#78H ;T0,中断服务程序,MOV TH0,#0ECH,CPL P1.0,DJNZ 31H, PF01 ;,对各路时间计数器进行减1计数,MOV 31H,#2 ;,计数器减为1,恢复计数初值,CPL P1.1 ;,输出取反,PF01: DJNZ 32H, PF02,MOV 32H, #4,CPL P1.2,PF02: DJNZ 33H, PF03,MOV 33H, #5,CPL P1.3,18,PF03: DJNZ 34H, PF04,MOV 34H, #10,CPL P1.4,PF04: DJNZ 35H, PF05,MOV 35H, #20,CPL P1.5,PF05: DJNZ 36H, PF06,MOV 36H, #50,CPL P1.6,PF06: DJNZ 37H, PF07,MOV 37H, #100,CPL P1.7,PF07: RETI,19,MAIN: MOV SP, #70H ;,主程序栈指针初始化,MOV 31H, #2 ;,各路计数器置初值,MOV 32H, #4,MOV 33H, #5,MOV 34H, #10,MOV 35H, #20,MOV 36H, #50,MOV 37H, #100,MOV TMOD, #1 ;,GATE = 0, C/T=0, M1M0 = 01,MOV TL0, #78H ;,初值,T0,MOV TH0, #0ECH,MOV IE, #82H ;,允许,T0,中断,SETB TR0 ;,允许,T0,计数,HERE: SJMP HERE ;,以踏步表示,CPU,可以处理其他工作,20,例 利用定时器,T1,的模式,2,对外部信号计数,要求每计满,100,次对,P1.0,端取反。,21,解:(,1,)计算计数初值,X,100=2,8,-X X=256-100=156=9CH,(,2,)模式字,TMOD=0110*B=60H,(,3,)程序清单 ;用中断方式,ORG 0000H,MAIN,:,MOV TMOD,,,#60H,MOV TL1,,,#156,MOV TH1,,,#156,MOV IE,,,#88H,SETB TR1,SJMP $,ORG 001BH,CPL P1.0,RETI,22,例 脉冲参数测量,GATE,功能的使用。,脉冲高电平(计数)长度值存于,21H,、,20H,中,,脉冲低电平长度存于,23H,、,22H,中。,电路连接如下图所示。,解: 复习,GATE,的用法:,GATE = 0,时,,TRi = 1,,即可启动,Ti,定时,/,计数,GATE = 1,时,,TRi = 1,,且,=1,,才启动定时,/,计数。,89C51,P3.2,P3.3,1,被测信号,2,1,a,3,T0,计数,T1,计数,23,ORG 0000H,LJMP MAIN,ORG 2000H,MAIN,:,MOV TMOD,,,#99H,;,T0,、,T1,均工作在定时,,;模式,1,,,GATE=1,MOV A,,,#00H,;,T0,、,T1,赋计数初值,00H,,,;,定时最长时间为,0000 65536,MOV TL0,,,A,MOV TH0,,,A,MOV TL1,,,A,MOV TH1,,,A,24,TEST0,:,JB P3.2,,,TEST0,;检测是否到,a,点,SETB TR0,;到,a,点,,TR0 = 1,,做好取计时值准备。,TEST1,:,JNB P3.2,,,TEST1,;检测是否到,1,点,SETB TR1,;到,1,点,T0,计时;,TR1 = 1,,做好,T1,计时准备。,TEST2,:,JB P3.2,,,TEST2,;检测是否到,2,点,CLR TR0,;到,2,点,停止,T0,计时,,T1,开始计时。,MOV 20H,,,TH0,;保存,T0,计时结果,MOV 21H,,,TL0,TEST3,:,JB P3.3,,,TEST3,;检测是否到,3,点,CLR TR1,;到,3,点,停止,T1,计数,MOV 22H,,,TH1,;保存,T1,计数结果,MOV 23H,,,TL1,LCALL DISP,SJMP,25,运行中读定时器,/,计数器,80C51,可以随时读写计数寄存器,TLx,和,THx (x,为,0,或,1),,用于实时显示计数值等。,办法是:先读,THx,,后读,TLx,,再重读,THx,,若两次读得的,THx,值是一样的,则可以确定读入的数据是正确的;若两次读得的,THx,值不一致,则必须重读。,26,例,.,飞读,RDTIME,:,MOVA,,,TH0,;读,TH0,MOVR0,,,TL0,;读,TL0,并存入,R0,CJNEA,,,TH0,,,RDTIME,;再读,TH0,,与上次;读入的,TH0,比较,若不等,重读,MOVR1,A,;存,TH0,在,R1,中,RET,27,实时时钟的设计,(,1,)实时时钟实现的基本思想,如何获得1秒的定时,可把定时时间定为100,ms,,采用中断方式进行溢出次数的累计,计满10次,即得到秒计时。,片内,RAM,中规定3个单元作为秒、分、时单元,具体安排如下:,32H:“,秒”单元 ;,31H:“,分”单元;,30H:“,时”单元,从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。,时钟 就是以秒、分、时为单位进行计时。用定时器与中断的联合应用。,28,假定使用定时器,T0,,以工作模式,1,进行,100ms,的定时。如,fosc=6MHz,,则计数初值,X,为:, (216,X)12/(6 106 )=10010-3 s, X=15536=3CB0H,因此 :,(TL0)=0B0H,(TH0)=3CH,29,采用定时方式进行溢出次数的累计,计满,10,次即得到秒计时。,从秒到分和从分到时的计时是通过累计和数值比较实现的。,时钟显示即及显示缓冲区部分在这里略,可自行设计。,30,主程序(,MAIN,),的主要功能是进行定时器,T1,的初始化编程并启动,T1,,然后通过反复调用显示子程序,等待,100ms,定时中断的到来。其流程如,图,所示。,(,2,)程序流程及程序清单,设,T1,为模式1,设中断次数,清计时单元,开中断,启动,T1,调用显示子程序,等待定时中断,31,中断服务程序(,PITO,)的主要功能,进行计时操作。程序开始先判断计数溢出是否满了,10,次,不满表明还没达到最小计时单位,秒,中断返回;如满,10,次则表示已达到最小计时单位,秒,程序继续向下运行,进行计时操作。,要求满,1,秒则“秒位”,32H,单元内容加,1,,满,60s,则“分位”,31H,单元内容加,1,,满,60min,则“时位”,30H,单元内容加,1,,满,24h,则,30H,,,31H,,,32H,单元内容全部清,0,。中断服务程序流程如下图所示。,32,保护现场,赋计数初值,到,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,图,中断服务程序流程图,33,源程序如下:,ORG 0000H,AJMP MAIN,;,上电,转向主,程序,ORG 001BH,;,T1,的中断服务程序入口地址,AJMP SERVE,;转向中断服务程序,34,ORG 2000H,;主程序,MAIN: MOV SP,#60H,;设堆栈指针,MOV TMOD,#10H,;设置,T1,工作于模式,1,MOV 20H,,,#0AH,;设循环次数,CLR A,MOV 30H,,,A,;时单元清,0,MOV 31H,,,A,;分单元清,0,MOV 32H,,,A,;秒单元清,0,35,SETB ET1,;,T1,开中断,SETB EA,;,CPU,开中断,MOV TL1,#0B0H,;装计数值低,8,位,MOV TH1,#3CH,;装计数值高,8,位,SETB TR1,;启动定时,SJMP $,;等待中断(可反复调用显示子程序),36,SERVE: PUSH PSW ;,保护现场,PUSH ACC,MOV TL1,#0B0H,;重新赋初值,MOV TH1,#3CH,DJNZ 20H,RETUNT,;,1s,未到,返回,MOV 20H,,,#0AH,;重置中断次数,37,MOV A,,,#01H,ADD A,,,32H,;“秒位”加,1,DA A,;转换为,BCD,码,MOV 32H,,,A,CJNE A,,,#60H,,,RETUNT,;未满,60s,,返回,MOV 32H,,,#00H,;计满,60s,,“秒位”清,0,38,MOV A,,,#01H,ADD A,,,31H,;“分位”加,1,DA A,;转换为,BCD,码,MOV 31H,,,A,CJNE A,,,#60H,,,RETUNT,;未满,60min,,返回,MOV 31H,,,#00H,;计满,60min,,“,分,位”清,0,39,MOV A,,,#01H,ADD A,,,30H,;“时位”加,1,DA A,;转换为,BCD,码,MOV 30H,,,A,CJNE A,,,#24H,,,RETUNT,;未满,24h,,返回,MOV 30H,,,#00H,;计满,24h,,“时位”清,0,RETUNT,:,POP ACC,;恢复现场,POP PSW,RETI,;中断返回,END,40,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!