单片机原理及应用第7章定时计数器.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
  基本思路就是在   为低电平时,置位TR0,等待  变高;正脉冲到来后,开始计数;变低后,停止计数,处理结果。因为对T0的启停是由   的电平控制的,所以可以使用     下降沿触发的中断,处理T0计数的预备工作(置位TR0),并且在停止计数后处理计数结果(保存TH0、TL0)。   对应的源程序如下: ORG 0000H LJMP START ORG 0003H  ; 外部中断0入口地址 LJMP INT0_ISR  ; 跳转到中断0服务程序 ORG 000BH  ; 定时中断0入口地址 LJMP T0_ISR  ; 跳转到定时中断0服务程序            ORG 0100H ; 主程序     FLAG_OV BIT 20H.0     START: MOV SP,#60H CLR FLAG_OV ; 清除T0溢出标志 MOV TL0,#00H ; 清空TL0 MOV TH0,#00H ; 清空TH0 MOV TMOD,#09H ; 设置T0为定时器方式1 ;MOV IE,#03H ; 打开EX0, ET0 SETB ET0 ; 开T0中断 SETB IT0 ; SETB EX0 ; 开外部中断0 SETB EA ; 开中断 SJMP $ ;    INT0_ISR: CLR EA ; 关中断 CLR TR0 ; 关定时器 MOV 31H,TH0 ; 保存当前计数值 MOV 30H,TL0 MOV TH0,#00H ; 清空计数值, 为下次计数做准备 MOV TL0,#00H ; SETB TR0 ; 重开计数器, 做好计数准备 SETB EA ; 重开中断 RETI ; 中断返回     T0_ISR: CLR EA  ; 如果进入到这个中断, 意味着计数溢出 SETB FLAG_OV ; 置位溢出标志, 可以考虑扩展计数范围  ; 本程序没有做这项检查  ; 所以计数最大值为65 535 SETB EA  ; RETI  ; END   进一步:   ? 可以采用T0的溢出中断来扩展计数范围。本程序没有做这项处理。   ? 在每次   的下降沿都是先保存TH0、TL0,然后清零,并且再次做好开始计数的准备。 7.2.3 方式2   当M1M0取值为“10”时,定时/计数器工作于方式2。其组成结构如图7-8所示。在这个方式下,T1的组成结构与T0完全相同。此时,16位计数器分成独立的两个部分:TL0和TH0,TL0用作8位加法计数器,TH0用作计数初值寄存器。   在程序初始化时,TL0与TH0由软件设置成相同的值;启动定时/计数器后,TL0按加法计数器工作;当TL0计数溢出时,置位TF0,申请中断,并选通三态门,将TH0中的初值重新装入TL0,开始下一轮的计数,进入循环。此溢出信号还将送往串行通信系统,设置并产生串行通信所需要的波特率。 图7-8 定时/计数器方式2的结构   这种工作方式可以省掉用户软件中重新装载计数初值的操作,操作方便,而且提高了定时精度。但其计数范围较小(只有8位的计数值),适用于较高精度的定时脉冲信号发生器,常作为串行口波特率发生器使用。定时时间为 t?=?(28?-?TL0初值)?×?时钟周期?×?12   例 用定时器0方式2计数,每计满100次,将P1.0端取反。   解析 T0工作于计数方式2,所以TMOD的控制字为06H。 由T0(P3.4)输入外部脉冲,每次计满100的时候就对P1.0进行操作,设置计数初值为 X?=?28-100?=?156?=?9CH 所以设置TL0、TH0的值为9CH。   方法一:采用中断方式。源程序如下: ORG 0000H LJMP START ORG 000BH ; ?T0中断入口地址 LJMP T0_ISR ; 跳转到T0中断服务程序 ORG 0100H ;     START: MOV SP,#60H ; MOV TMOD,#06H ; 设置T0方式2, 计数器模式 MOV TL0,#9CH ; 给T0计数器赋初始值为9CH MOV TH0,#9CH ; 初值寄存器赋值 SETB ET0 ; ?T0中断允许            SETB EA ; 开中断 SETB TR0 ; 启动T0 SJMP $ ;     T0_ISR: CLR EA ; 中断服务程序 CPL P1

文档评论(0)

autohhh + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档