51单片机中中断服务程序占用时间不?

来源:百度知道 编辑:UC知道 时间:2024/07/03 00:38:51
比如想计数器计数10个周期,在中断程序设置加1至10。
如果这样会占用时间的话如何保证实时性?尽量不用中断服务程序,改用查询等待吗?
打错了,是计时器不是计数器。
还有就是能否在中断程序中关闭计时器

答:你的意思是定时10个周期,每一个周期中断一次,在中断程序里加1 至10吗?
那么加到10以后呢?接下来干什么?接下来的程序也在中断程序里吗?照你的程序,不会影响计时时间,只是在加到10以后,执行下一步工作时要多一些中断程序用去的时间。这是因为中断程序在执行加够10以后的程序时,前几句程序已经用一些时间。像这个在一般的设计中都不考虑。
中断函数不影响定时器的工作,定时器是完全独立的。
可以在中断程序中关闭定时器。

在某种意思上,中断更具有实时性,中断处理是根据程序段的大小花费时间的,中断程序段如果比定时时间还长,那个这个定时在主程序里失去意义了;比如中断定时为10个机器周期,而中断程序段需要执行11个机器周期,那么意味着紧着的中断程序失去了理论的实时性;CPU无法在设计的要求下执行指令,所以,一般情况下,要考虑程序段是否能在中断定时时间内完成;若能完成,那么使用非自动赋值时也存在时间差异,两个高低8位的赋值语句也将至少浪费两个机器(还需要放在中断的最前面),所以要求时间较为精确时,一定要使用自动装载方式,若是使用非中断方式,C语言程序是无法保证的,要使用汇编,一个一个指令进行计算。

而所谓的查询等待,CPU在这个时间段内就执行累加或自减计数,不做任何工作,这个时间就被白白的浪费了;

中断程序中可以关闭定时器的,在主程序里设置一个变量,不断地查询这个变量是否为要关闭定时器的值,而中断程序可以为这个变量赋值。
如:...while(1)
{ if(a==1){TR0=0;ET0=0;EA=0;}}
interrupt 1
{i++;if(i==1000)a=1;}

中断程序是肯定要占用时间的,在中断中可以关闭定时器的;
一般可以在中断中做计数,累加,设置标志位,到主循环里面查询比较好,
当然主要是看你要求的时间精度以及允许的误差了,如果不是特别高的话也是没太大影响的,我用t1技术,t0定时,可以测65000HZ内的频率,误差不查过50,反正可以达到我的频率测量效果了

如果要保证实时性,那就要对每条指令的执行时间相当的了解,只有这样才能够准确地进行时间的设定;
如果改用