第8章80X86-88中斷技術(shù)_第1頁(yè)
第8章80X86-88中斷技術(shù)_第2頁(yè)
第8章80X86-88中斷技術(shù)_第3頁(yè)
第8章80X86-88中斷技術(shù)_第4頁(yè)
第8章80X86-88中斷技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩112頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

微機(jī)原理與接口技術(shù)

第8章80X86_88中斷技術(shù)

深圳大學(xué)信息工程學(xué)院1第一節(jié)中斷的基本概念一、什么是中斷二、中斷源和中斷優(yōu)先權(quán)三、中斷服務(wù)程序四、斷點(diǎn)和中斷現(xiàn)場(chǎng)五、硬件中斷和軟件中斷2一、什么是中斷在CPU正常運(yùn)行程序時(shí),由于內(nèi)部或外部某個(gè)非預(yù)料事件的發(fā)生,使CPU暫停正在運(yùn)行的程序,而轉(zhuǎn)去執(zhí)行處理引起中斷事件的程序,然后再返回被中斷了的程序,繼續(xù)執(zhí)行。這個(gè)過(guò)程就是中斷。3中斷服務(wù)程序1中斷服務(wù)程序2非預(yù)料事件1CPU執(zhí)行流程非預(yù)料事件

24二、中斷源和中斷優(yōu)先權(quán)引起中斷的因素很多,將發(fā)出中斷申請(qǐng)的外設(shè)或內(nèi)部原因,稱(chēng)為中斷源給每個(gè)中斷源指定一個(gè)優(yōu)先權(quán),稱(chēng)為中斷優(yōu)先權(quán)當(dāng)多個(gè)中斷源同時(shí)發(fā)出中斷請(qǐng)求時(shí),

CPU按照中斷優(yōu)先權(quán)的高低順序,依次響應(yīng)。5三、中斷服務(wù)程序處理中斷源,完成其所要求功能的程序,稱(chēng)中斷服務(wù)程序(中斷例行程序、中斷子程)。CPU執(zhí)行流程中斷服務(wù)程序1中斷服務(wù)程序2非預(yù)料事件2非預(yù)料事件16非預(yù)料事件是指事件發(fā)生的時(shí)間無(wú)法預(yù)知,

即中斷源何時(shí)產(chǎn)生中斷不確定,是隨機(jī)的。但事件的性質(zhì)及處理方法則是已知的,確定的,

即中斷服務(wù)程序是事先編寫(xiě)好的,只是何時(shí)執(zhí)行未知。中斷源產(chǎn)生中斷的隨機(jī)性,使中斷服務(wù)程序的執(zhí)行也具有隨機(jī)性,即何時(shí)執(zhí)行中斷服務(wù)程序不是在程序中安排好的。7四、斷點(diǎn)和中斷現(xiàn)場(chǎng)斷點(diǎn):是指CPU執(zhí)行的現(xiàn)行程序被中斷時(shí)的下一條指令的地址,又稱(chēng)斷點(diǎn)地址。中斷現(xiàn)場(chǎng):是指CPU轉(zhuǎn)去執(zhí)行中斷服務(wù)程序前的運(yùn)行狀態(tài),包括CPU內(nèi)部各寄存器、斷點(diǎn)地址等。81000:150H、、、、、、、、、、MOVAX,0ADDAX,DXMOV[DI],AX、、、、、、、、、、

PUSHAX

、、

、、

IRETCPU在執(zhí)行此指令時(shí),某中斷源發(fā)申請(qǐng)中斷;CPU在執(zhí)行完該指令后,轉(zhuǎn)去執(zhí)行中斷子程地址1000:150H為斷點(diǎn)斷點(diǎn)概念:9早期中斷概念的引入,是為解決CPU與外設(shè)間的速度匹配問(wèn)題,提高CPU的工作效率。

中斷源主要是由外部硬件產(chǎn)生。當(dāng)今的中斷技術(shù),不再限于外部硬件產(chǎn)生中斷(稱(chēng)硬件中斷或外中斷),還可由CPU內(nèi)部產(chǎn)生(如被零除操作),或者由程序預(yù)先安排,即由指令調(diào)用中斷服務(wù)程序。(稱(chēng)軟件中斷或內(nèi)中斷)五、硬件中斷和軟件中斷101000:150H、、、、、、、、、、MOVAH,01INT21HCMPAL,0Dh、、、、、、、、、、

PUSHAX、、、、IRET用指令調(diào)用中斷程序軟件中斷用指令調(diào)用中斷程序11第二節(jié)8088CPU的中斷系統(tǒng)一、8088CPU的中斷分類(lèi)二、8088CPU的中斷優(yōu)先權(quán)三、8088CPU響應(yīng)中斷的過(guò)程四、8088CPU如何獲取中斷類(lèi)型號(hào)12一、8088CPU的中斷分類(lèi)按中斷源的不同,中斷分為內(nèi)中斷和外中斷。1、內(nèi)中斷(軟中斷)指CPU執(zhí)行某些特殊操作或由INT指令引起的中斷①

被零除操作或OF=1時(shí)執(zhí)行INTO指令引起②使用DEBUG中的單步或斷點(diǎn)設(shè)置操作引起③執(zhí)行INTn指令引起13指外部芯片通過(guò)CPU的INTR引腳或NMI引腳發(fā)出中斷申請(qǐng)引起的中斷。當(dāng)INTR上有高電平信號(hào)當(dāng)NMI上有上升沿信號(hào)2、外中斷(硬中斷)8088GNDA14A13A12A11A10A9A8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLKGND最大組態(tài)(最小組態(tài))VCCA15A16/S3A17/S4A18/S5A19/S6(HIGH)(SSO)MN/MXRDRQ/GT0(HOLD)RQ/GT1(HLDA)LOCK(WR)S2(IO/M)S1(DT/R)S0(DEN)QS0(ALE)QS1(INTA)TESTREADYRESET14

可屏蔽中斷

由INTR引腳引起的中斷,稱(chēng)可屏蔽中斷。CPU是否響應(yīng)INTR引腳上的中斷請(qǐng)求取決于IF標(biāo)志:

IF=1,CPU響應(yīng)INTR引腳上的中斷請(qǐng)求

IF=0,CPU不響應(yīng)INTR引腳上的中斷請(qǐng)求 即當(dāng)IF=0時(shí),將INTR引腳上的中斷申請(qǐng)屏蔽。非屏蔽中斷

由NMI引腳引起的中斷,稱(chēng)非屏蔽中斷。當(dāng)NMI引腳上產(chǎn)生上升沿信號(hào),CPU必響應(yīng)此中斷請(qǐng)求,即NMI引腳上的中斷請(qǐng)求不受IF標(biāo)志的控制,IF不能屏蔽NMI引腳上的中斷請(qǐng)求。15保留(ALT打印機(jī))中斷邏輯INTn指令I(lǐng)NTO指令除法錯(cuò)誤單步TF=1非屏蔽中斷請(qǐng)求IR0IR6IR5IR4IR3IR2IR1IR7可編程中斷控制器(PIC)8259AINTn4012CPUINTRNMI08090A0B0C0D0E0F系統(tǒng)定時(shí)器鍵盤(pán)保留(打印機(jī))軟盤(pán)串行通信接口保留(通信)彩色/圖形接口8086/8088中斷源16當(dāng)有多個(gè)中斷源同時(shí)產(chǎn)生中斷申請(qǐng)時(shí),CPU先響應(yīng)優(yōu)先權(quán)最高的中斷源,再響應(yīng)優(yōu)先級(jí)較低的中斷源。二、8088CPU的中斷優(yōu)先權(quán)優(yōu)先級(jí)

