8259中斷程序控制實驗
【實驗目的】
1.掌握8259中斷控制的器的工作原理
2.學習8259的應(yīng)用編程方法
3.掌握8258的級聯(lián)的使用方法
【實驗原理】
1.中斷控制器8259A,在此次實驗中把主控制器的IR6,IR7以及從控制器的IR1開放出來供實驗使用,從片的int接到主片的IR2上構(gòu)成級聯(lián)
2.初始化命令字的生成規(guī)則,這個和書上的是一致的,比如ICW1中控制邊沿觸發(fā)還是電平觸發(fā),在這個實驗里,用的是邊沿觸發(fā),因此置為0;ICW2前五位代表中斷向量地址;ICW3是關(guān)于從主片的選擇的;ICW4是嵌套模式和是否禁止自動中斷。
初始化命令字ICW1~ICW4來對8359進行初始化
操作命令字OCW1~OCW3用來定義8259的控制方式
【實驗內(nèi)容】
實驗一:單中斷實驗,把單次脈沖輸出和主片的IR7相連,那么每按動一次,都作為一次外部中斷事件處理,在顯示屏上輸出一個字符‘7’。
設(shè)置中斷代碼部分:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AX,0000H
MOV ES,AX
MOV DI,3CH?????????????????????????????????????????????????? ;中斷矢量地址,目的地址偏移量即0F*4
MOV AX,OFFSET IR7???????????? ;取中斷入口地址
CLD
STOSW
MOV AX,CS?????????????????? ;段地址
STOSW
CLI
MOV AL,11H??????????? ?????????????;ICW1
OUT 20H,AL
MOV AL,08H????????????????????????? ;ICW2
OUT 21H,AL
MOV AL,04H????????????????????????? ;ICW3
OUT 21H,AL
MOV AL,01H????????????????????????? ;ICW4
OUT 21H,AL
MOV AL,6FH???????????????????????? ;0CW1
OUT 21H,AL
STI
A1:NOP
JMP A1?????????????????? ;注意這里是一個死循環(huán),是為了體現(xiàn)下面設(shè)置的IR7中斷
IR7:STI
PUSH AX
PUSH BX
PUSH CX
PUSH DX???????????????????????????????????????????????????? ;入棧保護
MOV DL,37H???????????????? ;ascll碼中7是37H
MOV AH,02H
INT 21H
MOV AL,20H?????????????????? ;OCW2
OUT 20H,AL
POP DX
POP CX
POP BX
POP AX????????????????????????????????????????????????????????
IRET
MOV AH,4CH
INT 21H
CODE ENDS
END START
這個代碼是按照書上來寫的,然后參考了一下教程里面內(nèi)容。一開始不清楚那個死循環(huán)的功能,后來才明白,入過沒有這個循環(huán),那么就順序執(zhí)行到下面的IR7了,體現(xiàn)不出這是一個“中斷”
入棧保護的那一段,保險起見,就把四個寄存器全保護起來了。
實驗截圖:

實驗二:雙中斷優(yōu)先級實驗,KK1和KK2分別連接到主片的8259A的IR7和IR6上,按一次KK1時,顯示屏出現(xiàn)顯示7,按一次KK2時,顯示字符6。由于體現(xiàn)的是中斷優(yōu)先級,所以把實驗連線改為IR7,IR6都接KK1,這樣按動KK1的時候,只要能夠先后的顯示出響應(yīng)結(jié)果,就算是實驗成功了。
中斷代碼:
?? CODE SEGMENT
ASSUME CS:CODE
START:
MOV AX,0000H
MOV ES,AX
MOV DI,3CH
MOV AX,OFFSET IR7
CLD
STOSW
MOV AX,CS
STOSW
MOV DI,38H??????????? ;中斷IR6,0E*4,中斷矢量口
MOV AX,OFFSET IR6
CLD
STOSW
MOV AX,CS
STOSW
CLI
MOV AL,11H?????????????? ????;ICW1
OUT 20H,AL
MOV AL,08H????????????? ?????;ICW2
OUT 21H,AL
MOV AL,04H??????????????????? ;ICW3
OUT 21H,AL
MOV AL,01H??????????????????? ;ICW4
OUT 21H,AL
MOV AL,2FH??????????????????? ;0CW1
OUT 21H,AL
STI
A1:NOP?????????;這里依舊有一個循環(huán)
JMP A1
IR7:STI??????????? ;中斷IR7
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DL,37H
MOV AH,02H
INT 21H
MOV AL,20H??????????????????? ;OCW2
OUT 20H,AL
POP DX
POP CX
POP BX
POP AX????????????????? ;保護以及恢復
IRET
IR6:????????????????????? ;中斷IR6
STI
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DL,36H????????????? ;ASCLL碼6的表示
MOV AH,02H
INT 21H
MOV AL,20H??????????????? ;OCw2
OUT 20H,AL???????????????
POP DX
POP CX
POP BX
POP AX???????????????????????? ;保護以恢復現(xiàn)場
IRET
MOV AH,4CH
INT 21H
CODE ENDS
END START
實驗結(jié)果:

由實驗結(jié)果可得,IR6的優(yōu)先級是比IR7的高的,這段代碼就是比上一個多了IR6的中斷服務(wù)程序。
實驗三:實現(xiàn)KK1,KK2的加減功能,摁下KK1,實現(xiàn)加一;摁下KK2實現(xiàn)減一。
與實驗二的不同點就是:1.中斷操作不同,可以先給寄存器賦一個初始值,然后中斷中一個進行加一操作INC,一個進行減一操作DEC。2.連線不同,KK1連IR7,KK2連IR6,由于摁下并不同步,所以這里不再有優(yōu)先級的考量了。
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AX,0000H
MOV ES,AX
MOV DI,3CH
MOV AX,OFFSET IR7
CLD
STOSW
MOV AX,CS
STOSW
MOV DI,38H
MOV AX,OFFSET IR6
CLD
STOSW
MOV AX,CS
STOSW
CLI
MOV AL,11H;ICW1
OUT 20H,AL
MOV AL,08H;ICW2
OUT 21H,AL
MOV AL,04H;ICW3
OUT 21H,AL
MOV AL,01H;ICW4
OUT 21H,AL
MOV AL,2FH;0CW1
OUT 21H,AL
MOV DL,37H
STI
A1:NOP
JMP A1
IR7:STI
PUSH AX
PUSH BX
PUSH CX
INC DL
MOV AH,02H
INT 21H
MOV AL,20H;OCW2
OUT 20H,AL
POP CX
POP BX
POP AX
IRET
IR6:
STI
PUSH AX
PUSH BX
PUSH CX
DEC DL
MOV AH,02H
INT 21H
MOV AL,20H
OUT 20H,AL
POP CX
POP BX
POP AX
IRET
MOV AH,4CH
INT 21H
CODE ENDS
END START
實驗結(jié)果:

【小結(jié)或討論】
這次實驗還是有難度的,周四進行的實驗,周三在課堂上寫的一個題目練習還是大有幫助的,把中斷這一章的知識點都概括一番了。這次試驗主要難點就是mov指令的書寫,課件里面的和書本有些出入,倒不如按著書本來寫,感覺可以利用這次的實驗,當作兩道例題,再加上課堂上的一道題目,好好消化一番,中斷問題應(yīng)該就差不多了。
?