单片机数字时钟比实际时间的慢啊怎么办?

2024年11月16日 03:44
有4个网友回答
网友(1):

单片机是利用定时器实现计时的,根据定时器的定时计算出的时间常数,是理想状态下的数值。
如晶振频率是12M,用定时器T0,按定时20ms 计算的时间常数
TH0=(65536-20000)/256=0XB1
TL0=(65536-20000)%256=0XE0
如果按这个数写程序,电子钟计时的时间肯定就比实际的时间慢。当然了,这需要时间长了,才能体现出来,如果只是计时几个小时是比较不出来的。必须是长时间的计时,比如计时一周以上就体现出来计时的误差了。
这是因为,单片机计时的误差还是比较小的,假如一天慢1秒,那计时一周了,就慢7秒,才会发现的。
为什么会慢呢,是因为定时到,要中断,单片机从响应中断,到在中断程序中重写时间常数,才能重新计时的,这是需要时间,只是这时间只有几个微秒。就产生了计时误差了。可是这向微秒的误差,累计一周后就累计成几秒了。
要计时比较准确的还是有办法的,就是给时间常数的TL0加几个数,来补偿误差。
通常加8就行,不过,还需要长时间的计时来校正。
在中断程序中的时间常数改为
TH0=0XB1;
TL0=0XE8; //这低8位加8,补偿误差
这样补偿后,还有误差,再改这低8位,慢了就加,快了就减

网友(2):

请问是专门用的芯片吗?比如DS1302?一般来说这种情况不大可能。
还是用定时器模拟的一个时钟。如果是用定时器模拟的,而且你又是用C语言编写的,你可能忽略了程序执行每条语句都要花费一定的时间。在汇编中这时间相对来说还是比较好调整,在C中你要看时间的话,可以在编译中先设置好晶振,再利用断点,这样可以较准确的判断出各个部分的时间。这种程序你能模拟个大概,知道原因就OK啦。

网友(3):

这要分外部时钟芯片还是内部RTC了,如果不是你的程序设计有漏洞,就是晶振精度不好了。
另外如果两种情况都不是,用timer计时的,就要注意计时方式,晶振大小选择等等,没有经验的人,timer要设置reload功能。

网友(4):

多半是你的程序问题,如果写的好的话,基本上感觉不到时间慢。你用的是什么方法写的时钟????