內(nèi)中斷(除零,INT指令,斷點(diǎn),INTO指令)非屏蔽中斷可屏蔽中斷

低內(nèi)中斷(單步)

17三、8088CPU響應(yīng)中斷的過(guò)程當(dāng)中斷源產(chǎn)生中斷申請(qǐng)后,不論是內(nèi)中斷、非屏蔽中斷,還是可屏蔽中斷,只要滿(mǎn)足響應(yīng)條件,在執(zhí)行完當(dāng)前指令后,CPU內(nèi)部硬件會(huì)自動(dòng)完成下列響應(yīng)中斷的過(guò)程:①

取中斷類(lèi)型號(hào)N②

當(dāng)前PSW的內(nèi)容入棧③

清IF、TF標(biāo)志為0④當(dāng)前CS的內(nèi)容入棧⑤

當(dāng)前IP的內(nèi)容入棧⑥

取內(nèi)存單元(0:N×4)字內(nèi)容送IP取中斷子程⑦

取內(nèi)存單元(0:N×4+2)字內(nèi)容送CS入口地址此時(shí)CS:IP指向中斷程序的入口,開(kāi)始執(zhí)行中斷程序。保存現(xiàn)場(chǎng)18當(dāng)前指令執(zhí)行完的含義

CPU正在執(zhí)行一條指令,執(zhí)行完本條指令,響應(yīng)中斷;對(duì)于帶重復(fù)前綴的串指令(如REPMOVSB),執(zhí)行一次重復(fù)和串指令即可響應(yīng)中斷;對(duì)MOV和POP指令,處理對(duì)象為段寄存器,以及STI和IRET指令執(zhí)行完本條指令后,再執(zhí)行一條指令才響應(yīng)中斷。19內(nèi)存中斷向量表0:0~3FFH1000:150h3000:200h0:N×40:N×4+20:0000、、、、、、

0200h3000h、、、、、、、、、MOVAX,0ADDAX,DXMOV[DI],AX、、、、、、、、、、、、MOVBX,CX、、、、、、IRET、、、類(lèi)型N中斷子程某中斷源發(fā)申請(qǐng)中斷,申請(qǐng)執(zhí)行類(lèi)型號(hào)為N的中斷子程響應(yīng)中斷前

SS:SP響應(yīng)中斷后SS:SP

堆棧執(zhí)行IRET后

(IP)(CS)(PSW)01501000(PSW)SS:SP(IP)=0200h(CS)=3000h0:3FFH0:020從中斷子程返回?cái)帱c(diǎn)處,靠的是執(zhí)行中斷子程最后的指令I(lǐng)RET,從堆棧中取出斷點(diǎn)地址給CS:IP,繼續(xù)執(zhí)行被中斷的程序。故中斷子程最后應(yīng)安排IRET指令。1000:150h3000:200h0:N×40:N×4+20:0000、、、、、、

0200h3000h、、、、、、、、、MOVAX,0ADDAX,DXMOV[DI],AX、、、、、、、、、MOVBX,CX、、、

IRET、、、響應(yīng)中斷前

SS:SP響應(yīng)中斷后SS:SP

堆棧執(zhí)行IRET后

(IP)(CS)(PSW)01501000(PSW)SS:SP(IP)=0200h(CS)=3000h21四、8088CPU如何獲取中斷類(lèi)型號(hào)由前面介紹知,當(dāng)中斷源產(chǎn)生中斷請(qǐng)求后,不論是內(nèi)中斷、非屏蔽中斷,還是可屏蔽中斷,只要滿(mǎn)足響應(yīng)條件,在執(zhí)行完當(dāng)前指令后,CPU內(nèi)部硬件會(huì)自動(dòng)完成響應(yīng)中斷的過(guò)程,共七個(gè)步驟而第一步就是獲取中斷類(lèi)型號(hào)。不同的中斷源,8088CPU獲取中斷類(lèi)型號(hào)的方法不同。22根據(jù)8088CPU對(duì)中斷的分類(lèi),各中斷獲取類(lèi)型號(hào)的方法23向量類(lèi)型

INTACLKAD7~AD0T1T2T3T4第一個(gè)中斷響應(yīng)周期T1T2T3T4第二個(gè)中斷響應(yīng)周期

中斷響應(yīng)周期時(shí)序

CPU從引腳INTA發(fā)中斷響應(yīng)信號(hào),接口芯片接收此信號(hào),把中斷類(lèi)型號(hào)準(zhǔn)備好;同時(shí)ISRi=1,IRRi=0。

CPU再?gòu)囊_INTA發(fā)中斷響應(yīng)信號(hào),接口芯片接此信號(hào)后,將中斷類(lèi)型號(hào)送至數(shù)據(jù)總線(xiàn)上;

CPU從數(shù)據(jù)總線(xiàn)獲取中斷類(lèi)型號(hào)。24第三節(jié)可編程中斷控制器8259A

一、引言

二、8259A的引腳、編程結(jié)構(gòu)和工作過(guò)程

三、8259A的編程

1.設(shè)置中斷屏蔽字

2.發(fā)中斷結(jié)束命令EOI

四、8259A在IBMPC/XT系統(tǒng)中的應(yīng)用五、8259A在Pentium機(jī)中的應(yīng)用25一、引言中斷申請(qǐng)管理接口INT中斷申請(qǐng)接口1網(wǎng)絡(luò)接口2硬盤(pán)接口3軟盤(pán)接口4打印機(jī)8088CPUINTRIF261.

向CPU的引腳INTR發(fā)中斷申請(qǐng)信號(hào)當(dāng)有多個(gè)外設(shè)同時(shí)發(fā)出中斷請(qǐng)求時(shí),能按照一定的優(yōu)先級(jí)順序,向CPU發(fā)出中斷申請(qǐng),使CPU能優(yōu)先響應(yīng)優(yōu)先級(jí)最高的外部設(shè)備的中斷申請(qǐng)。2.

送中斷類(lèi)型號(hào)在CPU中斷響應(yīng)周期,針對(duì)不同外設(shè)的中斷請(qǐng)求,向CPU傳送不同的中斷類(lèi)型號(hào),使CPU執(zhí)行相應(yīng)的中斷子程。中斷申請(qǐng)管理接口的主要功能:在IBMPC機(jī)由8259A可編程中斷控制器(PIC)來(lái)完成。27二、8259A的引腳、編程結(jié)構(gòu)和工作過(guò)程1.

8259A的引腳

2.

8259A的編程結(jié)構(gòu)

3.

8259A的工作過(guò)程281.

8259A的引腳

雙列直插式芯片,28個(gè)引腳

方波鍵盤(pán)保留串口2

硬盤(pán)軟盤(pán)打印機(jī)IOW18.2HzA0CS8259A總線(xiàn)A0數(shù)據(jù)線(xiàn)IORRDWR片選譯碼IR0IR1IR2IR3IR4IR5IR6IR7A5~A9D0~D7D0~D7VccSP/ENCA0CA1CA2GND+5V20~3FH用于多片8259A級(jí)連情況INTAINTINTAINTR串口1

定時(shí)器292.8259A的編程結(jié)構(gòu)SP/ENCA0CA1CA2IORIOW總線(xiàn)D0~D7數(shù)據(jù)線(xiàn)D0~D7INTAINTRA0片選譯碼A5~A9CSA0RD

INTAWRINT

I3I4ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3主從片連接關(guān)系

ICW4方式控制0111A010010100OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)設(shè)置、發(fā)EOI

