单片机定时器中断后计数器和中断再进入
程序员文章站
2022-03-13 19:27:59
...
1、单片机定时器中断后计数器是否还会计数
解决:单片机定时器中断后计数器还是会计数的,如果重新赋值,会按照设置的时间进行计时。如果没有,则从0开始。
2、单片机在执行定时器中断时,是否在没执行当前中断情况再次执行定时器中断(中断嵌套?)
解决:中断在执行时,如果又有一个中断产生,将不会进入中断函数,知道当前中断执行结束后,才允许下一个新的中断进入。
总结:定时器中断在执行中断过程中,计数器一直计数,但是产生的中断不能进入中断函数。只有上一个中断结束后,才会发生新的中断进入。
测试:
单片机:stc12c5a60s2
软件:keil
串口软件:stc-isp
思路:在定时中断执行函数中使用串口打印0-9,采用两次打印,它们之间间隔1s,定时中断时间是10ms。通过查看串口发送的数据,如果是相同的数字两两相邻,表示延迟1s过程中中断没有再次进入;如果数字是连续而且很快显示出来的,表示在延迟1s的过程中多次进入了中断。
代码:
void time0_inter() interrupt 1{
//2msʱ¼ä
TF0 = 0;
TH0 = 0xF8;
TL0 = 0x30;
adc.transFlag++;
if(adc.transFlag>=10){
adc.transFlag=0;
}
uart0_send_byte('0'+adc.transFlag);
//²âÊÔ¶¨Ê±ÖжÏʱÊÇ·ñ»á¼ÌÐø¼Æʱ
delay1s();
uart0_send_byte('0'+adc.transFlag);
//´ò¿ªADC
adc_switch(ADC_OPEN);
}
结果:
由结果可以看出:定时器在延迟1s的过程中没有多次进行定时中断函数执行。
可以得出的结论是:
如果在定时中断执行函数中处理的时间超过定时时间,那么会出现中断丢失的问题,即需要进行中断处理时,由于上一个中断还未结束,失去这个时间点需要处理执行指令的机会。
如果中断函数执行处理的时间小于定时中断时间,那么就能够在下一次中断到来之前结束本次中断,这样新来的中断就能够执行需要的处理指令。