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

 我来答
意法半导体(中国)投资有限公司 2020-01-15
展开全部
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
lycdl
高粉答主

推荐于2017-10-15 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4786万
展开全部
单片机是利用定时器实现计时的,根据定时器的定时计算出的时间常数,是理想状态下的数值。
晶振频率是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 广告
实时时钟模块可以找深圳市兴威帆电子技术有限公司,本公司具有经验丰富的开发工程师和应用工程师,致力于公司自主知识产权IC等产品的研发和技术支持,已开发出多款成熟的产品并大量生产、销售及出口,我公司高精度实时时钟模块产品获得多项国家专利,打破了... 点击进入详情页
本回答由深圳市兴威帆电子技术有限公司提供
百度网友987329a
2012-06-13 · TA获得超过5050个赞
知道小有建树答主
回答量:949
采纳率:50%
帮助的人:848万
展开全部
请问是专门用的芯片吗?比如DS1302?一般来说这种情况不大可能。
还是用定时器模拟的一个时钟。如果是用定时器模拟的,而且你又是用C语言编写的,你可能忽略了程序执行每条语句都要花费一定的时间。在汇编中这时间相对来说还是比较好调整,在C中你要看时间的话,可以在编译中先设置好晶振,再利用断点,这样可以较准确的判断出各个部分的时间。这种程序你能模拟个大概,知道原因就OK啦。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5d657c065
2012-06-14
知道答主
回答量:47
采纳率:0%
帮助的人:34.5万
展开全部
这要分外部时钟芯片还是内部RTC了,如果不是你的程序设计有漏洞,就是晶振精度不好了。
另外如果两种情况都不是,用timer计时的,就要注意计时方式,晶振大小选择等等,没有经验的人,timer要设置reload功能。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Memecaoyu
2012-06-19 · TA获得超过157个赞
知道小有建树答主
回答量:244
采纳率:100%
帮助的人:104万
展开全部
多半是你的程序问题,如果写的好的话,基本上感觉不到时间慢。你用的是什么方法写的时钟????
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式