01

OCW3特殊屏蔽,查詢(xún)方式設(shè)置處理部分控制部分00000000

ISR當(dāng)前中斷服務(wù)寄存器PR優(yōu)先級(jí)裁決器VCCGND100A0IR0IR1IR2IR3IR4IR5IR6IR7IRR中斷申請(qǐng)寄存器00000000

304個(gè)初始化命令寄存器

ICW1、ICW2ICW3、ICW4

3個(gè)操作命令寄存器

OCW1(IMR)OCW2、OCW3當(dāng)前中斷服務(wù)寄存器ISR中斷申請(qǐng)寄存器IRR

8259A內(nèi)部有9個(gè)可讀寫(xiě)的寄存器8259A的編程結(jié)構(gòu)

I3I4ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3主從片關(guān)系

ICW4方式控制處理部分控制部分00000000

ISR當(dāng)前中斷服務(wù)寄存器PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器00000000

中斷屏蔽寄存器IMROCW2

10010100

00

01

OCW3OCW18259A中斷控制器31(1)初始化命令字(ICW1-ICW4)

決定8259A的工作方式

通常是在計(jì)算機(jī)系統(tǒng)啟動(dòng)時(shí)在初始程序設(shè)置,一旦設(shè)定,一般在系統(tǒng)工作過(guò)程不再改變。例開(kāi)機(jī)后,BIOS將8259A初始化為:①I(mǎi)R0~IR7中斷申請(qǐng)信號(hào)為上升沿觸發(fā)方式;②IR0~IR7對(duì)應(yīng)的中斷類(lèi)型號(hào)分別為08H~0FH;③優(yōu)先級(jí)IR0最高,IR7最低;(2)操作命令字(OCW1,OCW2,OCW3)

在應(yīng)用程序中設(shè)定,動(dòng)態(tài)地控制CPU處理中斷的過(guò)程(3)ISR和IRR存放當(dāng)前8259A的狀態(tài)

通過(guò)讀取ISR和IRR的內(nèi)容,可了解當(dāng)前8259A工作情況32分兩步:

(1)處理外設(shè)中斷申請(qǐng),決定是否向CPU發(fā)中斷申請(qǐng)信號(hào)。(2)若發(fā)中斷申請(qǐng)信號(hào),且CPU響應(yīng),則在CPU中斷響應(yīng)周期送出中斷類(lèi)型號(hào)。3.8259A的工作過(guò)程33(1)處理外設(shè)中斷申請(qǐng),決定是否向CPU發(fā)中斷申請(qǐng)信號(hào)②

中斷屏蔽寄存器IMR決定IRR中的中斷申請(qǐng)是否進(jìn)入優(yōu)先級(jí)裁決器PR。

IMR對(duì)應(yīng)位為

0,允許中斷申請(qǐng)進(jìn)入優(yōu)先級(jí)裁決器,為1,不允許進(jìn)入,中斷申請(qǐng)被IMR屏蔽。①

中斷申請(qǐng)寄存器IRR鎖存外部的中斷申請(qǐng)。

若IR0~IR7引腳上有中斷申請(qǐng),則將IRR相應(yīng)位置1③

當(dāng)前中斷服務(wù)寄存器ISR記錄CPU正在響應(yīng)的中斷。

ISR中的某位為1,表示CPU正在響應(yīng)此級(jí)中斷,ISR中的某位為0,表示CPU沒(méi)有或已響應(yīng)完此級(jí)中斷,

優(yōu)先級(jí)裁決器PR據(jù)新進(jìn)入的中斷申請(qǐng)和ISR的內(nèi)容,決定是否發(fā)中斷申請(qǐng)信號(hào)。

如果進(jìn)入的中斷申請(qǐng)比ISR中記錄的中斷優(yōu)先級(jí)高,則通過(guò)8259A的INT引腳向CPU發(fā)出中斷請(qǐng)求信號(hào);如果進(jìn)入的中斷申請(qǐng)不比ISR中記錄的中斷優(yōu)先級(jí)高,同級(jí)或低級(jí),則不向CPU發(fā)中斷請(qǐng)求信號(hào)。34①

中斷申請(qǐng)寄存器IRR鎖存外部的中斷申請(qǐng)。若IR0~IR7引腳上有中斷申請(qǐng),則將IRR相應(yīng)位置1IORIOW總線(xiàn)數(shù)據(jù)線(xiàn)D0~D7INTAA0片選譯碼A5~A9CSA0RD

INTAWRINTD0~D7

ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3

主從片關(guān)系

ICW4方式控制00000000

ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)、發(fā)EOI

OCW3特殊屏蔽設(shè)置PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器00000000

10010100INTR1135②中斷屏蔽寄存器IMR決定IRR中的中斷申請(qǐng)是否進(jìn)入優(yōu)先級(jí)裁決器PR。IMR對(duì)應(yīng)位為

0,允許中斷申請(qǐng)進(jìn)入優(yōu)先級(jí)裁決器,

為1,不允許進(jìn)入,中斷申請(qǐng)被IMR屏蔽。IORIOW總線(xiàn)數(shù)據(jù)線(xiàn)D0~D7INTAA0片選譯碼A5~A9CSA0RD

INTAWRINTD0~D7

ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3

主從片關(guān)系

ICW4方式控制00000000

ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)、發(fā)EOI

OCW3特殊屏蔽設(shè)置PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器10000001

10010100INTR36③

當(dāng)前中斷服務(wù)寄存器ISR記錄CPU正在響應(yīng)的中斷。ISR中的某位為1,表示CPU正在響應(yīng)此級(jí)中斷,即正在執(zhí)行此中斷源的中斷子程;ISR中的某位為0,表示CPU沒(méi)有或已響應(yīng)完此級(jí)中斷,即不在執(zhí)行此中斷源的中斷子程IORIOW總線(xiàn)數(shù)據(jù)線(xiàn)D0~D7INTAA0片選譯碼A5~A9CSA0RD

INTAWRINTD0~D7

ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3

主從片關(guān)系

ICW4方式控制001

00000

ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)、發(fā)EOI

OCW3特殊屏蔽設(shè)置PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器10000001

10010100INTR37④優(yōu)先級(jí)裁決器PR據(jù)新進(jìn)入的中斷申請(qǐng)和ISR的內(nèi)容,決定是否發(fā)中斷申請(qǐng)信號(hào)。

如果進(jìn)入的中斷申請(qǐng)比ISR中記錄的中斷優(yōu)先級(jí)高,則通過(guò)8259A的INT引腳向CPU發(fā)出中斷請(qǐng)求信號(hào);如果進(jìn)入的中斷申請(qǐng)不比ISR中記錄的中斷優(yōu)先級(jí)高,同級(jí)或低級(jí),則不向CPU發(fā)中斷請(qǐng)求信號(hào)。IORIOW總線(xiàn)數(shù)據(jù)線(xiàn)D0~D7INTAA0片選譯碼A5~A9CSA0RD

INTAWRINTD0~D7

ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3

主從片關(guān)系

ICW4方式控制001

00000

ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)、發(fā)EOI

OCW3特殊屏蔽設(shè)置PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器10000001

10010100INTR38(2)若發(fā)中斷申請(qǐng)信號(hào),且CPU響應(yīng),則在CPU中斷響應(yīng)周期送出中斷類(lèi)型號(hào)

CPU接收到INTR上的中斷申請(qǐng)信號(hào)后:如果IF標(biāo)志為0,則CPU不響應(yīng)此中斷申請(qǐng)信號(hào),

