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