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的過程中沒有多次進行定時中斷函數執行。
可以得出的結論是:
如果在定時中斷執行函數中處理的時間超過定時時間,那麼會出現中斷丢失的問題,即需要進行中斷處理時,由于上一個中斷還未結束,失去這個時間點需要處理執行指令的機會。
如果中斷函數執行處理的時間小于定時中斷時間,那麼就能夠在下一次中斷到來之前結束本次中斷,這樣新來的中斷就能夠執行需要的處理指令。