即中斷申請(qǐng)被IF屏蔽。如果IF標(biāo)志為1,則處理完當(dāng)前的指令后,進(jìn)入中斷響應(yīng)周期通過(guò)INTA引腳發(fā)出兩個(gè)負(fù)脈沖信號(hào),從數(shù)據(jù)總線(xiàn)上獲取中斷類(lèi)型號(hào),進(jìn)入中斷響應(yīng)的過(guò)程。39向量類(lèi)型

INTACLKAD7~AD0T1T2T3T4第一個(gè)中斷響應(yīng)周期T1T2T3T4第二個(gè)中斷響應(yīng)周期

8088CPU中斷響應(yīng)周期時(shí)序40①將ISR中相應(yīng)位置1,表示CPU響應(yīng)此級(jí)中斷,執(zhí)行此中斷源的中斷子程。8259A在接收到第一個(gè)INTA中斷響應(yīng)信號(hào)后:001

00000

ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器10000001

ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3

主從片關(guān)系

ICW4方式控制OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)、發(fā)EOI

OCW3特殊屏蔽設(shè)置10010100IORIOW總線(xiàn)數(shù)據(jù)線(xiàn)D0~D7INTAA0片選譯碼A5~A9CSA0RDWR

INTAINTD0~D7INTR01②

把IRR中對(duì)應(yīng)的位清0,清除IRR中鎖存的中斷申請(qǐng)信號(hào)。41①

通過(guò)數(shù)據(jù)線(xiàn),將被響應(yīng)申請(qǐng)的中斷類(lèi)型號(hào)送給CPU。類(lèi)型號(hào)由ICW2提供,在初始化8259A時(shí)已設(shè)定好。8259A在接收到第二個(gè)INTA中斷響應(yīng)信號(hào)后:001

00000

ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器10000001

ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3

主從片關(guān)系

ICW4方式控制OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)、發(fā)EOI

OCW3特殊屏蔽設(shè)置10010100IORIOW總線(xiàn)數(shù)據(jù)線(xiàn)D0~D7INTAA0片選譯碼A5~A9CSA0RDWR

INTAINTD0~D7INTR01②

CPU獲得中斷類(lèi)型號(hào)后,進(jìn)入CPU響應(yīng)中斷的過(guò)程,執(zhí)行中斷子程,處理中斷源申請(qǐng)的功能。42①取中斷類(lèi)型號(hào)N②

當(dāng)前PSW的內(nèi)容入棧③清IF、TF標(biāo)志為0④當(dāng)前CS的內(nèi)容入棧⑤當(dāng)前IP的內(nèi)容入棧⑥

取內(nèi)存單元(0:N×4)字內(nèi)容送IP取中斷子程⑦

取內(nèi)存單元(0:N×4+2)字內(nèi)容送CS入口地址此時(shí)CS:IP指向中斷程序的入口,開(kāi)始執(zhí)行中斷程序。保存現(xiàn)場(chǎng)CPU響應(yīng)中斷過(guò)程:執(zhí)行完中斷子程中最后一條指令I(lǐng)RET后,返回被中斷處,繼續(xù)執(zhí)行被中斷的程序。43三、8259A的編程1.8259A的編程2.8259A的編程方法

(1)設(shè)置中斷屏蔽字(2)發(fā)中斷結(jié)束命令EOI444個(gè)初始化命令寄存器

ICW1、ICW2ICW3、ICW4

3個(gè)操作命令寄存器

OCW1(IMR)OCW2、OCW3當(dāng)前中斷服務(wù)寄存器ISR中斷申請(qǐng)寄存器IRR

8259A內(nèi)部有9個(gè)可讀寫(xiě)的寄存器1.8259A的編程

I3I4ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3主從片關(guān)系

ICW4方式控制處理部分控制部分00000000

ISR當(dāng)前中斷服務(wù)寄存器PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器00000000

中斷屏蔽寄存器IMROCW2

10010100

00

01

OCW3OCW18259A中斷控制器458259A有兩個(gè)I/O端口地址A0=0偶地址端口A(yíng)0=1奇地址端口

對(duì)9個(gè)寄存器的讀寫(xiě)均通過(guò)這兩個(gè)端口實(shí)現(xiàn)寫(xiě)入數(shù)據(jù)的特征位寫(xiě)入的先后順序

區(qū)分是對(duì)哪個(gè)寄存器進(jìn)行操作根據(jù)

I3I4ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3主從片關(guān)系

ICW4方式控制處理部分控制部分00000000

ISR當(dāng)前中斷服務(wù)寄存器PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器00000000

中斷屏蔽寄存器OCW2

10010100

00

01

OCW3OCW18259A中斷控制器D0~D7A0CSRDWR80111A0100A046(1)通過(guò)中斷屏蔽寄存器IMR的讀寫(xiě),設(shè)置中斷屏蔽字(2)

通過(guò)OCW2操作命令寄存器,發(fā)中斷結(jié)束EOI命令由于課時(shí)所限,重點(diǎn)要求掌握如下編程:2.8259A的編程方法8259A有多種工作方式,這些工作方式均可編程選擇,使用相當(dāng)靈活。478259A的初始化編程

8259A的初始化命令字:

ICW1~ICW4

8259A的啟動(dòng):必須先通過(guò)編程寫(xiě)入初始化命令字,使它處于工作起始狀態(tài);

初始化過(guò)程:按照固定的順序進(jìn)行。ICW1、ICW2必須寫(xiě),ICW3、ICW4視具體情況而定。48初始化流程用ICW1設(shè)置,是否級(jí)連,請(qǐng)求信號(hào)格式,后面是否用ICW4用ICW2設(shè)置中斷類(lèi)型碼是否為級(jí)連方式?本片為主片嗎?設(shè)置ICW3的低三位為從控標(biāo)志碼設(shè)ICW3的各位對(duì)應(yīng)IR0~IR7的連接情況需要用ICW4嗎?用ICW4設(shè)置,是否為特殊完全嵌套方式;緩沖方式;自動(dòng)結(jié)束中斷方式;8086/8088系統(tǒng)結(jié)束是否否否是是49初始化命令字ICW1A7A6A51LTIMADISNGLIC4D7D6D5D4D3D2D1D00A0ICW1不用0:邊沿觸發(fā)1:電平觸發(fā)0:不要ICW41:需要ICW40:級(jí)聯(lián)使用1:?jiǎn)为?dú)使用8086/8088不用50初始化命令字ICW2T7T6T5T4T3XXXD7D6D5D4D3D2D1D01A0ICW2中斷類(lèi)型碼高5位自動(dòng)填入8259A提供給CPU的中斷類(lèi)型號(hào)是一個(gè)8位代碼,是通過(guò)初始化命令I(lǐng)CW2提供的。但由于ICW2的低3位被8位機(jī)占用,因此只有高5位是在初始化編程時(shí),通過(guò)命令字ICW2寫(xiě)入的,它的低3位是由中斷請(qǐng)求線(xiàn)IRi的二進(jìn)制編碼(如IR4的編碼為100)決定,并且是在第一個(gè)INTA到來(lái)時(shí),將這個(gè)編碼寫(xiě)入低3位的。ICW2的格式如下:

