~~~ 延时不准,请大家来帮忙啊!!!~~~ 我头大了好久了,谢谢先!!

2020-02-04 09:19发布

我用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秒左右的误差。下面是昨晚试验的数据:



请大家指点一下,我迷惑了很久了。谢谢先!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
53条回答
haozi007
1楼-- · 2020-02-07 05:42
回复【15楼】huayuliang  花生
咋不见读取温度的部分?
既然你自己都怀疑了,干脆去掉读取温湿度部分,发送假数据看看时间还准不准。
话说这么长的时间间隔,如果不采用rtc的话,还不如由上位机发送请求呢。。
-----------------------------------------------------------------------

温度读取部分无关,我就没放上来干扰视线了。

我手头有块12c887的RTC,一个小时要慢几分钟,也不知道为何。

我认为5分钟间隔不算太长,应该可以做到精确的。
haozi007
2楼-- · 2020-02-07 10:11
看看这篇文章 用c51语言实现单片机高精度定时的新算法ourdev_688564MYHN6Y.pdf(文件大小:715K) (原文件名:用C51语言实现单片机高精度定时的新算法.pdf)
yao1
3楼-- · 2020-02-07 10:34
回复【16楼】Dalong357  
看你程序中计数器判断的时候改为21和senddatainterval+1,结果可能会稍微好的……
-----------------------------------------------------------------------

这样就在毫秒和秒级别都多了一次循环出来,不是吗?这样会更慢吧?
bbs2009
4楼-- · 2020-02-07 14:05
回复【31楼】bbs2009  
还是愚见:
1. 必须给tl0   赋值  。
2. 必须修正    0x4c00。不然一定慢 。

-----------------------------------------------------------------------
感谢您的回复。

能否解释一下第一点的原因?或者说如果不赋值给TL0会怎样? (千万别说定时会慢哦  呵呵)

我想当然的认为不重新赋值计数器还是从0开始计数的。


另外,怎么没有18楼和25楼? 奇怪  呵呵
haozi007
5楼-- · 2020-02-07 14:26
 精彩回答 2  元偷偷看……
haozi007
6楼-- · 2020-02-07 14:41
看看30楼我发的那篇文章看来你只能修正TH0 TL0了

一周热门 更多>