Board logo

标题: 定时器中断 [打印本页]

作者: benbentl    时间: 2011-3-19 23:48     标题: 定时器中断

请教大家一个问题:
MC9S12DP256单片机
我用了一个定时器溢出中断
如果中断函数里的程序的运行时间大于中断周期,会出现什么样的结果呢?
也就是说,进入中断以后,中断里面的程序还没运行完的时候,定时器又产生下一次中断了,这时程序怎么执行啊?是继续执行还是从中断的第一个语句开始执行啊?
作者: hlxldb    时间: 2011-3-21 08:37

你这样的程序设计本身是不合理的,中断函数里不应执行过多的任务,中断函数一般完成清中断标志位,设置状态标志位,而把主要的任务教给主函数
作者: benbentl    时间: 2011-3-22 10:58

可是我想做PID运算,而PID的计算不是需要循环的吗?所以我把PID的计算程序放到了中断函数里。
作者: hlxldb    时间: 2011-3-22 13:18

3# benbentl PID可是涉及到乘法运算的了,乘法运算不是单片机的强项,不应在中断里进行这些运算,可以设一个标志位
作者: benbentl    时间: 2011-3-22 15:52

版主,我现在的思路是这样的:
用一个定时器溢出中断,进入中断的时候就开始采样,并与设定值进行比较,进行PID计算,每进一次中断就进行一次采样并进行一次PID的计算,直到实际值和目标值的偏差达到我设定的精度。
请版主帮我看看我这个思路对不对。

按照版主所说,我可不可以这样理解:在中断里设一个标志位,比如说当进入中断500次后,我就设flag=1,而在主函数里有类似这样的语句:if(flag==1){//PID函数}
是这样吗?
作者: hlxldb    时间: 2011-3-23 11:08

5# benbentl 嗯,我的想法是这样的没错,具体的你可以试下,看下效果会不会更好
作者: transmission    时间: 2011-3-24 08:30

你的pid计算肯定要放for循环里头,中断里头做很少的计算要不占用Ram会很多吧。中断只是做个Pid计算的频率控制。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0