cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理(中斷發生); cpu暫時中斷當前的工作,轉去處理事件b(中斷響應和中斷服務); 待cpu將事件b處理完畢後,
再回到原來事件a被中斷的地方繼續處理事件a(中斷返回),這一過程稱為中斷。
我第一眼看見這東西,感覺跟函式巢狀呼叫的過程特別像。
cpu對中斷系統所有中斷以及某個中斷源的開放和遮蔽是由中斷允許暫存器ie控制的
ex0(ie.0),外部中斷0允許位;
et0(ie.1),定時/計數器t0中斷允許位;
ex1(ie.2),外部中斷1允許位;
et1(ie.3),定時/計數器t1中斷允許位;
es(ie.4),序列口中斷允許位;
ea (ie.7), cpu中斷允許(總允許)位
it0(tcon.0),外部中斷0觸發方式控制位。
當it0=0時,為電平觸發方式。
當it0=1時,為邊沿觸發方式(下降沿有效)。
ie0(tcon.1),外部中斷0中斷請求標誌位。
it1(tcon.2),外部中斷1觸發方式控制位。
ie1(tcon.3),外部中斷1中斷請求標誌位。
tf0(tcon.5),定時/計數器t0溢位中斷請求標誌位。
tf1(tcon.7),定時/計數器t1溢位中斷請求標誌位。
cpu同時接收到幾個中斷時,首先響應優先級別最高的中斷請求。
正在進行的中斷過程不能被新的同級或低優先順序的中斷請求所中斷。
正在進行的低優先順序中斷服務,能被高優先順序中斷請求所中斷
中斷源有中斷請求;
此中斷源的中斷允許位為1;
cpu開中斷(即ea=1)。
以上三條同時滿足時,cpu才有可能響應中斷
主程式中需要有以下**:
ea=1;//開啟總中斷開關
ex0=1;//開外部中斷0
it0=0/1;//設定外部中斷的觸發方式( 0為低電平, 1為下降沿 )
接下來。我們用k3獨立按鍵,控制led的狀態翻轉
#include /*接線: 用杜邦線連線k3與p3的2腳。p0的0腳連線led的排針。interrupt 0 這個0指的是中斷號*********** 0號中斷控制led燈狀態翻轉 **********
*/sbit led = p0^0
;sbit k3 = p3^2; //
0號中斷
typedef unsigned
intu16;
typedef unsigned
char
u8;void
delay( u16 i )
void int0_init()
void trigger_int0() interrupt 0
}void
main()
下例用k4按鍵,處理1號外部中斷。相應的連線也要做出調整:
#include /************ 1號中斷控制led燈狀態翻轉 **********
*/sbit led = p0^0
;sbit k4 = p3^3; //
1號中斷
typedef unsigned
intu16;
typedef unsigned
char
u8;void
delay( u16 i )
void int1_init()
void trigger_int1() interrupt 2
}void
main()
51微控制器 外部中斷
int0是外部中斷0 0 int1是外部中斷1 2 t0和t1是定時器中斷 1,3 rx和tx是串列埠中斷 it0和it1確定工作方式 暫存器tcon中配置 ie0和ie1是中斷標誌位,為1的時候,向cpu傳送請求中斷 tf0和tf1是溢位中斷請求位 定時器溢位便置1,傳送請求中斷 ri和ti是序列...
51微控制器中斷號對應的中斷型別
中斷源 預設中斷級別 外部中斷0 int0 最高interrupt 0 定時器0中斷 t0 1interrupt 1 外部中斷1 int1 2interrupt 2 定時器1中斷 t1 3interrupt 3 串列埠中斷 tx rx 4interrupt 4 中斷暫存器就是用於存貯中斷狀態的,包含...
C51微控制器 外部中斷
cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷發生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 如圖 引起cpu中斷的根源,稱為中斷源。中斷源向cpu提出的中斷...