MCS-51單片機(jī)的中斷系統(tǒng)(2)
中斷響應(yīng)過程
中斷響應(yīng)過程為,中斷源發(fā)出中斷請求→對中斷請求進(jìn)行響應(yīng)→執(zhí)行中斷服務(wù)程序→返回主程序。這個過程可分為三個階段來完成。1.
對于外部中斷請求,中斷請求信號來自于單片機(jī)外部,計算機(jī)要想知道有沒有中斷請求發(fā)生,必須對信號進(jìn)行采樣。
① 電平觸發(fā)方式的外中斷請求(IT0/IT1=0)采樣到高電平時,表明沒有中斷請求,IE0或IE1繼續(xù)為“0”。采樣到低電平時,IE0/IE1由硬件自動置“1”,表明有外中斷請求發(fā)生。
② 脈沖觸發(fā)式的外中斷請求(IT0/IT1=1)在相鄰的機(jī)器周期采樣到的電平由高電平變?yōu)榈碗娖綍r,則IE0/IE1由硬件自動置“1”,否則為“0”。
2.
由CPU測試TCON和SCON中的各個中斷標(biāo)志位的狀態(tài),確定有那個中斷源發(fā)生請求,查詢時按優(yōu)先級順序進(jìn)行查詢,即先查詢高優(yōu)先級再查詢低優(yōu)先級。如果同級,按以下順序查詢:
#INT0→T0→#INT1→T1→ S
如果查詢到有標(biāo)志位為“1”,表明有中斷請求發(fā)生,接著就從相鄰的下一機(jī)器周期開始進(jìn)行中斷響應(yīng)。
3.
當(dāng)CPU查詢到中斷請求時,由硬件自動產(chǎn)生一條LCALL指令,LCALL指令執(zhí)行時,首先將PC內(nèi)容壓入堆棧進(jìn)行斷點(diǎn)保護(hù),再把中斷入口地址裝入PC,使程序轉(zhuǎn)向相應(yīng)的中斷區(qū)入口地址。LCALL指令的形式如下:
LCALL
入口地址已由系統(tǒng)設(shè)定,如下:
中斷源 | 入口地址 |
0003H | |
T0 | 000BH |
0013H | |
T1 | 001BH |
S | 0023H |
ORG
SJMP
ORG
AJMP
HERE:
1NJERRVP:
RETI
并不是所有的請求都被響應(yīng),當(dāng)遇到下列情況之一時不響應(yīng)這些中斷請求:
(1)CPU正在處理一個同級或者高級的中斷服務(wù)
(2)當(dāng)前指令還沒有執(zhí)行完畢
(3)當(dāng)前指令是RET、RETI或者是訪問IP、IE的指令,執(zhí)行完這些指令后,還必須再執(zhí)行一條指令,才響應(yīng)中斷請求。
中斷請求的撤銷
1.
硬件自動把TF0(TF1)清0,不需要用戶參與。
2.
需要軟件清零。
3.
(1)脈沖觸發(fā)方式的外中斷請求撤銷
中斷標(biāo)志位的清零是自動的,脈沖信號過后就不存在了,因此其撤銷是自動的。
(2)電平觸發(fā)方式的外中斷請求撤銷
中斷標(biāo)志位的清零是自動的,但是如果低電平持續(xù)存在,在以后的機(jī)器周期采樣時,又會把中斷請求標(biāo)志位(IE 0
通過直接置位端#Sd使中斷請求信號強(qiáng)制從低電平變?yōu)楦唠娖?,要?shí)現(xiàn)此功能需要在中斷入口地址處加入如下兩條指令:
評論