------------aolin源贴:不要外加时钟芯片,只用标准51和12MHz的晶体,有没有人做成过电子钟?不能有误差的,即不能有算法上带来的误差, 时钟振荡频率不准所引起的误差不计.有朋友实现过吗?------------
楼主是做汽车音响,实时时钟只是MCU的一个副业,主要功能还是收音、CD或者DVD等控制,由于已经有了MCU,所以RTC太浪费。至于功耗这里不讨论,实际上用51的肯定不是做高端汽车音响的。
有些人会选择双时钟的MCU(比如主晶振4M,副振32.768K),但是多一个晶振就多0.4RMB,对于一些吝啬鬼还是不能接收,用单晶振。
对于单晶振做实时时钟,最简单的算法是不重装,不要置初值,因为是全硬件操作,不会引起算法误差。
有的人会说这样得不到标准1S时间,其实对于汽车音响来说1S到底是999ms还是999999us还是1010ms其实问题倒是不大,看不出来。aolin的回帖中很多人就在关注1S要准时,其实大可不必。
但是如果别人用同样的晶振走1个月误差2分钟,而你是误差1小时的话就绝对不一样了。
只要你有装定时器动作,对于51来说就会引起误差,中断需要时间,置初值需要时间。针对置初值的做法可能会有以下几种问题: 1、不考虑置初值的时间和可能发生的中断处理需要的时间。 2、考虑置初值的时间,但是没有考虑可能发生的中断处理需要的时间。 【27楼: 这个很简单的... 把重装载时的指令算进去或者用个合适的重装值,比如:0X2000,显然TL0就不用管它了,还有其它方法... 】 3、考虑置初值的时间,置初值的时候,先读取初值(因为定时器溢出后,会自动从0开始重新走),但是还会存在比较的时候发生外部中断的情况,尤其使用keilc的情况。
以上回答不知道大家有没有不同看法,欢迎讨论! |