① 单片机定时器做的时钟,定时不准。
单片机定时器做时钟,确切的说在环境温度变化不大的前提下,可以调整的很准,毕竟它是基于MHz级的晶振的,提两点建议,1】建议使用12MHz晶振;2】请注意对于不同的编程,定时器赋值时,如果需要50ms定时则绝不一定是赋值50000,也不一定是循环20次就是1S;你琢磨下这里的道理,你就明白了,具体方法是,找一个比较准的时钟,比如在线时钟,每10小时记录一次找出规律,细细调整,毕竟它是在微秒范围内进行调整,你肯定行的,祝成功。
② 51单片机定时器问题,定时不精准,差不多30s就有一秒的误差,
65536-46080=19456个机器周期。
你使用11.0592M,如果单片机是12T的话,那就是每秒有11059200/12=921600个周期
19456/921600=0.0211111秒
再加上你在中断函数中到TH0,TL0赋值的操作,包括,跳转,关键数据入栈,TH0,TL0赋值等的时间。
换句话说,你一次中断大概是0.021120秒
接下来,你就自己算吧
③ 51单片机定时器中断不准确,怎么解决
任何缺岁器件都会有偏差,晶振有偏差很正常。不过这显示出来的偏差也离谱了点。按大扮明目前的制造工艺一般的晶振精度都很容易做到数十ppm,偏移到数百ppm要么是环境太差要么是器件有问题,或者是测量不准^_^
这个显示值应该只是软件根据波特率估算出来的,本身并不严格。
如果人类都能感觉到定时滚告器时间不准确了,那问题多半出在软件方面。
如果真的要求高精度定时,需考虑专用的器件。
④ 单片机数字时钟比实际时间的慢啊怎么办
单片机是利用定时器实现计时的,根据定时器的定时计算出的时间常数,是理想状态下的数值。
如晶振频率是12M,用定时器T0,按定时20ms 计算的时间常数
TH0=(65536-20000)/256=0XB1
TL0=(65536-20000)%256=0XE0
如果按这个数写程序,电子钟计时的时间肯定就比实际的时间慢。当然了,这需要时间长了,才能体现出来,如果只是计时几个小时是比较不出来的。必须是长时间的计时,比如计时一周以上就体现出来计时的误差了。
这是因为,单片机计时的误差还是比较小的,假如一天慢1秒,那计时一周了,就慢7秒,才会发现的。
为什么会慢呢,是因为定时到,要中断,单片机从响应中断,到在中断程序中重写时间常数,才能重新计时的,这是需要时间,只是这时间只有几个微秒。就产生了计时误差了。可是这向微秒的误差,累计一周后就累计成几秒了。
要计时比较准确的还是有办法的,就是给时间常数的TL0加几个数,来补偿误差。
通常加8就行,不过,还需要长时间的计时来校正。
在中断程序中的时间常数改为
TH0=0XB1;
TL0=0XE8; //这低8位加8,补偿误差
这样补偿后,还有误差,再改这低8位,慢了就加,快了就减
⑤ 为什么51单片机的定时器计时不准确
中断函数里面尽量少放语句,如果产生脉冲波形就只放一个
⑥ stc15w408as单片机定时器1定时时间不准,要3个NOP定时器1才加一;定时器0正常
stc15w408as-sop16封装单片机,在使用定时器0时正常,在使用定时器1时定时时间不准(使用烧录软件的“定时器计算器”生成的程序复制进去也不准);晶振举卜11.0592m,1t模式,定时器12分频,在debug时,一个NOP占用一个时钟周期,TR1=1;后,定时加一,再往后面雀橘要3个nop定时器才加一,望高手大神指教怎么回事?正常不是要12个nop定时器采才加1的吗?
由衷地说,谢谢你!STC官方文档郑重说明,stc15w408as系列顷答团没有定时器1,我现在正用这款单片机,用定时器1想都没想。
⑦ 51单片机内置定时器制作计时的误差怎么产生的。
首先,单片机定时器的记数的频率是由单片机的时钟频率所决定的,而单片机的时钟频率是由外部晶振或内部震荡电路所决定的。不管是外部晶振还是内部晶振,本身都是有误差的!然后又受外部的温度、湿度、电磁干扰的影响,他们的频率也是在变化的。这是无法避免的。然后,人在操作时也是有误差的,例如51单片机工作在模式1的16位的定时器。当发生定时中断后,要重装定时器的初值,而执行这两条指令也是要花时间的。这个误差很小,可以忽略。最后就是当你 的中断函数过长,其执行时间已经超过了定时周期,这时候将会丢失中断。因为在发生下一次中断的时候,而CPU还在执行本次的中断服务程序。由于同优先级的中断不能被打断,所以就会丢失中断信号,这是产生了错误,而非误差,所以中断函数尽量短!