我用STC89C52RC做的一个测温湿度的节点,测试发现定时不准,我不知道为什么。我想问下面3个问题:
【1】我的程序和实现是否有问题?
【2】这个误差是否会与环境温度有关系? (节点测得的温度就是它的工作的环境温度,传感器和单片机、晶振都在一起。)
【3】除了上面2点,可能造成这个问题的原因还有什么?
我是这样实现的:
【1】用Timer0,计时50ms,晶振11.0592MHz
【2】在Timer0的中断程序里面,计数每20个50ms就是1秒,然后每到一定时间(比如5分钟)就将 sendDataFlag置1一次,
【3】main函数里面是while的死循环,如果sendDataFlag为1,就向上位机发送一次温湿度值,并把sendDataFlag置0。
下面上位机收到的结果,
我们可以看到有段时间7:29至8:19这段时间定时比较准,每5分钟一次
但是6:43至7点23这段时间定时就非常不准。
在我以往的试验中,也有这样不准的情况出现,每5分钟就会有1秒左右的误差。下面是昨晚试验的数据:
请大家指点一下,我迷惑了很久了。谢谢先!
可以闰秒,隔一段时间对计时修正,有条件用电网作时钟源,精度很高
-----------------------------------------------------------------------
感谢楼上的回复,不过我还是想找出问题的原因来。
我总感觉应该不是温度的引起的,因为同样在19度左右,有比较精确的情况出现,也有误差较大的情况出现。
请大家帮我看看我的定时器使用有没有问题?比如初始化定时器、中断程序等。
谢谢
发送数据的函数如果时间大于50ms就会出现 如果程序在发送数据 此时恰好定时器进入中断并且T刚好也加到20 那么发送完数据再进入中断时就错过了这次的判断
》= 已经包含了== 不会多花时间的 只要检测到==20就会进入中断 如果检测不到20 才会继续检测21.22.23 ....
你如果写==如果检测不到20, 就会隔20次才会再次检测 ;而》=是检测不到20,就隔1次再检测
一周热门 更多>