51初始化命令字ICW2例如,在PC系列中斷系統(tǒng)中,硬盤(pán)中斷類(lèi)型號(hào)的高5位是08H,它的中斷請(qǐng)求線(xiàn)連到8259A的IR5上,在向ICW2寫(xiě)入中斷類(lèi)型號(hào)時(shí),只寫(xiě)中斷類(lèi)型號(hào)的高5位(08H),低3位可以取0:MOVAL,08H;ICW2的內(nèi)容(中斷類(lèi)型號(hào)高5位)OUT21H,AL;寫(xiě)入ICW2的端口(A0=1)當(dāng)CPU響應(yīng)硬盤(pán)中斷請(qǐng)求時(shí),8259A把IR5的編碼101作為低3位構(gòu)成一個(gè)完整的8位中斷類(lèi)型號(hào)0DH,經(jīng)數(shù)據(jù)總線(xiàn)發(fā)送給CPU。可見(jiàn),外部硬中斷中斷源的中斷號(hào)(8位代碼)是由兩部分構(gòu)成的,即高5位(ICW2)和低3位(IRi的編碼)。52初始化命令字ICW2表2PC/AT擴(kuò)充8級(jí)硬中斷源的中斷號(hào)

表1PC/XT8級(jí)硬中斷源的中斷號(hào)53在級(jí)聯(lián)方式時(shí),一般一由一個(gè)作為主控制器的8259A以及作為從控制器的其他若干個(gè)8259A組成。ICW3只對(duì)級(jí)聯(lián)方式有效,端口地址是奇地址。ICW3對(duì)主控芯片和從控芯片要分開(kāi)寫(xiě),其格式為:

初始化命令字ICW354通過(guò)寫(xiě)入順序區(qū)分ICW1~ICW4!000SFNMBUFM/SAEOIμPMD7D6D5D4D3D2D1D01A00:一般的全嵌套方式1:特殊的全嵌套方式非緩沖方式0×緩沖方式/從片10緩沖方式/主片11

0:80/85方式1:86/88方式0:非自動(dòng)EOI1:自動(dòng)EOIICW4初始化命令字ICW4該命令字是8086/8088系統(tǒng)必須設(shè)置的預(yù)置命令字。端口地址是基地址。55OCW1~OCW3OCW1:屏蔽命令字OCW2:優(yōu)先級(jí)循環(huán)及EOI方式設(shè)定OCW3:特殊屏蔽方式,中斷查詢(xún)方式及讀寄存器。56OCW1中斷屏蔽操作OCW1內(nèi)容寫(xiě)入中斷屏蔽寄存器IMR1屏蔽中斷請(qǐng)求0開(kāi)放OCW1M7M6M5M4M3M2M1M0

D7D6D5D4D3D2D1D01A00:清中斷屏蔽位1:置中斷屏蔽位要使中斷源IR3開(kāi)放,其余均被屏蔽,則OCW=11110111B

MOVAL,OF7H;OCW1內(nèi)容

OUT21H,AL;OCW1端口(A0=1)

57OCW2命令字中斷結(jié)束方式和中斷排隊(duì)方式都用OCW2命令來(lái)實(shí)現(xiàn),因此它的某些位功能重疊相互交叉顯得比較復(fù)雜,但從使用的角度來(lái),它只有兩個(gè)作用:中斷結(jié)束方式控制;中斷優(yōu)先權(quán)排隊(duì)控制對(duì)應(yīng)IRi的編碼RSLEOI00L2L1L0

D7D6D5D4D3D2D1D00A0OCW2R=1:循環(huán)優(yōu)先權(quán)R=0:固定優(yōu)先權(quán)SL=1:由L2L1L0指定IR位SL=0:L2L1L0無(wú)效EOI=1:中斷結(jié)束無(wú)操作010特殊優(yōu)先權(quán)循環(huán),由L2~L0設(shè)定最低優(yōu)先級(jí)011在特殊EOI時(shí)循環(huán),由L2~L0指定結(jié)束IRi111取消自動(dòng)優(yōu)先權(quán)循環(huán)(固定優(yōu)先權(quán))000自動(dòng)優(yōu)先權(quán)循環(huán),自動(dòng)EOI001自動(dòng)優(yōu)先權(quán)循環(huán),常規(guī)EOI101特殊EOI,由L2~L0指定結(jié)束IRi110常規(guī)EOI100000……111對(duì)應(yīng)IRi的編碼58OCW3

D7D6D5D4D3D2D1D00A0-ESMMSMM01PRRRIS10清除特殊屏蔽方式01設(shè)定特殊屏蔽方式無(wú)意義10100:非查詢(xún)方式1:查詢(xún)方式10讀IRR01讀ISR無(wú)意義1010

OCW1~OCW3的寫(xiě)入無(wú)固定順序,各命令字之間通過(guò)地址A0及特征位區(qū)分OCW3命令字59結(jié)束中斷處理方式一次中斷服務(wù)結(jié)束后,CPU可用中斷結(jié)束命令EOI通知8259A,使ISR中的相應(yīng)位復(fù)位(清零)。自動(dòng)EOI方式利用中斷響應(yīng)時(shí)后一個(gè)脈沖的后沿執(zhí)行一次普通EOI,而不需要CPU發(fā)送EOI指令。非自動(dòng)EOI方式:要求在中斷服務(wù)程序返回前,向8259發(fā)送一個(gè)EOI命令,才能將ISR中相應(yīng)位清0。普通EOI方式:8259收到EOI命令后,自動(dòng)將ISR中級(jí)別最高的置1位清0。特殊EOI方式:中斷服務(wù)程序向8259發(fā)送一個(gè)EOI命令的同時(shí),將當(dāng)前結(jié)束的中斷級(jí)別也傳送給8259,8259收到后,將ISR中指定級(jí)別相應(yīng)位清0。中斷結(jié)束EOI與中斷返回IRET的性質(zhì)不同:EOI用于清除8259A的ISR中的中斷服務(wù)標(biāo)志,是中斷的處理EOI命令發(fā)出后,

緊接著就執(zhí)行IRET指令,用于返回主程序的斷點(diǎn),是中斷服務(wù)程序的最后一句INTA60CAS0IR0CAS1IR1CAS2IR2

IR3INTAIR4IR5INTIR6IR7SP/EN

CAS0INTA

CAS1

CAS2INT

IR0

IR1SP/ENIR7CAS0IR0CAS1IR1CAS2IR2

IR3INTAIR4IR5INTIR6IR7SP/ENINTAINTR+5V8259級(jí)聯(lián)工作示意圖618259級(jí)聯(lián)工作示意圖62

8259A的工作方式總結(jié)普通全嵌套方式特殊全嵌套方式自動(dòng)循環(huán)方式特殊循環(huán)方式優(yōu)先權(quán)固定方式優(yōu)先權(quán)循環(huán)方式設(shè)置優(yōu)先權(quán)方式普通中斷結(jié)束方式特殊中斷結(jié)束方式自動(dòng)中斷結(jié)束方式非自動(dòng)中斷結(jié)束方式結(jié)束中斷處理方式屏蔽中斷源方式普通屏蔽方式特殊屏蔽方式中斷觸發(fā)方式邊沿觸發(fā)方式電平觸發(fā)方式數(shù)據(jù)線(xiàn)連接方式緩沖方式非緩沖方式63通過(guò)往奇地址端口寫(xiě)入IMR內(nèi)容實(shí)現(xiàn)對(duì)應(yīng)位為0,允許該級(jí)中斷申請(qǐng)進(jìn)入對(duì)應(yīng)位為1,禁止該級(jí)中斷申請(qǐng)進(jìn)入(1)設(shè)置中斷屏蔽字IORIOW總線(xiàn)數(shù)據(jù)線(xiàn)D0~D7INTAA0片選譯碼A5~A9CSA0RD

INTAWRINTD0~D7

ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3

主從片關(guān)系

ICW4方式控制00000000

ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)、發(fā)EOI

OCW3特殊屏蔽設(shè)置PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器10000001

