微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 向前辈们请教定时器T0在mode1模式下的计数误差问题?

向前辈们请教定时器T0在mode1模式下的计数误差问题?

时间:10-02 整理:3721RD 点击:
定时器T0在mode1的模式下工作,如果是计数时间到,这个时候会溢出,进入中断,在中断服务函数中会通过软件方式重新给TH0与TL0置初始值,但是问题是:置初始值需要执行TH0=0xxx、TL0=0xxx两条指令,就是说每一次装载初始值的过程中,前一次溢出与后一次溢出间的时间间隔,都会产生误差啊?想虚心请教下各位前辈,我的理解有么有问题,谢谢了!

那点误差不影响使用的

这个还真没自己琢磨过,貌似有道理,但你就这么用也没啥问题呀

感觉如果长时间使用的话,误差应该会累计,就比较严重了!个人理解了,呵呵

暑假了,想学习FPGA的同学们,可以利用暑假期间好好学习下FPGA,我们现在有款初学者的FPGA开发板利器,现在购买还有配套书籍赠送哦:
入门FPGA开发板:
https://item.taobao.com/item.htm ... &id=35911884243
赠送完全配套书籍:
https://item.taobao.com/item.htm ... amp;id=540865636294
有一定基础的同学,可以看下高端的开发板:
https://item.taobao.com/item.htm ... amp;id=520588767908
如果以上两款依然满足不了您的需求,更可以看下更高端的开发板:
https://item.taobao.com/item.htm ... &id=39939126777
有任何问题,欢迎旺旺 QQ来咨询哦!

正巧我也在学这个问题
一个比较简单的消误差的方法是
看中断之间执行时间是几条命令  然后换算成机器周期
然后在定时器计数初值上  加上或者减去这个几个机器周期
比如你原来的TL0是 0x18  现在改成比如 0x22 一类的 看你的语句几条了
然后这样做的目的就是减少了你的循环时间 跟你那个多出来执行语句的时间
刚好消掉了一部分 这样可以做到把误差可以控制到几us
如果想再精确的话 我也有一个比较笨的办法 就是你看你现在比如
你想是循环1s 但是实际上是1s+5us
那么你把你的TL0再调高1 按照上面的那个例子是0x23 然后
通过仿真得到 现在可能是1s-10us
那么你每执行10个 TL0 为0x22 的 就把 TL0改成0x21
然后执行5个 TL0 为0x21 在把TL0该厂0x22
因为5*10=10*5 这样就能做到1us误差以内。
但实际上这样也会带来新的延迟 所以还需要自己调一调
http://www.eeworld.com.cn/mcu/2014/0121/article_14945.html

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top