單片機中斷時間過長為什麼
A. 51單片機第一次進入中斷的時間特別長
51單片機中,中斷分高低兩個優先順序,高優先順序的中斷能打斷低優先順序的中斷。
但同級中斷是不能打斷同級中斷的!無論該中斷函數有多長,在執行到一半這個中斷又發生了,還是要等到該中斷函數執行完畢,並再執行了一條主程序指令後才會再次進入該中斷。
不過,若樓主恰好在這個低優先順序中斷服務程序中修改了該中斷為高優先順序,那麼如果該中斷函數比較長,執行到一半又觸發了這個中斷,則該中斷函數就會被重新從頭開始執行(中斷嵌套)。這是因為除串口中斷以外的其他中斷,在 CPU 響應該中斷,程序轉入該中斷函數前就已經將該中斷的中斷標志清零了。
另外,51的串口中斷比較特別,因為需要軟體清除串口中斷標志,所以只要在未清串口中斷標志前,是不會發生上述這樣的中斷嵌套的。
B. 51單片機中斷程序服務時間長好還是短好
通常情況下越短越好。因為進入中斷以後,主程序停止運行,再來中斷可能會導致堆棧溢出。
看具體應用,有的程序一生都在等待那個唯一的中斷,主程序就一句while(1){.....}
C. 影響51系列單片機中斷響應時間的因素
您好:
因素有:
1、單片機自身的因素(晶振頻率大小、機器周期是多少等)
2、程序中中斷的優先順序(有沒有中斷嵌套、中斷優先順序那個高等)
3、單片機正在執行的指令(單片機要執行完正在執行的指令再執行中斷指令)
希望可以幫到您。
補充:
對於3,我再做講解:
即使單片機中斷產生,而且CPU准備響應它的中斷,但CPU也要執行完正在執行的指令。對於不同的指令,指令執行的時間不同(有單周期、多周期的指令之分),而且,如果正在執行的是RETI指令,則CPU還要把之前壓入堆棧的內容彈出再執行中斷。所以CPU正在執行的指令不同,時間也就不同。
D. 有個問題,51單片機中外部中斷採用跳沿觸發方式,為什麼中斷執行完後得等好長時間主程序才開始恢復執行
因為你的中斷程序執行的時間太長了吧!如果是大量的工作最好不要寫在中斷程序中執行,那樣容易丟失中斷事件!還有就是雖然用的是跳變沿出發,但是觸發一次就要執行一次中斷程序,結束之後才回到主程序的!希望可以幫到你
E. 51單片機定時器T2設置為自動裝載,中斷程序執行時間很長,超過定時時間會怎麼樣
你如何理解觸發2字?
我的理解是:
中斷過程分別觸發(申請)、中斷執行兩個部分,任何中斷源滿足條件都可以申請中斷,置中斷標志位。
如果當前有中斷正在執行,不同優先順序的,高級別中斷能夠申請成功,中斷當前中斷;
同級或低級則必須等待當前執行完畢,且標志位仍在;如果標志位被清除或電平中斷的電平不滿足條件,則中斷丟失。
具體到你這里,則會置標志位,但申請不了中斷執行,待當前執行完畢,標志位仍在的話,則執行下次中斷,實際上就沒辦法返回到主程序運行了。
要注意的是,如果中斷子程序在開頭清中斷標志,則按上述執行;如果在子程序結尾處清標志位,則下次中斷丟失。
重裝是指令執行的,當然有時間差。
F. 為什麼單片機定時越短,中斷次數增多啦,反而出現死機
你的感覺是中斷次數多,就不容易死機嗎,是這樣的,如果是正常的運行程序,此時的單片機的資源用的是最少的,也就是cpu的負擔是最輕的,可是一旦有的中斷,你就開了中斷,每一個機器周期都要去查這些中斷標志,標志有效,那麼就要對當前的地址進行存儲,還要對看是否有同級中斷,是否滿足中斷的條件,滿足,轉向中斷服務,完了,還要自動清除這些標志,這些都是你看不見的,大量的工作都是硬體在自動完成,這也就是cpu負擔更重,如果你中斷太頻,內部硬體的電路出現問題的機率就會增大,當然死的快了。
G. 單片機串口中斷函數中,如果在裡面時間過長,後面來的數據會被自動丟棄嗎
不是自動丟棄,而是反復接收,導致後來的數據將先收到、未處理的數據給覆蓋了。
例如對方發給你一串0x01、0x02、0x03,假如你中斷函數太過磨嘰,可能在將0x01從緩沖區中取出後、在處理的過程中又先後收到了0x02、0x03,那麼0x03會把0x02覆蓋掉,導致你下次再進入串口中斷函數時只能取出0x03了。
因此中斷函數務必簡潔高效,只要不是火燒眉毛的判斷/處理,一律應當扔到主循環體或常規任務中處理。
另外現在很多的單片機串口是具有硬體FIFO的,善用FIFO也會大大提高整個系統的中斷效率。
H. 51單片機主函數較短,定時中斷設定的定時時間較長。是不是主函數一直重復運行
這么說也不無不可,在等待定時溢出中斷的過程中,主程序一直都在循環中重復運行。比如:
main()
{
TMOD=0x01;
TH0=TL0=0;
TR0=1;
ET0=1;
EA=1;
while(1); //等待溢出中斷時,主程序一直在這里原地循環。
}
I. 51單片機定時器中斷
定時器一旦啟動,除非你寫命令讓它停下,否則是一直在運行的。定時器的計數器一旦溢出,就會發生中斷,程序就開始執行中斷函數中的程序。而計數器依舊開始累加,直到下一次溢出,不斷往復,永無休止。注意的是,當你的中斷服務程序耗費時間過長的時候,意思是,CPU執行你的中斷服務程序的時間大於中斷計時時間的話。那麼,CPU將在這段中斷服務程序還沒有還沒有執行完就會收到下一次中斷請求,此時CPU將不再執行之後的中斷服務程序,轉而重新從第一條中斷服務程序開始執行。
J. 用定時器中斷,單片機中斷處理時間大於定時器定時時間會怎樣
如果是自動初始值的,中斷處理時間長,不會影響定時器工作的,只是中斷處理結束後,單片機又馬上進入新的定時器中斷函數,主函數中的語句可能會沒有機會運行下去。