10010100INTR64新增允許IR2的中斷申請(qǐng)

INAL,21H;讀入原IMR的內(nèi)容

ANDAL,11111011B;D2=0,允許IR2的中斷申請(qǐng)

OUT21H,AL;寫(xiě)入IMR禁止IR4的中斷申請(qǐng)

INAL,21H;讀入原IMR的內(nèi)容

ORAL,00010000B;D4=1,禁止IR4的中斷申請(qǐng)

OUT21H,AL;寫(xiě)入IMR例

已知IBMPC/XT系統(tǒng)中8259A的奇地址端口地址為21H65設(shè)置完成后的結(jié)果:IORIOW總線(xiàn)數(shù)據(jù)線(xiàn)D0~D7INTAA0片選譯碼A5~A9CSA0RD

INTAWRINTD0~D7

ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3

主從片關(guān)系

ICW4方式控制00000000

ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)、發(fā)EOI

OCW3特殊屏蔽設(shè)置PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器10000001

10010000INTR66(2)發(fā)中斷結(jié)束命令EOI由8259A的工作過(guò)程可知:ISR中的內(nèi)容是優(yōu)先級(jí)裁決器進(jìn)行裁決的重要依據(jù)CPU響應(yīng)某級(jí)中斷后,8259A自動(dòng)將ISR的對(duì)應(yīng)位置1,如果CPU已執(zhí)行完中斷子程,而ISR中的對(duì)應(yīng)位仍為1,8259A的優(yōu)先級(jí)裁決器仍會(huì)據(jù)ISR的內(nèi)容做裁決,從而會(huì)屏蔽同級(jí)或低級(jí)的中斷申請(qǐng)。因此在中斷響應(yīng)后,對(duì)ISR中相應(yīng)位的清0很重要,它是8259A認(rèn)為中斷結(jié)束的標(biāo)志。67IORIOW總線(xiàn)數(shù)據(jù)線(xiàn)D0~D7INTAA0片選譯碼A5~A9CSA0RD

INTAWRINTD0~D7

ICW1芯片控制

ICW2中斷類(lèi)型號(hào)

ICW3

主從片關(guān)系

ICW4方式控制101

00000

ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7OCW1

中斷屏蔽寄存器IMR

00

OCW2優(yōu)先級(jí)、發(fā)EOI

OCW3特殊屏蔽設(shè)置PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器10000001

10010100INTR68一、初始化8259A時(shí),設(shè)置8259A工作方式為自動(dòng)清0方式,

則在CPU響應(yīng)中斷后,硬件自動(dòng)將ISR的對(duì)應(yīng)位清0。清ISR內(nèi)容的方法有兩種:二、初始化8259A時(shí),設(shè)置8259A工作方式為非自動(dòng)清0方式,

需在中斷子程中,通過(guò)軟件方式清0。方法是:通過(guò)往OCW2寫(xiě)入20H實(shí)現(xiàn),即由偶地址端口寫(xiě)入:

EOI00100000特征位,表示對(duì)OCW2操作20H69編程在中斷子程IRET返回前,發(fā)中斷結(jié)束命令EOI例

已知IBMPC系統(tǒng)中,8259A的偶地址端口地址為20H;

BIOS初始化8259A時(shí),設(shè)置8259A工作方式為非自動(dòng)清0方式。intsubPROC、、、、、、、、、

MOVAL,20H;將中斷結(jié)束命令字20H送AL

OUT20H,AL;寫(xiě)入OCW2中

IRET;中斷返回intsubENDP70四、8259A在IBMPC/XT系統(tǒng)中的應(yīng)用1.8259A與系統(tǒng)的連線(xiàn)。2.BIOS初始化程序?qū)?259A的設(shè)置。711.與系統(tǒng)的連線(xiàn)+5V

CLKRESETREADYMN/MXVCCRDQS0QS1LOCKTESTHIGHNMIGNDGND地址鎖存器8282(兩片)STB

數(shù)據(jù)收發(fā)器OE8286T

MRDC8288MWTC總線(xiàn)IORC控制器IOWCINTA8259A及有關(guān)電路DT/RDENALE地址總線(xiàn)數(shù)據(jù)總線(xiàn)控制總線(xiàn)PC總線(xiàn)A15~A8S6~S3/A19~A16AD7~AD08088CPUS0S1S2INTRRQ/GT0RQ/GT1內(nèi)存I/O接口注意:8259A在連線(xiàn)中的位置72①

8259A的片選地址范圍為20~3FH偶、奇端口地址通常取用20H、21H方波鍵盤(pán)保留串口2

硬盤(pán)軟盤(pán)打印機(jī)IOW18.2HzA0CS8259A總線(xiàn)A0數(shù)據(jù)線(xiàn)IORRDWR片選譯碼IR0IR1IR2IR3IR4IR5IR6IR7A5~A9D0~D7D0~D7VccSP/ENCA0CA1CA2GND+5V20~3FH用于多片8259A級(jí)連情況INTAINTINTAINTR串口1

73IR0接一個(gè)頻率為18.2Hz的方波;

若CPU對(duì)該申請(qǐng)給予響應(yīng),則每秒執(zhí)行18.2次該申請(qǐng)對(duì)應(yīng)的中斷子程。

IR1接鍵盤(pán)接口發(fā)出的中斷申請(qǐng);每按下一鍵,若CPU對(duì)該申請(qǐng)給予響應(yīng),則執(zhí)行一次該申請(qǐng)對(duì)應(yīng)的中斷子程。

IR2~IR7通過(guò)系統(tǒng)總線(xiàn)引出,

對(duì)應(yīng)引腳信號(hào)為IRQ2~IRQ7。18.2Hz時(shí)鐘信號(hào)

②8259A的8個(gè)中斷申請(qǐng)與外設(shè)的連接748088INTR主板IF鍵盤(pán)18.2Hz方波8259AINT中斷屏蔽寄存器鍵盤(pán)中斷申請(qǐng)IR1IR2~IR7IR0當(dāng)前中斷服務(wù)寄存器鍵盤(pán)接口IRQ2~IRQ7PC總線(xiàn)外設(shè)接口外設(shè)08h09h0Ah~0FhIBMPC/XT微機(jī)可屏蔽中斷響應(yīng)過(guò)程示意圖75IBMPC/XT總線(xiàn)插槽引腳信號(hào)GNDRESET+5VIRQ2-5VDRQ2-12V+12VGNDMEMWMEMRIOWIORDACK3DRQ3DACK1DRQ1DACK0CLOCKIRQ7IRQ6IRQ5IRQ4IRQ3DACK2T/CALE+5VOSCGNDI/OCHCKD7D6D5D4D3D2D1D0I/OCHRDYAENA19A18A17A16A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0

76可屏蔽硬中斷程序設(shè)計(jì)分三大步驟:1.了解IBMPC/XT系統(tǒng)可屏蔽硬中斷的響應(yīng)過(guò)程,據(jù)連線(xiàn)確定外設(shè)中斷申請(qǐng)對(duì)應(yīng)的中斷類(lèi)型號(hào);2.主程中做好外設(shè)發(fā)出中斷申請(qǐng),CPU能夠響應(yīng)的準(zhǔn)備工作;3.編寫(xiě)可屏蔽硬中斷子程,完成中斷源請(qǐng)求的任務(wù).771.了解IBMPC/XT系統(tǒng)可屏蔽硬中斷的響應(yīng)過(guò)程,據(jù)連線(xiàn)確定外設(shè)中斷申請(qǐng)對(duì)應(yīng)的中斷類(lèi)型號(hào)。例

