浅议降低51单片机定时器定时误差几种方法.docVIP

浅议降低51单片机定时器定时误差几种方法.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅议降低51单片机定时器定时误差几种方法

浅议降低51单片机定时器定时误差几种方法   摘要: 51单片机在当前控制检测系统中的应用越来越多,对其定时的精确要求也越来越高。虽然51单片机自带的16位定时/计数器较为精确,但是在实际应用过程中难免存在误差,而且这个误差不可避免,所以降低51单片机定时器误差就显得尤为重要。 关键词: 单片机;定时误差 中图分类号:TP368.1 文献标识码:A 文章编号:1006-4311(2013)17-0051-02 0 引言 51单片机的定时/计数器在基本的单片机系统中都会用到,而且对其定时精确度的要求越来越高。一般我们在单片机系统设计中,定时方式通常有以下三种:软件定时,硬件定时和可编程控制器定时。软件定时是通过程序的指令控制实现定时方法,这种定时方式虽然调整方便,但是误差较大,而且CPU的利用率很低;硬件定时是利用专用的定时集成电路设计实现的定时方法,硬件定时的时间较为精确,但是不易调整定时时间;可编程控制器定时是利用程序控制的方法控制硬件的定时时间,这种定时方式能够得到比较精确的定时时间,且调整定时时间也比较方便,51单片机的定时/计数器就属于可编程控制器定时。 虽然51单片机定时/计数器定时方便,但是在系统应用过程中还存在一定的误差,这个误差主要是由于系统中断响应所引起的。基本的51单片机中有5个中断源,其中两个16位的定时/计数器中断,中断系统采用两个优先级控制。51单片机中断响应过程如图1所示。 这是一个多级中断响应的流程图,在定时中断响应过程中,CPU一般通过查看定时/计数器的中断请求标志位TF0和TF1来确定是否有中断请求。但是在执行定时中断的过程中,CPU必须执行完当前执行的指令或者高优先级的中断程序之后才能进入定时中断,这个过程至少需3个机器周期才能实现,这时定时器中的加1计数器还在计数,这样在进入定时中断重新给加1计数器赋值时就会出现加1计数器重新计数的过程,这就是定时器误差的来源。 我们在利用51单片机定时/计数器进行定时操作时最多的使用它的方式1和方式2。方式1是一个16位的定时/计数器,在中断处理过程中需要对定时器中的加1计数器THx和TLx重新赋值。方式2是一个8位自动重装的定时/计数器,在中断处理中可以不同对其加1计数器进行重新赋值。不管是方式1和方式2在中断处理过程中,由于单片机本身响应流程的问题,都会存在一定的定时误差,在定时要求精确的系统中我们考虑的重点是如何去降低定时误差。 1 降低定时器定时误差的几种方法 在单片机系统设计中,我们可以通过以下方法来降低定时器的定时误差。 1.1 提高外部晶振频率 在常用的51单片机系统中,系统时钟是由外接晶体振荡器的频率决定的,系统时钟频率的高低决定了CPU执行速度,外接晶振频率越高,机器周期越短,CPU执行指令的速度越快,响应中断的速度也越快。在51单片机中,1个机器周期=12个晶振周期,若外接晶振频率为6MHz,则机器周期为2us,若CPU在响应定时中断时正在执行2机器周期的指令,那么进入定时中断所需要的时间为4us,定时器内部加1计数器至少计数了4次(不算重置初值的时间)。若我们将外接晶振频率提升到12MHz,则机器周期为1us,CPU在相同条件下响应中断的时间降低到2us,在进入定时中断时内部加1计数器只加了2次,这样的话就能够降低定时器的误差。 不过,相对而言,这种方法有一定的弊端。我们所希望的是外接晶振的频率越高越好,但是并不是所有的51单片机的外接晶振的频率都能提升的很高,比如ATMEL公司的AT89S51单片机外接晶振的频率最大只有33MHz,那么通过提升外接晶振频率降低51单片机的定时器的误差有一定的局限性。 1.2 软件纠正 其实,在使用定时器定时时,定时器的误差一般是由响应过程引起的,这个误差我们可以通过软件调整的方法对其进行纠正。比如我们利用51单片机T0实现50ms的定时,T0工作在方式1,晶振频率为12MHz,那么程序我们一般这样实现: Void main() { TMOD=0x01; //设置T0工作方式,方式1 TH0=(65536-50000)/256; //置初值 TL0=(65536-50000)%256; ET0=1; //开启T0中断 TR0=1; //启动T0 EA=1; //开CPU中断 ... } Void timer0() interrupt 1 //T0中断程序 { TH0=(65536-50000)/256; //重置初值 TL0=(65536-50000)%256; ... } 在以上的程序中,T0的中断程序中直接对TH0和TL0进

文档评论(0)

docman126 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档