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

[复制链接]
 楼主| 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&gt任务周期,那么就开始执行周期性的任务。这个在多数情况下没问题,但是如果周期特别长时,如30s的时候,定时就不准了。怀疑是减的时候出了问题,比如溢出等等。请问存在这种可能吗?现在可以确定的是,1ms进中断是没问题的。我用的单片机是PIC18F系列的,编译器mcc18。另外,多个定时器之前切换会存在问题,或者那位大侠有更好的方法解决这类定时问题?多谢了!!
leezongfan 发表于 2007-1-8 22:25 | 显示全部楼层

直接在中断里判断时间。

  
tdh03z 发表于 2007-1-8 23:53 | 显示全部楼层

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

30S的任务如果需要比较高的精度的话,建议在中断中执行<br />主要看那个任务需要高的定时精度,1ms定时中断太频繁了
 楼主| liyq 发表于 2007-1-9 10:58 | 显示全部楼层

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

我程序是can总线通讯,有多个发送周期,比如100ms,200ms,10ms,1s等。但是有个任务的周期是30s。如果我统一用g_t_timer减timer来判断周期的的话,这个30s定时有时候就短了,可能只有15s。
yewuyi 发表于 2007-1-9 12:23 | 显示全部楼层

求所有周期的公约数……

  
tdh03z 发表于 2007-1-9 19:42 | 显示全部楼层

100ms为一个基准

我一般利用一个定时器产生几个时间标志位,在主程序中根据标志位执行相应的任务,执行完后清相应的时间标志位。100ms主程序应该循环了几十次了吧。对一般的任务应该足够了,30S又不是很长,你的程序判断肯定有问题
 楼主| liyq 发表于 2007-1-10 10:32 | 显示全部楼层

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

现在可能是pwm的timer2中断,影响了timer0定时器。不开timer2定时器就没问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部