打印

定时不准的问题,请教各位大人!!感谢!!

[复制链接]
2696|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liyq|  楼主 | 2007-1-8 21:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在的单片机c程序中,有多个周期定时的任务。现在是这样做的,用timer0做了一个中断,1ms进一次中断,对g_t_timer++,g_t_timer是unsigned int型。 在主程序中,每个周期任务的开始时间timer=g_t_timer; 如果,g_t_timer-timer>任务周期,那么就开始执行周期性的任务。这个在多数情况下没问题,但是如果周期特别长时,如30s的时候,定时就不准了。怀疑是减的时候出了问题,比如溢出等等。请问存在这种可能吗?现在可以确定的是,1ms进中断是没问题的。我用的单片机是PIC18F系列的,编译器mcc18。另外,多个定时器之前切换会存在问题,或者那位大侠有更好的方法解决这类定时问题?多谢了!!
沙发
leezongfan| | 2007-1-8 22:25 | 只看该作者

直接在中断里判断时间。

使用特权

评论回复
板凳
tdh03z| | 2007-1-8 23:53 | 只看该作者

不知你的定时精度要达到多少

30S的任务如果需要比较高的精度的话,建议在中断中执行
主要看那个任务需要高的定时精度,1ms定时中断太频繁了

使用特权

评论回复
地板
liyq|  楼主 | 2007-1-9 10:58 | 只看该作者

我定时精度不是很高,加减10%的精度。

我程序是can总线通讯,有多个发送周期,比如100ms,200ms,10ms,1s等。但是有个任务的周期是30s。如果我统一用g_t_timer减timer来判断周期的的话,这个30s定时有时候就短了,可能只有15s。

使用特权

评论回复
5
yewuyi| | 2007-1-9 12:23 | 只看该作者

求所有周期的公约数……

使用特权

评论回复
6
tdh03z| | 2007-1-9 19:42 | 只看该作者

100ms为一个基准

我一般利用一个定时器产生几个时间标志位,在主程序中根据标志位执行相应的任务,执行完后清相应的时间标志位。100ms主程序应该循环了几十次了吧。对一般的任务应该足够了,30S又不是很长,你的程序判断肯定有问题

使用特权

评论回复
7
liyq|  楼主 | 2007-1-10 10:32 | 只看该作者

程序里面最小有10ms的定时,也有17ms的定时

现在可能是pwm的timer2中断,影响了timer0定时器。不开timer2定时器就没问题了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