接口的中斷申請(qǐng)連IRQ3類(lèi)型號(hào)0BH接口的中斷申請(qǐng)連IRQ5類(lèi)型號(hào)0DHIRQ2IRQ3IRQ4IRQ5IRQ6IRQ7CS8259AA0RDWRD0~D7SP/ENCA0CA1CA2GNDIR0IR1IR2IR3IR4IR5IR6IR7Vcc+5V用于多片8259A級(jí)連情況INTAINT數(shù)據(jù)線(xiàn)片選譯碼20~3FHIOWA0總線(xiàn)

IORA5~A9D0~D7INTA

INTR08H09H0AH0BH0CH0DH0EH0FH18.2Hz方波鍵盤(pán)PC/XT總線(xiàn)78在主程序中應(yīng)做的工作:①

CPU關(guān)中斷(用CLI置IF=0)②

保存原中斷向量(用35H系統(tǒng)功能)③

設(shè)置中斷向量(用25H系統(tǒng)功能)④

設(shè)置8259A的中斷屏蔽字,使21H端口對(duì)應(yīng)位為0,允許中斷申請(qǐng)進(jìn)入優(yōu)先級(jí)裁決器⑤

CPU開(kāi)中斷(用STI置IF=1)2.主程中做好外設(shè)發(fā)出中斷申請(qǐng),CPU能夠響應(yīng)的準(zhǔn)備工作。準(zhǔn)備工作做好后,此后若該級(jí)有中斷申請(qǐng),則CPU響應(yīng)中斷,執(zhí)行相應(yīng)類(lèi)型的中斷子程。主程在返回DOS前,應(yīng)恢復(fù)原中斷向量。(用25H系統(tǒng)功能)79①

處理中斷源申請(qǐng)任務(wù)部分的編寫(xiě)與普通子程類(lèi)似②

在中斷子程結(jié)束前,

發(fā)中斷結(jié)束命令清除8259A中ISR的記錄;否則,響應(yīng)一次中斷后,同級(jí)中斷和低級(jí)中斷將被優(yōu)先級(jí)裁決器屏蔽③

用IRET中斷返回指令返回主程被中斷處3.編寫(xiě)硬中斷子程,完成中斷源請(qǐng)求的任務(wù)80返回DOSCLI關(guān)中斷保存原中斷向量設(shè)置新中斷向量設(shè)置8259A的中斷屏蔽字中斷子程有關(guān)量的初始化STI開(kāi)中斷主程其它工作處理(可用雙重循環(huán)延時(shí)代替)恢復(fù)原中斷向量開(kāi)始主程序保護(hù)現(xiàn)場(chǎng)發(fā)中斷結(jié)束命令EOI完成中斷源申請(qǐng)的任務(wù)恢復(fù)現(xiàn)場(chǎng)IRET中斷返回開(kāi)始中斷子程可屏蔽硬中斷程序流程圖81例1

利用連接在8259AIR0上的時(shí)鐘信號(hào),編寫(xiě)具有定時(shí)功能的程序,要求每隔5秒在屏幕上顯示一個(gè)字符’A’。8088INTR主板IF18.2Hz方波8259AINT中斷屏蔽寄存器IR0當(dāng)前中斷服務(wù)寄存器08h82時(shí)鐘信號(hào)連接在IR0上,申請(qǐng)的中斷類(lèi)型號(hào)為08H。時(shí)鐘信號(hào)是一個(gè)頻率為18.2HZ的方波信號(hào),即每秒向8259A發(fā)出18.2次的中斷申請(qǐng)。如果CPU響應(yīng)該中斷申請(qǐng),則以每秒18.2次的頻率執(zhí)行08H類(lèi)型的中斷子程。分析80888259AINTR

IR018.2Hz方波信號(hào)INT83中斷申請(qǐng)的任務(wù)是每5秒顯示一個(gè)字符’A’1秒執(zhí)行18.2次,則5秒執(zhí)行18.2×5=91次,只在執(zhí)行到第91次時(shí)顯示’A’,其它不顯示。在中斷子程中用一個(gè)量來(lái)計(jì)數(shù)中斷子程被執(zhí)行的次數(shù),即CPU響應(yīng)IR0中斷申請(qǐng)的次數(shù)。當(dāng)達(dá)到91次,則顯示’A’,并將計(jì)數(shù)值清0,重新計(jì)數(shù);其它情況只計(jì)數(shù),不顯示’A’。中斷子程的最后應(yīng)發(fā)中斷結(jié)束命令EOI。84主程序中斷子程CLI關(guān)中斷保存原08H中斷向量設(shè)置新08H中斷向量設(shè)置8259A的中斷屏蔽字,允許IR0中斷08H中斷子程執(zhí)行次數(shù)初值0STI開(kāi)中斷主程其它工作處理(可用雙重循環(huán)延時(shí)代替)恢復(fù)原08H中斷向量返回DOS開(kāi)始CX發(fā)中斷結(jié)束命令EOI恢復(fù)現(xiàn)場(chǎng)IRET中斷返回保存現(xiàn)場(chǎng)開(kāi)始中斷子程被執(zhí)行一次CX←CX+1NY調(diào)02HDOS功能顯示字符‘A’CX←0重新記數(shù)到91次,即5秒時(shí)間到?85code

SEGMENTASSUMECS:codestart:CLI;關(guān)中斷MOVAL,08HMOVAH,35HINT21H;取系統(tǒng)08H類(lèi)型中斷向量PUSHES

;用堆棧保存PUSHBXPUSHDSMOVDX,OFFSETdisplay;設(shè)置08H類(lèi)型中斷向量

MOVAX,SEGdisplayMOVDS,AXMOVAL,08HMOVAH,25HINT21HPOPDS程序清單:86INAL,21H;設(shè)置8259A中斷屏蔽字,

ANDAL,11111110B;允許IR0中斷

OUT21H,ALMOVCX,0;置中斷子程計(jì)數(shù)器初值為0STI;CPU開(kāi)中斷MOVSI,8000H;用雙重循環(huán)延時(shí),w2:

MOVDI,8000H;模擬CPU對(duì)其他任務(wù)的處理

w1:DECDI;DI,SI的值可修改,控制主程執(zhí)行時(shí)間JNZw1DECSIJNZw2POPDX;恢復(fù)系統(tǒng)08H類(lèi)型中斷向量

POPDSMOVAL,08HMOVAH,25HINT21HMOVAH,4CH;返回DOSINT21H

87displayPROC

;自編的08H類(lèi)型中斷子程

PUSHAX

;保護(hù)現(xiàn)場(chǎng)

INCCX;執(zhí)行中斷子程一次,計(jì)數(shù)值加1CMPCX,91

JNZexit

;到91次了嗎?未到跳轉(zhuǎn)至exit

MOVDL,’A’

;到,顯示‘A’

MOVAH,02INT21H

MOVCX,0

;清計(jì)數(shù)值為0,重新計(jì)時(shí)exit:MOVAL,20H

;發(fā)中斷結(jié)束命令EOI

OUT20H,AL

POPAX

;恢復(fù)現(xiàn)場(chǎng)IRET;中斷返回displayENDPcodeENDSENDstart88sys08PROC、、MOVAX,0040HMOVDS,AX、、INT1CH、、MOVAL,20HOUT20H,ALIRETsys08ENDPDOS系統(tǒng)提供的08H類(lèi)型中斷子程:sys1cPROC

IRETsys1cENDPDOS系統(tǒng)提供的1CH類(lèi)型中斷子程:89系統(tǒng)08H類(lèi)型中斷子程要點(diǎn):①

