C語言51微控制器中斷巢狀問題

時間 2021-09-08 03:20:01

1樓:匿名使用者

對於普通51而言,不會存在中斷巢狀的情況,只有如stc系列的51,可以設定4個級別的中斷優先順序才有巢狀情況的發生。雖然外部中斷0、定時器0,外部中斷啊1.....表明了其優先順序的高低,只是同時申請中斷時高階的先響應而已,不會打斷低優先順序的中斷。

2樓:匿名使用者

必須返回低階中斷,你可以設定一個標誌位,在退出高階中斷時設定為1,在低階中斷中需要的位置加入判斷,以達到直接退出低階中斷的目的。

3樓:

對於這個,要這麼看:

假設中斷a是優先順序高的中斷,中斷b是優先順序低的中斷如果在正常執行的過程中,發生中斷a,那麼,中斷a執行完成後,會返回正常程式;

如果在正常執行過程中,發生中斷b,又在中斷b處理過程中發生中斷a,那麼,中斷a執行完成後,一定要返回的是中斷b,這是由硬體決定的,不是軟體決定的,所以,軟體沒有任何指令可以讓中斷a執行完成後直接跳過還沒有執行完的中斷b而直接回到主程式,因為這是硬體決定的,軟體做不到,即便你在高階中斷a中關閉了中斷b,但是因為你原來的中斷b還沒有執行完,所以,仍然要把沒執行完的部分執行下去,才能返回到正常程式.

對於arm系列的可以,對於51來說,是不行的,因為51軟體指令不允許修改pc暫存器的值

4樓:匿名使用者

只能將低優先順序的中斷遮蔽,需要進入時再開啟。

微控制器中不建議使用中斷巢狀,特別是中斷執行時間較長的時候。

因為微控制器的堆疊較小,每次進中斷都要講一些暫存器壓到堆疊,巢狀幾次後可能會導致堆疊溢位。

有一些微控制器還規定了程式呼叫和中斷的層數,比如低端的pic微控制器,程式呼叫+中斷不能超過7層。

求51微控制器簡單的中斷c語言程式

樂隱生態農學院 這個是我自己做的 99s的計數器。用數碼管顯示的,這裡使用了中斷,其目的是為了通過中斷來精確計算真實的時間。如果還有需要,給我郵箱,我這裡還有不少資料,我學了2個多月,基本也算有點小成了吧。呵 自行設計 99s,用數碼管顯示!include define uchar unsigned...

微控制器C語言程式設計,51微控制器C語言程式設計

使用兩個定時器或一個定時器中使用兩個計數都能滿足你的要求。建議使用一個定時器和一個計數器即可,如計數器為i,則if i 測溫定時 0 溫度測量 if i 步進電機定時 0 步進電機控制 注 此時要求兩個控制模組的定時步長是一致,比如都是1ms 設定一個比較小的定時間隔,例如1ms,用靜態變數累加,比...

51微控制器串列埠通訊中斷的問題,51微控制器串列埠通訊問題

肯定不會執行while ti 0 下面的程式的,因為你的中斷開著,程式跳到中斷服務程式裡面了,然後中斷處理結束了之後,ti自動清零了,所以一直在while ti 0 無限迴圈。程式裡面,既然開通了中斷功能,那你就一直使用中斷功能,為什麼你還要使用查詢功能呢?甚至有時把中斷給禁止了,這裡面容易出現問題...