为什么51单片机的定时器计时不准确

如题所述

中断函数里面尽量少放语句,如果产生脉冲波形就只放一个

实在要放语句的话,可以增大计数的TH0和TL0,频率低一点输出的波形会更接近你想设置的值

比如

改成:

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-01-18
除了在中断里执行语句外,最主要的是晶振误差
第2个回答  2017-01-18
中断里执行语句了吧,
第3个回答  2017-01-18
进入、退出中断服务函数会有额外的系统开销,这个过程中的时间如果不计算进去的话肯定引起误差。
第4个回答  2017-01-18
用51单片机的定时器计时,相当是比较准的,但不是十分精确。要想与标准的北京时间对比,肯定是有误差的,特别是计时的时间越长,误差就越大,这是累计误差的结果。
一是单片机的晶振频率的误差,二是定时器计时的误差,这是主要的。
因平时,用定时器计时,并没有计时太长的时间,而且也是实验性的写程序就完了。
如果真的就想用单片机计时,并长时间当时钟计时,必须对定时器的计时误差进行补偿。
产生误差的主要原因是:虽然按定时计算的时间常数,但是,在单片机响应中断时,是需要时间的,从响应中断,进入中断服务子程序,到重写时间常数,再次计时,需要十几个机器周期的。对于一次中断,这个时间可以忽略了,但长期计时,累加的误差就很大了。
补偿的 方法是,中断服务子程序的第一行就要重写时间常数,再写其它语句。在中断重写时间常数时,低8位的数按计算的值加上8~12,再经过一段时间的计时,对照标准时间比较一下误差大小,逐步调整。本回答被网友采纳

51单片机程序定时器怎么这么不准确啊,求高手指点!
这是编译器造成的,你最好用Debug模式看看生成的汇编代码是什么摸样,比较一下你那三种方 式给TH0和TL0赋的是什么样的值。这是我试验的结果:4: TH0=-780\/256;C:0x0003 758CFD MOV TH0(0x8C),#0xFD 5: TL0=-780%256;C:0x0006 758AF4 MOV TL0(0x8A),#0xF4...

51单片机做电子时钟,为什么会比实际时间慢呢?
这个问题是这样的,这可能是因为你的单片机晶振的原因,如果是12MHz的话,中断值设置为3CB0,意味着50ms中断一次,if(t50mscnt==20)就可以实现1s的变化,前提是外部晶振频率为12MHz,你检查看看你的晶振频率为多少吧!

为什么51单片机定时器计数值取出来之后会比初值还小
你说的情况可能定时中断函数中没有重装初值或者干脆没有响应定时中断,所以造成计数值小于初值。这种情况有个前提,就是外部中断的产生没有人为干预,原因见下面。2、鉴于你每次读出的都是48,外部中断产生应该是自动的(很有规律),如果不是这样,比如说是手动产生外部中断或者说需要人为控制产生外部中断,...

51单片机定时器初值用变量设置定时不准确,为什么,求高手。TH0=(65536...
看一下C代码编译后的汇编代码就知道了,用变量方式很耗时,而直接用数字,编译器已经将算式的值算好了,代码里就是一个MOV指令而已,只需1us!!!TH0=(65536-2000)\/256; TL0=(65536-2000)%256;汇编后,只要2us就完事了。 而用变量方式,单片机很忙,计算几十乃至上百微妙才完事!15: TH0...

关于51单片机定时器的问题。我用郭天祥的51学习班做了一个电子表,发现...
0592的晶振要比12M的快,但是加上中断跳转指令执行的时间,还有中断执行的时间加在一起就慢了很多,要试着减掉这些时间,我得经验值是:中断不要很多,多了不是更增加执行时间了吗?我做时钟都是用最大的计时时间来减少中断插入的影响,这里用50ms,再减掉5毫秒就基本上差不多了。

单片机定时器做的时钟,定时不准。
单片机定时器做时钟,确切的说在环境温度变化不大的前提下,可以调整的很准,毕竟它是基于MHz级的晶振的,提两点建议,1】建议使用12MHz晶振;2】请注意对于不同的编程,定时器赋值时,如果需要50ms定时则绝不一定是赋值50000,也不一定是循环20次就是1S;你琢磨下这里的道理,你就明白了,具体方法是...

为什么单片机定时不准???
理论上没错。但是,定时10us,时间太短了。中断、返回,重新装入初始值,期间还要把一个变量加一,压栈...C语言,10us不够用的。汇编速度快,10us也未必够。根本没有时间去检测 if(Time10usFlag>=12) ,单片机净顾着忙活中断了。

51单片机的定时器的时间怎么算??
51单片机1个机器周期=12个时钟周期,频率为12MHZ,则一个机器周期为1US,具体到定时器程序就是,假如你想定1MS,那么单片机每次加一个一,就要过1US,那么1MS就要加1000次,所以用65535-1000=64535;再把64535换成16进制为FC17,把FC付给TH0,17给TLO,即可定时1MS,因为65535他就溢出进入中断。

51单片机定时器2的最短定时时间怎么有限制?
51单片机定时器,晶振是12MHZ、12分频,理论上最短定时时间1微秒,但是,CPU 运行指令 需要时间,只要中断服务程序 的运行时间 不超过定时器 定时时间,并且 有些余量,则就不成问题,如果没有余量,则中断结束 又进入 中断,如果 超过定时器 定时时间,则来不及 处理 定时也就不准确了。用 C 语言...

单片机语音闹钟误差分析
1. 单片机时钟源的精度误差。单片机的时钟源是其运行的核心,其精度直接影响计时准确性。如果时钟源的精度不高,就会导致计时误差。此外,单片机的时钟源易受温度和电源的影响,如果条件不稳定,也会影响计时准确性。单片机时钟源的精度误差分析:单片机内部使用的振荡器可能受到制造工艺和材料的影响,使得其...

相似回答