新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)的中斷響應(yīng)及撤銷

51單片機(jī)的中斷響應(yīng)及撤銷

作者: 時(shí)間:2014-01-17 來源:網(wǎng)絡(luò) 收藏

應(yīng)

應(yīng)就是單片機(jī)CPU對(duì)中斷源提出的中斷請(qǐng)求的接受。中斷請(qǐng)求被響應(yīng)后,再經(jīng)過一系列的操作,而后轉(zhuǎn)向中斷服務(wù)程序,完成中斷所要求的處理任務(wù)。下面簡(jiǎn)要說明80c51的應(yīng)過程:

1.外中斷采樣和內(nèi)中斷置位

1.1外中斷采樣

要想知道外中斷是否有請(qǐng)求發(fā)生,需要對(duì)外中斷進(jìn)行采樣。

當(dāng)通過軟件將寄存器TCON的IT0(或IT1)位設(shè)置為0時(shí),/INT0(或/INT1)為電平觸發(fā)方式,CPU在每個(gè)機(jī)器周期的S5P2(第五個(gè)狀態(tài)第2拍節(jié))期間對(duì)/INT0(或/INT1)采樣,一旦在P3.2(或P3.3)上檢測(cè)到低電平時(shí),則認(rèn)為有外部中斷申請(qǐng),隨即由硬件使TCON的IE0(或IE1)位置1,向CPU申請(qǐng)中斷。在中斷響應(yīng)完成后轉(zhuǎn)向中斷服務(wù)子程序,再由硬件自動(dòng)對(duì)IE0(或IE1)位清0.

當(dāng)寄存器TCON的IT0(或IT1)位為1,/INT0(或/INT1)為脈沖觸發(fā)方式,則CPU在每個(gè)機(jī)器的S5P2期間對(duì)/INT0(或/INT1)采樣,當(dāng)檢測(cè)到前一周期為高電平、后一周期為低電平時(shí),由硬件使TCON的IE0(IE1)位置1,向CPU申請(qǐng)中斷,在中斷響應(yīng)完成后轉(zhuǎn)向中斷服務(wù)子程序時(shí),再由硬件自動(dòng)對(duì)IE0(IE1)位清0.在邊沿觸發(fā)方式中,為保證CPU在兩個(gè)機(jī)器周期內(nèi)檢測(cè)到由高到低的負(fù)跳變,高電平與低電平的持續(xù)時(shí)間不得少于一個(gè)機(jī)器周期的時(shí)間。

1.2內(nèi)中斷置位

80c51把所有中斷標(biāo)志都集中到TCON和SCON寄存器中。其中外中斷是使用采樣的方法把中斷請(qǐng)求鎖定在TCON寄存器的IE0(IE1)標(biāo)志位上,而定時(shí)中斷和串行中斷的中斷請(qǐng)求由于都發(fā)生在芯片的內(nèi)部,定時(shí)中斷可以直接去置位TCON的TF0(TF1),串行中斷可以直接去置位SCON的RI和TI。內(nèi)中斷不存在采樣問題。

2.中斷查詢

所謂查詢,就是由CPU測(cè)試TCON和SCON中各標(biāo)志位的狀態(tài),以確定有沒有中斷請(qǐng)求發(fā)生以及是哪一個(gè)中斷請(qǐng)求。單片機(jī)是在每一個(gè)機(jī)器周期的最后狀態(tài)(S6),按優(yōu)先級(jí)順序?qū)χ袛嗾?qǐng)求標(biāo)志進(jìn)行查詢,即先查詢高級(jí)中斷后查詢低級(jí)中斷,同級(jí)中斷按“外部中斷0—定時(shí)中斷0—外部中斷1—定時(shí)中斷1—串行中斷”的順序查詢。如果查詢到有標(biāo)志位為“1”,則表明有中斷請(qǐng)求發(fā)生,接著就從相鄰的下一個(gè)機(jī)器周期的S6狀態(tài)開始進(jìn)行中斷響應(yīng)。

由于中斷請(qǐng)求是隨機(jī)發(fā)生的,CPU無法預(yù)先得知,因此在程序執(zhí)行過程中,中斷查詢要在指令執(zhí)行的每個(gè)機(jī)器周期中不停地重復(fù)進(jìn)行。換句話說,就相當(dāng)于你在看書的時(shí)候,每一秒鐘都會(huì)抬起頭來聽一聽,看一看,是不是有人按門鈴,是否有電話,燒的開水是否開了。。。。。。看來,單片機(jī)比人蠢多了。

3.中斷響應(yīng)

當(dāng)查詢到有效的中斷請(qǐng)求時(shí),緊接著就進(jìn)行中斷響應(yīng)。中斷響應(yīng)時(shí),根據(jù)寄存器TCON、SCON中的中斷標(biāo)記,由硬件自動(dòng)生成一條長(zhǎng)調(diào)用指令LCALL XXXX,這里的XXXX就是程序存儲(chǔ)器中斷區(qū)中相應(yīng)中斷的入口地址。對(duì)于80c51的5個(gè)獨(dú)立中斷源,這些入口地址已由系統(tǒng)設(shè)定。這樣在產(chǎn)生了相應(yīng)的中斷以后,就可轉(zhuǎn)到相應(yīng)的位置去執(zhí)行。

例如,對(duì)于外部中斷0的響應(yīng),產(chǎn)生的長(zhǎng)調(diào)用指令為

LCALL 0003H

生成LCALL指令后,緊接著就由CPU執(zhí)行,首先將當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容(準(zhǔn)備執(zhí)行的指令的地址)壓入堆棧以保護(hù)斷點(diǎn),再將中斷入口地址裝入PC,使程序轉(zhuǎn)向相應(yīng)的中斷區(qū)入口地址。從中斷源所對(duì)應(yīng)的向量地址中可以看出,一個(gè)中斷向量入口地址到下一個(gè)中斷向量入口地址之間只有8個(gè)單元。也就是說,中斷服務(wù)程序的長(zhǎng)度如果超過了8B,就會(huì)占用下一個(gè)中斷的入口地址,導(dǎo)致出錯(cuò)。但一般情況下,很少有一段中斷服務(wù)程序只占用少于8B的情況,為此可以在中斷入口處寫一條“LJMP XXXX”或“AJMP XXXX”指令,這樣可以把實(shí)際處理中斷的程序放到ROM的任何一個(gè)位置。

例如,若采用外中斷0,在程序的開始處可以這樣寫:

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP INT_0

;以下是主程序

MAIN:

;以下是外中斷0服務(wù)程序

INT_0:

RETI

END


上一頁 1 2 下一頁

關(guān)鍵詞: 51單片機(jī) 中斷響 撤銷

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