单片机数字时钟比实际时间的慢啊怎么办?
4个回答
展开全部
单片机是利用定时器实现计时的,根据定时器的定时计算出的时间常数,是理想状态下的数值。
如晶振频率是12M,用定时器T0,按定时20ms 计算的时间常数
TH0=(65536-20000)/256=0XB1
TL0=(65536-20000)%256=0XE0
如果按这个数写程序,电子钟计时的时间肯定就比实际的时间慢。当然了,这需要时间长了,才能体现出来,如果只是计时几个小时是比较不出来的。必须是长时间的计时,比如计时一周以上就体现出来计时的误差了。
这是因为,单片机计时的误差还是比较小的,假如一天慢1秒,那计时一周了,就慢7秒,才会发现的。
为什么会慢呢,是因为定时到,要中断,单片机从响应中断,到在中断程序中重写时间常数,才能重新计时的,这是需要时间,只是这时间只有几个微秒。就产生了计时误差了。可是这向微秒的误差,累计一周后就累计成几秒了。
要计时比较准确的还是有办法的,就是给时间常数的TL0加几个数,来补偿误差。
通常加8就行,不过,还需要长时间的计时来校正。
在中断程序中的时间常数改为
TH0=0XB1;
TL0=0XE8; //这低8位加8,补偿误差
这样补偿后,还有误差,再改这低8位,慢了就加,快了就减
如晶振频率是12M,用定时器T0,按定时20ms 计算的时间常数
TH0=(65536-20000)/256=0XB1
TL0=(65536-20000)%256=0XE0
如果按这个数写程序,电子钟计时的时间肯定就比实际的时间慢。当然了,这需要时间长了,才能体现出来,如果只是计时几个小时是比较不出来的。必须是长时间的计时,比如计时一周以上就体现出来计时的误差了。
这是因为,单片机计时的误差还是比较小的,假如一天慢1秒,那计时一周了,就慢7秒,才会发现的。
为什么会慢呢,是因为定时到,要中断,单片机从响应中断,到在中断程序中重写时间常数,才能重新计时的,这是需要时间,只是这时间只有几个微秒。就产生了计时误差了。可是这向微秒的误差,累计一周后就累计成几秒了。
要计时比较准确的还是有办法的,就是给时间常数的TL0加几个数,来补偿误差。
通常加8就行,不过,还需要长时间的计时来校正。
在中断程序中的时间常数改为
TH0=0XB1;
TL0=0XE8; //这低8位加8,补偿误差
这样补偿后,还有误差,再改这低8位,慢了就加,快了就减
深圳市兴威帆电子技术有限公司
2020-04-21 广告
2020-04-21 广告
实时时钟模块可以找深圳市兴威帆电子技术有限公司,本公司具有经验丰富的开发工程师和应用工程师,致力于公司自主知识产权IC等产品的研发和技术支持,已开发出多款成熟的产品并大量生产、销售及出口,我公司高精度实时时钟模块产品获得多项国家专利,打破了...
点击进入详情页
本回答由深圳市兴威帆电子技术有限公司提供
展开全部
请问是专门用的芯片吗?比如DS1302?一般来说这种情况不大可能。
还是用定时器模拟的一个时钟。如果是用定时器模拟的,而且你又是用C语言编写的,你可能忽略了程序执行每条语句都要花费一定的时间。在汇编中这时间相对来说还是比较好调整,在C中你要看时间的话,可以在编译中先设置好晶振,再利用断点,这样可以较准确的判断出各个部分的时间。这种程序你能模拟个大概,知道原因就OK啦。
还是用定时器模拟的一个时钟。如果是用定时器模拟的,而且你又是用C语言编写的,你可能忽略了程序执行每条语句都要花费一定的时间。在汇编中这时间相对来说还是比较好调整,在C中你要看时间的话,可以在编译中先设置好晶振,再利用断点,这样可以较准确的判断出各个部分的时间。这种程序你能模拟个大概,知道原因就OK啦。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这要分外部时钟芯片还是内部RTC了,如果不是你的程序设计有漏洞,就是晶振精度不好了。
另外如果两种情况都不是,用timer计时的,就要注意计时方式,晶振大小选择等等,没有经验的人,timer要设置reload功能。
另外如果两种情况都不是,用timer计时的,就要注意计时方式,晶振大小选择等等,没有经验的人,timer要设置reload功能。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多半是你的程序问题,如果写的好的话,基本上感觉不到时间慢。你用的是什么方法写的时钟????
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询