打印

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

[复制链接]
2953|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楼,感觉这个方法可行,只是具体怎么处理还需要仔细考虑,感觉比较复杂。还有没有更好的方法?如果没有只能用这个方法了。

使用特权

评论回复
5
流行音乐|  楼主 | 2010-2-5 16:09 | 只看该作者
由于系统 EMC 的原因,只能用 4MHz 的晶振,没办法啊。

使用特权

评论回复
6
westsfw| | 2010-2-5 16:47 | 只看该作者
如果可以确定方向的话,其他的细节论坛和笔记里应该有一大把,可以参考下

使用特权

评论回复
7
chunyang| | 2010-2-5 20:41 | 只看该作者
最好采用定时/计数器时钟源无12分频的型号,现在很多单周期51都是这么设计的,可以用很低的频率取得高频时钟的同等效果。

使用特权

评论回复
8
流行音乐|  楼主 | 2010-2-6 12:13 | 只看该作者
我在网上问了一个人,还把2楼的方法告诉他。
他说有更好的方法,可以说的上是完美的方法,但目前他还没打算把这个方法告诉我。
也不知道那个人说的是真的还是假的,不过我觉得确实可能有更好的方法,是否完美就不知道了。
他还对2楼的方法给出了看法,说该方法如果定时周期变化还得修改代码结构,而不是简单的修改一两个数据。
确实是这样啊,所以我对那个人的说的话感觉比较可信,只可惜他不舍得把好的方法公开。

我还是希望各位21IC的高手帮帮忙吧。我也在寻找更好的方法。

使用特权

评论回复
9
szsfy| | 2010-2-6 13:02 | 只看该作者
晕倒,都知道误差了多少,还没有办法矫正???

使用特权

评论回复
10
peigang| | 2010-2-6 13:54 | 只看该作者
回8楼
那个人好饿啊

使用特权

评论回复
11
红心J| | 2010-2-6 14:30 | 只看该作者
(1)4M只是标称值,实际值可能偏离一些,误差是不可避免的
(2)既然设计电子钟,如果采用12分频计数的51MCU,就应该选用适当的晶振,反过来说,一定要用4M的晶振,说明精度要求不高,允许误差
(3)7楼单时钟计数51MCU的建议是最恰当的解决方法

使用特权

评论回复
12
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个),怎么改都是准的。

使用特权

评论回复
13
westsfw| | 2010-2-6 16:23 | 只看该作者
12L同志的想法还是不错嘀,感觉处理还不是很复杂,可以试试

使用特权

评论回复
14
流行音乐|  楼主 | 2010-2-8 00:19 | 只看该作者
谢谢,我试试吧。

使用特权

评论回复
15
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。

使用特权

评论回复
16
anmo1015| | 2010-12-20 20:30 | 只看该作者
都差不多吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

375

帖子

1

粉丝