天天看點

單片機定時器中斷後計數器和中斷再進入

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的過程中沒有多次進行定時中斷函數執行。

可以得出的結論是:

如果在定時中斷執行函數中處理的時間超過定時時間,那麼會出現中斷丢失的問題,即需要進行中斷處理時,由于上一個中斷還未結束,失去這個時間點需要處理執行指令的機會。

如果中斷函數執行處理的時間小于定時中斷時間,那麼就能夠在下一次中斷到來之前結束本次中斷,這樣新來的中斷就能夠執行需要的處理指令。

繼續閱讀