keil51的中斷處理過程
中斷函式注意如下:
(1)中斷函式不能進行引數傳遞,如果中斷函式中包含任何引數宣告都將導致編譯出錯。
(2)中斷函式沒有返回值,如果企圖定義乙個返回值將得不到正確的結果,建議在定義中斷函式時將其定義為void型別,以明確說明沒有返回值。
(3)在任何情況下都不能直接呼叫中斷函式,否則會產生編譯錯誤。因為中斷函式的返回是由8051微控制器的reti指令完成的,reti指令影響8051微控制器的硬體中斷系統。如果在沒有實際中斷情況下直接呼叫中斷函式,reti指令的操作結果會產生乙個致命的錯誤。
(4)如果在中斷函式中呼叫了其它函式,則被呼叫函式所使用的暫存器必須與中斷函式相同。否則會產生不正確的結果。
(5)c51編譯器對中斷函式編譯時會自動在程式開始和結束處加上相應的內容,具體如下:在程式開始處對acc、b、dph、dpl和psw入棧,結束時出棧。中斷函式未加using n修飾符的,開始時還要將r0~r1入棧,結束時出棧。如中斷函式加using n修飾符,則在開始將psw入棧後還要修改psw中的工作暫存器組選擇位。
(6)c51編譯器從絕對位址8m+3處產生乙個中斷向量,其中m為中斷號,也即interrupt後面的數字。該向量包含乙個到中斷函式入口位址的絕對跳轉。
void isrtimer0(void) interrupt [n] n為中斷號,編譯器將n*8+3=中斷(入口)向量位址
也就是說:
中斷號 中斷名 中斷向量位址
0 int 0(外部中斷0) 0003h
1 timer/counter 0(定時/計數器0) 000bh
2 int 1(外部中斷1) 0013h
3 timer/counter 1(定時/計數器1) 001bh
4 serial port(串列埠中斷) 0023h
5 timer/counter 2(定時/計數器2) 002bh
外註: 上電復位 0000h
(7)中斷函式最好寫在檔案的尾部,並且禁止使用extern儲存型別說明。防止其它程式呼叫。
中斷處理過程
部分摘自 中斷 所謂中斷就是指cpu在正常執行程式的時候,由於內部 外部事件的出發 或由程式預先設定而引起cpu暫時中止當前正在執行的程式,儲存被執行程式相關資訊到棧中,轉而去執行為內部 外部事件 或由程式預先設定的事件的中斷服務子程式,待執行完中斷服務子程式後,cpu再獲取被儲存在棧中被中斷的程式...
中斷及中斷處理過程
1.中斷和異常的概念區別 intel的官方文件裡將中斷和異常理解為兩種中斷當前程式執行的不同機制。這是中斷和異常的共同點。不同點在於 中斷 interrupt 是非同步的事件,典型的比如由i o裝置觸發 異常 exception 是同步的事件,典型的比如處理器執行某條指令時發現出錯了等等。中斷又可以...
中斷及中斷處理過程
from 中斷及中斷處理過程 1.中斷和異常的概念區別 intel的官方文件裡將中斷和異常理解為兩種中斷當前程式執行的不同機制。這是中斷和異常的共同點。不同點在於 中斷 interrupt 是非同步的事件,典型的比如由i o裝置觸發 異常 exception 是同步的事件,典型的比如處理器執行某條指...