進(jìn)入子程后,修改了DS段寄存器的值;②程序中調(diào)用了1CH類(lèi)型中斷子程,每執(zhí)行一次08H中斷子程,執(zhí)行一次1CH中斷子程;③程序最后發(fā)中斷結(jié)束命令EOIsys08PROC、、MOVAX,0040HMOVDS,AX、、INT1CH、、MOVAL,20HOUT20H,ALIRETsys08ENDP901CH類(lèi)型是軟中斷,按編寫(xiě)軟中斷子程方法編寫(xiě):①系統(tǒng)08H中斷子程改變DS值,故:1CH中斷子程用到定義的變量,須在子程中給DS賦值。②

1CH類(lèi)型是軟中斷,不需要發(fā)中斷結(jié)束命令。1CH類(lèi)型是系統(tǒng)為用戶(hù)保留的定時(shí)中斷子程

系統(tǒng)1CH中斷子程只有一條中斷返回語(yǔ)句,確保08H中斷子程調(diào)用后能返回。

用戶(hù)可通過(guò)編寫(xiě)1CH中斷子程實(shí)現(xiàn)具有定時(shí)功能的任務(wù)sys1cPROC

IRETsys1cENDP91思考:

08H類(lèi)型的中斷子程為何具有定時(shí)功能?

假如08H中斷子程中不發(fā)EOI,后果是什么?

1CH類(lèi)型的中斷子程為何具有定時(shí)功能?

上例(例2)改用1CH類(lèi)型的中斷子程來(lái)完成,程序如何修改?92例2

編寫(xiě)09H類(lèi)型的鍵盤(pán)中斷子程鍵盤(pán)接口鍵盤(pán)鍵盤(pán)中斷申請(qǐng)8259AIR1INTAINT8088INTRINTA60H端口61H端口8255A應(yīng)答信號(hào)掃描碼輔助電路主板IR018.2Hz方波93說(shuō)明:鍵盤(pán)接口通過(guò)8259A的IR1發(fā)中斷申請(qǐng),類(lèi)型號(hào)09H鍵盤(pán)接口對(duì)按下鍵和釋放鍵都向8259A發(fā)出中斷申請(qǐng),

即若CPU滿(mǎn)足響應(yīng)條件,對(duì)鍵盤(pán)上的一個(gè)按鍵操作,CPU將執(zhí)行兩次09H類(lèi)型的中斷子程:按下鍵一次,釋放鍵一次CPU可從60H端口讀取操作鍵的掃描碼, 每個(gè)鍵對(duì)應(yīng)有一個(gè)掃描碼(P241)由掃描碼的D6~D0判斷操作的是哪一個(gè)鍵,由掃描碼的D7位判斷是按下鍵,還釋放鍵。D7=1,釋放鍵(斷碼);D7=0,按下鍵(通碼)鍵盤(pán)中斷子程中應(yīng)發(fā)中斷結(jié)束命令94在IBMPC/XT機(jī)上,

從60H端口讀取掃描碼后,應(yīng)向鍵盤(pán)接口(61H)置應(yīng)答信號(hào),使鍵盤(pán)接口為接收下一個(gè)按鍵的掃描碼做好準(zhǔn)備。不設(shè)應(yīng)答信號(hào),鍵盤(pán)接口不能正常工作。在286以上微機(jī),讀取掃描碼后,可不置鍵盤(pán)應(yīng)答。95keyPROC

INAL,60H

;從60H端口讀入掃描碼PUSH

AX

;保存堆棧中INAL,61H;置鍵盤(pán)應(yīng)答控制信號(hào):

ORAL,80H;先將61H端口的D7位置1OUT61H,ALANDAL,7FH;再將61H端口的D7位置0OUT61H,ALPOPAX;從堆棧中取出掃描碼TESTAL,80H;檢查掃描碼的D7位JNZexit;D7=1,表示釋放鍵操作,轉(zhuǎn)至出口、、、、、、exit:MOVAL,20H

;發(fā)中斷結(jié)束命令EOI

OUT20H,AL

IRET

;中斷返回keyENDP

IBMPC/XT機(jī)上鍵盤(pán)中斷子程的編寫(xiě):96keyPROC

INAL,60H

;從60H端口讀入掃描碼TESTAL,10000000B;檢查掃描碼的D7位JNZexit;D7=1,表示釋放鍵操作,轉(zhuǎn)至出口、、、、、、exit:MOVAL,20H

;發(fā)中斷結(jié)束命令EOI

OUT20H,AL

IRET

;中斷返回keyENDP

586機(jī)上鍵盤(pán)中斷子程的編寫(xiě):97有關(guān)鍵盤(pán)(補(bǔ)充)①

鍵盤(pán)通過(guò)鍵盤(pán)接口電路與計(jì)算機(jī)連接。②

鍵盤(pán)上的鍵有三種類(lèi)型:

字符鍵A~Z,0~9等功能鍵F1~F12,PageUp等組合控制鍵Shift,Ctrl,Alt等③

鍵盤(pán)上的每個(gè)鍵都有一個(gè)掃描碼。◢◢據(jù)掃描碼可確定操作的是哪個(gè)鍵、是按下鍵還是釋放鍵;◢◢掃描碼用一個(gè)字節(jié)表示。低7位是掃描碼的數(shù)字編碼,與鍵盤(pán)上的鍵一一對(duì)應(yīng);最高位D7位表示鍵的操作狀態(tài):當(dāng)按下鍵時(shí),D7=0;當(dāng)釋放鍵時(shí),D7=198⑤

鍵盤(pán)中斷子程功能(09H類(lèi)型中斷子程)

◢從鍵盤(pán)接口讀取操作鍵的掃描碼;

◢將掃描碼轉(zhuǎn)換成字符碼;大部分鍵的字符碼為ASCII碼,無(wú)ASCII碼鍵(如組合鍵Shift、Ctrl等)的字符碼為0。◢將鍵的掃描碼、字符碼存放在鍵盤(pán)緩沖區(qū),供其它有關(guān)鍵盤(pán)的中斷子程應(yīng)用。④鍵盤(pán)接口對(duì)按下鍵和釋放鍵均向計(jì)算機(jī)發(fā)出中斷申請(qǐng),如果中斷響應(yīng)條件滿(mǎn)足,CPU轉(zhuǎn)去執(zhí)行鍵盤(pán)中斷子程。

鍵盤(pán)中斷子程類(lèi)型號(hào)為09H。99編程:編寫(xiě)鍵盤(pán)中斷子程,完成每操作鍵盤(pán)上任意鍵,屏幕上顯示’HeLLo!’100主程序鍵盤(pán)中斷子程CLI關(guān)中斷保存原09H中斷向量設(shè)置新09H中斷向量設(shè)置8259A的中斷屏蔽字,允許IR1中斷STI開(kāi)中斷主程其它工作處理(可用雙重循環(huán)延時(shí)代替)恢復(fù)原09H中斷向量返回DOS開(kāi)始保存現(xiàn)場(chǎng)開(kāi)始從60H端口讀入掃描碼N判斷是否是按下鍵?Y調(diào)09H功能顯示字符串’Hello!’發(fā)中斷結(jié)束命令EOI恢復(fù)現(xiàn)場(chǎng)IRET中斷返回101dataSEGMENTstringDB‘Hello!‘,0ah.0dh,’$’dataENDScode

SEGMENTASSUMECS:code,DS:datastart:CLI;關(guān)中斷,IF=0MOVAL,09HMOVAH,35HINT21H

;取系統(tǒng)09H類(lèi)型中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論