欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单片机定时器中断后计数器和中断再进入

程序员文章站 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的过程中没有多次进行定时中断函数执行。

可以得出的结论是:

如果在定时中断执行函数中处理的时间超过定时时间,那么会出现中断丢失的问题,即需要进行中断处理时,由于上一个中断还未结束,失去这个时间点需要处理执行指令的机会。

如果中断函数执行处理的时间小于定时中断时间,那么就能够在下一次中断到来之前结束本次中断,这样新来的中断就能够执行需要的处理指令。