问一个 4MHz 51 单片机作电子钟的问题

[复制链接]
3772|15
 楼主| 流行音乐 发表于 2010-2-5 14:53 | 显示全部楼层 |阅读模式
指令周期是 12/4MHz=3us,电子钟以秒为单位计时。
如何才能做到软件的每天误差小于 1 秒?晶振误差不考虑。
如果定时器以 3ms 中断一次,那么 333.33333 次中断就是一秒,
如果用 333 来近似,那么软件每天大约会快 80 秒。
有没有好的办法减小每天的误差啊?最好能有代码参考一下,汇编或C都可以。
westsfw 发表于 2010-2-5 15:27 | 显示全部楼层
俺坐沙发上误导一下:
如果只是做个电子钟,没有严格的要求,3ms中断一次的情况下,在333、667和1000次中断的时候分别处理,然后再循环,显示上看不出来,这样得出来的分以上是准确的,嘻嘻,俺的脑力现在只能到这种程度了,俺也等着高人们的方法
HWM 发表于 2010-2-5 15:30 | 显示全部楼层
选用12MHz或6MHz晶振,没必要舍近求远。
 楼主| 流行音乐 发表于 2010-2-5 15:36 | 显示全部楼层
本帖最后由 流行音乐 于 2010-2-5 16:07 编辑

谢谢2楼,感觉这个方法可行,只是具体怎么处理还需要仔细考虑,感觉比较复杂。还有没有更好的方法?如果没有只能用这个方法了。
 楼主| 流行音乐 发表于 2010-2-5 16:09 | 显示全部楼层
由于系统 EMC 的原因,只能用 4MHz 的晶振,没办法啊。
westsfw 发表于 2010-2-5 16:47 | 显示全部楼层
如果可以确定方向的话,其他的细节论坛和笔记里应该有一大把,可以参考下
chunyang 发表于 2010-2-5 20:41 | 显示全部楼层
最好采用定时/计数器时钟源无12分频的型号,现在很多单周期51都是这么设计的,可以用很低的频率取得高频时钟的同等效果。
 楼主| 流行音乐 发表于 2010-2-6 12:13 | 显示全部楼层
我在网上问了一个人,还把2楼的方法告诉他。
他说有更好的方法,可以说的上是完美的方法,但目前他还没打算把这个方法告诉我。
也不知道那个人说的是真的还是假的,不过我觉得确实可能有更好的方法,是否完美就不知道了。
他还对2楼的方法给出了看法,说该方法如果定时周期变化还得修改代码结构,而不是简单的修改一两个数据。
确实是这样啊,所以我对那个人的说的话感觉比较可信,只可惜他不舍得把好的方法公开。

我还是希望各位21IC的高手帮帮忙吧。我也在寻找更好的方法。
szsfy 发表于 2010-2-6 13:02 | 显示全部楼层
晕倒,都知道误差了多少,还没有办法矫正???
peigang 发表于 2010-2-6 13:54 | 显示全部楼层
回8楼
那个人好饿啊
红心J 发表于 2010-2-6 14:30 | 显示全部楼层
(1)4M只是标称值,实际值可能偏离一些,误差是不可避免的
(2)既然设计电子钟,如果采用12分频计数的51MCU,就应该选用适当的晶振,反过来说,一定要用4M的晶振,说明精度要求不高,允许误差
(3)7楼单时钟计数51MCU的建议是最恰当的解决方法
84335262 发表于 2010-2-6 15:59 | 显示全部楼层
本帖最后由 84335262 于 2010-2-6 16:01 编辑

所谓更好的方案,就是按2楼的方法逆向一下。2楼的方法是积累到后面去处理,所以积累量不同就处理不同。但想一下如果在早期处理的话就不用变化了。具体如下:
把处理周期改为1MS处理。这样得到需要333.333个指令周期(假设你用的是16位计数器,8位的把1MS改小)。先四舍五入为333。这样每个中断还欠0.333个指令周期。中断中设一变量。一进中断就+1。最后在中断里嵌入遇到变量等于3进行一次清零动作,刚好把欠的0.333个指令补上(这样的计算必须要把进中断的时间、中断里的浪费的时间比如重新设置中断,开中断等除掉)。这样每次中断都是得到理论上的1MS,1S只要是1000个MS。理论最大的误差都只有1US或2US。定时周期在1MS上去改动(比如定0.5秒就是500个,1秒就是1000个),怎么改都是准的。
westsfw 发表于 2010-2-6 16:23 | 显示全部楼层
12L同志的想法还是不错嘀,感觉处理还不是很复杂,可以试试
 楼主| 流行音乐 发表于 2010-2-8 00:19 | 显示全部楼层
谢谢,我试试吧。
vrgood 发表于 2010-2-8 11:35 | 显示全部楼层
本帖最后由 vrgood 于 2010-2-9 14:32 编辑

1.对于4M/12分频,应该可以做到精确的1分钟吧,然后精确的小时。。。。。。。
2.秒单元用333来近似吧,在1分钟内误差也就0.1%
3.分单元不要采用秒单元计到60加1,直接根据机器周期精确计算,当分单元加1时,对秒单元清0。
anmo1015 发表于 2010-12-20 20:30 | 显示全部楼层
都差不多吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

375

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部