中斷(interrupt)是CPU在執行程序時,對系統發生的某個事件(程序自身或外界的原因)作出的一種反應,暫時放下目前所執行的程序,先去執行特定的程序,待完成特定的程序后,再返回執行剛才放下的程序。比如用戶按下按鈕,程序必須及時處理用戶的按鈕請求,然后再返回來繼續執行。
比如,老師正在講課,而同學有疑問,隨時都可以舉手發問,老師將立即暫停講課,為同學解惑,再繼續剛才暫停的課程,這樣的動作就是中斷。
中斷源
中斷源(中斷請求源):能夠向CPU發出中斷申請的部件。
8051提供5個中斷服務(中斷源):外部中斷(INT0、INT1),定時器中斷/計數器中斷(TF0、TF1),串行口中斷UART(RI/TI)。
8052提供6個中斷服務(中斷源),除了包含8051提供的5個中斷外,還包括第三個定時器/計數器(Timer2)的中斷。
MCS-51的中斷
外部中斷
外部中斷INT0/INT1,CPU通過12引腳(即P3.2)及13腳(即P3.3)來接收外部中斷的請求。
外部中斷信號的采樣方式可分為電平觸發(低電平觸發)及邊緣觸發(負邊緣觸發,即時鐘信號由高轉低時觸發)兩種。
若要采用電平觸發,需要將TCON寄存器中的IT0(或IT1)設定為0,則只要P3.2引腳(或P3.3引腳)為低電平,即視為外部中斷需求。
若要采用邊緣觸發需要將TCON寄存器中的IT0(或IT1)設定為1,則只需要P3.2引腳(或P3.3引腳)的信號由高電平轉為低電平,即視為外部中斷需求。
這些中斷需求將反應在IE0(或IE1)里,若IE寄存器的EX0(或EX1)=1,且EA=1,CPU將進入該中斷的服務。
至于中斷的優先級寄存器(IP寄存器),只是安排多個中斷發生時中斷服務執行的順序而已,若只有一個中斷,將不會有所影響。
定時器/計數器中斷
定時器/計數器中斷有TF0和TF1兩個(8052多一個:TF2)。若是定時器,CPU將對內部的時鐘脈沖計數,而提出內部中斷;若是計數器,CPU將對外部的脈沖計數,而提出內部中斷。至于外部脈沖的輸入,則是通過T0引腳(即14腳,也就是P3.4)及T1引腳(即15腳,也就是P3.5)
串行口中斷
串行口中斷(UART)有RI或TI兩個,CPU通過RXD引腳(即10引腳,也就是P3.0)及TXD引腳(即11腳,也就是P3.1)要求接收(RI)中斷需求或傳送(TI)中斷需求。
相關寄存器
在前面的[MCS-51中斷系統圖]中,我們可將中斷啟用寄存器(IE寄存器)看作中斷功能的開關,中斷優先級寄存器(IP寄存器)是判斷各中斷優先級的開關。而實際上,IE寄存器、IP寄存器、TCON寄存器都是一個8位的可尋址寄存器,如下圖
中斷優先級
若沒有在IP寄存器里設定優先級,則中斷的優先級為:
INT0 >TF0>INT1>TF1>RI/TI。
若設定了優先級:
假設TF1=1,則中斷優先級應為:
TF1>INT0 >TF0>INT1> RI/TI;
假設TF0 =1,INT1=1,則中斷優先級應為:TF0>INT1>INT0 > TF1>RI/TI。
定時器/計數器控制寄存器TCON里,有部分設定與外部中斷信號的采樣有關。其中IT0與IT1分別為INT0與INT1的采樣信號設置位:
若設置為1,則是采用下降沿觸發信號;
若設置為0,則是采用低電平觸發。
IE0與IE1是由CPU所操作的中斷標志位,當中斷發生時將被設定為1,結束中斷時,恢復為0。
中斷的應用
中斷的設定包括開啟中斷開關(IE寄存器的設定)、中斷優先級的設定(IP寄存器的設定)、中斷信號的設定(TCON寄存器的設定)等。
在程序中設定中斷命令:
IE=0x81 //即1000 0001,對照前面IE寄存器圖片可得EA=1,EX0=1,即啟用INT0中斷
IE=0x84 //啟用INT1中斷
IE=0x85 //啟動INT0、INT1中斷
IP=0x04 //設置INT1中斷具有最高優先級
TCON=0x8 //設定INT1采用下降沿觸發
中斷程序格式:void +函數名+interrupt +數字0~4,其中0—4分別表示
0:外部中斷INT0
1:定時器/計數器TF0
2:外部中斷INT1
3:定時器/計數器TF1
4:串行口TI/RI
如:void my_INT (void) interrupt 0
{
......//中斷子程序邏輯代碼
}
舉例:12引腳(即P3.2)接入按鈕,當在主程序運行過程中,按下這個按鈕,程序就會進入中斷子程序,執行子程序的邏輯,中斷子程序執行完,再進入主程序繼續執行。
//主程序:
void main()
{
IE=0x81 // 啟用INT0中斷
TCON=0x01 //設置INT0 為下降沿觸發
......
While(1)
{
......
}
}
//中斷子程序 使用INT0外部中斷
void int0_test(void) interrupt 0
{
......//中斷程序邏輯代碼
}
-
計數器
+關注
關注
32文章
2259瀏覽量
94870 -
定時器
+關注
關注
23文章
3255瀏覽量
115169 -
UART接口
+關注
關注
0文章
124瀏覽量
15328 -
外部中斷
+關注
關注
1文章
132瀏覽量
15859 -
8051芯片
+關注
關注
0文章
2瀏覽量
5673
發布評論請先 登錄
相關推薦
評論