《电子时钟定时算法》PPT课件.ppt_第1页
《电子时钟定时算法》PPT课件.ppt_第2页
《电子时钟定时算法》PPT课件.ppt_第3页
《电子时钟定时算法》PPT课件.ppt_第4页
《电子时钟定时算法》PPT课件.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、定时器及应用,定时/计数器的基本结构如图所示 :,例1、设单片机晶振频率为6MHZ,使用定时器1以方式0产生周期为500us的等宽正方波连续脉冲,并由P1.0输出,以查询方式完成。,解:1、计算计数初值 要产生500us的等宽正方波脉冲,只需在P1.0端以250us为周期交替输出高低电平即可实现,为此定时时间为250us。使用6MHZ晶振,则一个机器周期为2us,方式0为13位计数结构,设初值为X,则: (213-X)*12*1/6 =250 得:X=8067,二进制数表示为:11111100 00011,十六进制表示为,高8位为:0FCH,低5位为:03H。其中高8位装入TH1,即TH1 =

2、 0FCH,低5位装入TL1, 即TL1 = 03H。,2、TMOD寄存器初始化 为把定时器/计数器设定为方式0,则M1M0= 00 ;为实现定时功能,应使C/T=0;为实现定时器/计数器1的运行控制,则GATE =0。定时器/计数器T0不用,有关位设定为0,因此TMOD寄存器初始化为00H。 3、由定时器控制器TCON中的TR1位控制定时的启动和停止,TR1=1启动 ,TR1=0停止。 4、使用查询就禁止中断 IE=00H,5、程序设计: MOV TMOD ,#00H ; 设置T1为工作方式0 MOV TH1 ,#0FCH ;设置计数初值 MOV TL1,#03H MOV IE ,#00H

3、;禁止中断 SETB TR1 ;启动定时 LOOP: JBC TF1,LOOP1 ;查询计数溢出 AJMP LOOP LOOP1:MOV TH1,#0FCH ;重新设置计数初值 MOV TL1,#03H CPL P1.0 ;输出取反 AJMP LOOP ;重复循环,例3、使用定时器0以工作方式2产生100us定时,在P1.0输出周期为200us的连续方波脉冲,已知晶振频率fosc=6MHZ。,解: 1、计算计数初值 6MHZ晶振下,一个机器周期为2us,以TH0作重装载的预置寄存器,TL0作8位计数器,则: (28-X)*12*1/6=100 ,得X=206=11001110B=0CEH 把0

4、CEH分别装入TH0和TL0中。 2、TMOD初始化 为把定时器/计数器设定为方式2,则M1M0=10;为实现定时功能,应使C/T=0;为实现定时器/计数器0的运行控制,则GATE=0。定时器/计数器T1不用,有关位设定为0,因此TMOD寄存器初始化为0000 0010,即:02H,3、由定时器控制器TCON中的TR0位控制定时的启动和停止,TR0=1启动 ,TR0=0停止。 4、使用中断方式,应开中断 EA 位和ET0位置“1”,5、程序设计(查询方式) MOV TMOD ,#02H ; 设置T0为工作方式2 MOV TH0 ,#0CEH ;设置计数初值 MOV TL0,#0CEH MOV

5、IE ,#00H ;禁止中断 SETB TR0 ;启动定时 LOOP: JBC TF0,LOOP1 ;查询计数溢出 AJMP LOOP LOOP1:CPL P1.0 ;输出取反 AJMP LOOP ;重复循环,5、程序设计(中断方式) MOV TMOD ,#02H ; 设置T0为工作方式2 MOV TH0 ,#0CEH ;设置计数初值 MOV TL0,#0CEH SETB EA ;开中断 SETB ET0 ; 定时器1允许中断 LOOP: SETB TR0 ;启动定时 HERE: SJMP $ ; 等待中断 AJMP LOOP 中断服务程序: CPL P1.0 ;输出取反 RETI ;中断返回

6、,设某用户系统中已使用了两个外部中断源,并置定时器T1工作在模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0输出一个5KHz的方波。Fosc = 12MHz。,分析: 目的:1) 增加一个外部中断; 2) 使P1.0输出一个方波。 条件:1)两个外部中断源已被使用 2)定时器T1已用于串行口波特率发生器 因此:可利用定时/计数器T0,使之工作在模式3, 1)利用TL0扩展外部中断源 2)利用TH0作定时器使用,输出方波,设置初值: 1) TL0 = 0FFH 2) 因为输出方波f = 5kHz,故方波周期为200us,用TH0产生100us的定时,故TH0的初值X =

7、256 (定时时间/机器周期) = 256 - (100us*晶振频率/12) = 156 设定T0工作方式,TMOD,TCON.,程序: 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 ;开放全部中断 TL0INT: MOV TL0,#0FFH ;TL0重新赋值 . RETI TH0INT: MOV TH0,#1

8、56 ;TH0重新赋值 CPL P1.0 RETI,低频信号发生器驱动程序 设计一个控制程序,使89c51的P1口输出8路低频方波脉冲,频率分别为100,50,25,20,10,5,2,1Hz。,1. 计算定时器初值 使用T0,产生5ms的定时,若晶振选12MHz,则5ms相当于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的溢出中断服务

9、程序对它们减“1”计数,当减为0时恢复初值,并使相应的口引脚改变状态,这样就可以使P1口输出所要求的方波。,程序: 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,PF0

