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