一、實驗目的
練習8259中斷控制器的使用
繼續練習8255驅動LED的顯示。
掌握PC機中斷處理系統的基本原理。
學會編寫中斷服務程序。
二、實驗內容
要求:8259是用來管理中斷請求的,題目使用單脈衝發生電路,產生單脈衝作爲中斷源,引入8259,由中斷服務程序記錄中斷的次數(0-9,有能力的同學擴展下,做兩位數字的顯示),並在LED顯示器上顯示出來。
背景知識: PC機用戶可使用的硬件中斷只有可屏蔽中斷,由8259中斷控制器管理 。中斷控制器用於接收外部的中斷請求信號,經過優先級判別等處理後向CPU發出可屏蔽中斷請求。IBMPC、PC/XT機內有一片8259中斷控制器對外可以提供8箇中斷源:
8箇中斷源的中斷請求信號線IRQ0~IRQ7在主機的62線ISA總線插座中可以引出,系統已設定中斷請求信號爲“邊沿觸發”,普通結束方式。對於PC/AT及286以上微機內又擴展了一片8259中斷控制,IRQ2用於兩片8259之間級連,對外可以提供16箇中斷源:
中斷源 |
中斷類型號 |
中斷功能 |
中斷源 |
中斷類型號 |
中斷功能 |
IRQ0 |
08H |
時鐘 |
IRQ8 |
070H |
實時時鐘 |
IRQ1 |
09H |
鍵盤 |
IRQ9 |
071H |
用戶中斷 |
IRQ2 |
0AH |
保留 |
IRQ10 |
072H |
保留 |
IRQ3 |
OBH |
串行口2 |
IRQ11 |
O73H |
保留 |
IRQ4 |
0CH |
串行口1 |
IRQ12 |
074H |
保留 |
IRQ5 |
0DH |
硬盤 |
IRQ13 |
075H |
協處理器 |
IRQ6 |
0EH |
軟盤 |
IRQ14 |
076H |
硬盤 |
IRQ7 |
0FH |
並行打印機 |
IRQ15 |
077H |
保留 |
本實驗箱中使用了一級的8259中斷控制器。其偶地址端口地址:2B0H,基地址端口2B1H
8255的端口地址:
C8255 equ 28ah
K8255 equ 28bh
A8255 equ 288h
LED顯示0-9段碼:3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
電路連接:
- 8259片選CS--Y6(2B0H)
- 8259的INTA接+5V
- 8259的請求IN0—單脈衝
- 8255選通端:PC0-S0、
- 8255段碼端:PA0-a、PA1-b、PA2-c、PA3-d、PA4-e、PA5-f、PA6-g、PA7-dp
- 8255的CS接288H
四、實驗報告
- 8259的命令字各位的含義,本程序中設置的意義。
- 8259初始化的方法和步驟。
- 寫出程序代碼,並適當加註釋
DSEG SEGMENT
O8259 EQU 2B0H ;8259偶地址端口
J8259 EQU 2B1H ;8259奇地址端口
K8255 EQU 28BH ;8255控制口地址
A8255 EQU 288H ;8255A口地址
C8255 EQU 28AH ;8255C口地址
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DSEG ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DSEG
START:
MOV AX, DSEG
MOV DS, AX
MOV BX, OFFSET LED
;初始化8259
MOV DX, O8259 ;8259偶地址端口
MOV AL, 13H ;控制字13H=00010011B,從右到左:要寫ICW4、單片、間隔爲8、上升沿觸發
OUT DX, AL ;ICW1
MOV DX, J8259 ;8259奇地址端口
MOV AL, 00H ;控制字00H=00000000B
OUT DX, AL ;ICW2
MOV DX, J8259 ;8259奇地址端口
MOV AL, 01H ;控制字01H=00000001B,從右到左:D08086/88系統、D1正常EOI、D2D3非緩衝方式、D4一般嵌套
OUT DX, AL ;ICW4
MOV DX, J8259 ;8259奇地址端口
MOV AL, 00H ;控制字00H=00000000B
OUT DX, AL ;OCW1
MOV DX, K8255 ;8255控制端口
MOV AL, 80H ;控制字80H=10000000B
OUT DX, AL ;將控制字寫入控制端口
MOV DX, C8255 ;8255C口地址
MOV AL, 00000001B ;只讓LED的第一位顯示
OUT DX, AL ;寫入C口
S1: ;顯示
MOV DX, A8255 ;8255A口地址,輸出需要顯示的字符
MOV AL, DS:[BX] ;顯示的字
OUT DX, AL ;輸出到A口
S2:
MOV AL, 0CH ;控制字0CH=00001100B
MOV DX, O8259 ;8259偶地址端口
OUT DX, AL ;OCW3
IN AL, DX ;從8259偶地址端口讀中斷狀態
MOV AH, AL
AND AL, 80H ;判斷是中斷
JZ S2 ;跳到P2段,JZ此前的結果爲0的時候跳轉
AND AH, 07H ;判斷是IRO
JZ S3 ;跳到P3段
MOV DX, O8259 ;8259偶地址端口
MOV AL, 20H ;控制字20H=00100000B,001EOI命令
OUT DX, AL ;OCW2
JMP S2
S3:
INC BX ;BX指向數組下一個元素
CMP BX, 10 ;判斷BX是否小於10
JE START ;跳到開始處
MOV DX, O8259 ;8259偶地址端口
MOV AL, 20H ;控制字20H=00100000B
OUT DX, AL ;寫OCW2命令,使ISR的相應位復位(即發EOI命令)
JMP S1 ;跳轉到P1
CODE ENDS
END START