10、3: 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,MAIN: MOV SP, #70H ;主程序栈指针初始化 MOV 31H, #2 ;各路计数器置初值 MOV 32H, #4 MOV 33H, #5 MOV 34H, #10 MOV 35H, #20 MOV 36H, #50 MOV

11、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可以处理其他工作,例 利用定时器T1的模式2对外部信号计数,要求每计满100次对P1.0端取反。,解:(1)计算计数初值X 100=28-X X=256-100=156=9CH (2)模式字 TMOD=0110*B=60H (3)程序清单 ;用中断方式 ORG 0000H MAIN:MOV TMOD,

12、#60H MOV TL1,#156 MOV TH1,#156 MOV IE,#88H SETB TR1 SJMP $ ORG 001BH CPL P1.0 RETI,例 脉冲参数测量GATE功能的使用。 脉冲高电平(计数)长度值存于21H、20H中, 脉冲低电平长度存于23H、22H中。 电路连接如下图所示。,解: 复习GATE的用法: GATE = 0时,TRi = 1,即可启动Ti定时 / 计数 GATE = 1时,TRi = 1,且 =1,才启动定时 / 计数。,ORG 0000H LJMP MAIN ORG 2000H MAIN:MOV TMOD,#99H ;T0、T1均工作在定时,

13、;模式1,GATE=1 MOV A,#00H ;T0、T1赋计数初值00H, ; 定时最长时间为0000 65536 MOV TL0,A,MOV TH0,A MOV TL1,A MOV TH1,A,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 ;保存

14、T0计时结果 MOV 21H,TL0,TEST3:JB P3.3,TEST3 ;检测是否到3点 CLR TR1 ;到3点,停止T1计数 MOV 22H,TH1 ;保存T1计数结果 MOV 23H,TL1 LCALL DISP SJMP ,运行中读定时器/计数器,80C51可以随时读写计数寄存器TLx和THx (x为0或1) ,用于实时显示计数值等。 办法是:先读THx,后读TLx,再重读THx,若两次读得的THx值是一样的,则可以确定读入的数据是正确的;若两次读得的THx值不一致,则必须重读。,例. 飞读,RDTIME:MOVA,TH0;读TH0 MOVR0,TL0;读TL0并存入R0 CJN

15、EA,TH0,RDTIME;再读TH0,与上次;读入的TH0比较,若不等,重读 MOVR1,A;存TH0在R1中 RET,实时时钟的设计,(1)实时时钟实现的基本思想,如何获得1秒的定时,可把定时时间定为100ms,采用中断方式进行溢出次数的累计,计满10次,即得到秒计时。 片内RAM中规定3个单元作为秒、分、时单元,具体安排如下: 32H:“秒”单元 ;31H:“分”单元;30H:“时”单元 从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。,时钟 就是以秒、分、时为单位进行计时。用定时器与中断的联合应用。,假定使用定时器T0,以工作模式1进行100ms的定时。如fosc=6MHz,

16、则计数初值X为: (216X)12/(6 106 )=10010-3 s X=15536=3CB0H 因此 : (TL0)=0B0H (TH0)=3CH, 采用定时方式进行溢出次数的累计,计满10次即得到秒计时。 从秒到分和从分到时的计时是通过累计和数值比较实现的。 时钟显示即及显示缓冲区部分在这里略,可自行设计。, 主程序(MAIN)的主要功能是进行定时器T1的初始化编程并启动T1,然后通过反复调用显示子程序,等待100ms定时中断的到来。其流程如 图所示。,(2)程序流程及程序清单,设T1为模式1,设中断次数,清计时单元,开中断,启动T1,调用显示子程序,等待定时中断, 中断服务程序(PI

17、TO)的主要功能 进行计时操作。程序开始先判断计数溢出是否满了10次,不满表明还没达到最小计时单位秒,中断返回;如满10次则表示已达到最小计时单位秒,程序继续向下运行,进行计时操作。 要求满1秒则“秒位”32H单元内容加1,满60s则“分位”31H单元内容加1,满60min则“时位”30H单元内容加1,满24h则30H,31H,332H单元内容全部清0。中断服务程序流程如下图所示。,保护现场,赋计数初值,到1s?,(32H)加1,(32H)=60?,(32H)清0,(31H)加1,(31H)=60?,(31H)清0,(30H)加1,(30H)=24?,(30H)清0,恢复现场,返回,入口,a,

18、a,N,N,N,N,Y,Y,Y,Y,图 中断服务程序流程图, 源程序如下: ORG 0000H AJMP MAIN ; 上电,转向主程序 ORG 001BH ;T1的中断服务程序入口地址 AJMP SERVE ;转向中断服务程序,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,SETB ET1 ;T1开中断 SETB EA ;CPU开中断 MOV TL1,#0B0H ;装计数值低8位 MOV TH1,#3CH ;装计数值高8位 SETB TR1 ;启动定时 SJMP $ ;等待中断(可反复调用显示子程序),SERVE: PUSH PSW ;保护现场 PUSH ACC MOV TL1,#0B0H ;重新赋初值 MOV TH1,#3CH DJNZ 20H,RETUNT ;1s未到,返回 MOV 20H,#0AH ;重置中断次数,MOV A,#01H ADD A,32H ;“秒位”加1 DA A ;转换为BCD码 MOV 32H,A CJNE A,#60H,RETUNT ;未满60s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论