;代碼如下
DATA SEGMENT ;數據段
MESS DB 'PRESS ANY KEY TO EXIT',0AH,0DH,'$'
TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,76H
INT_SEG DW ?
INT_OFF DW ?
INTSOR DB ?
FLA DB 0
DATA ENDS
STACK SEGMENT ;堆棧段
STA DW 512 DUP(?)
STACK ENDS
CODE SEGMENT ;代碼段
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,SIZE STA
MOV CL,0
MOV DX,0283H 8253和8255的初始化
MOV AL,36H
OUT DX,AL
MOV DX,0280H ;8253初始化
MOV AL,0E8H
OUT DX,AL
MOV AL,03H
OUT DX,AL
MOV DX,0283H
MOV AL,76H
OUT DX,AL
MOV DX,0281H
MOV AL,0E8H
OUT DX,AL
MOV AL,03H
OUT DX,AL
MOV DX,028BH ;8255初始化
MOV AL,90H
OUT DX,AL
MOV AL,0BH
MOV AH,35H ;取該中斷向量
INT 21H
MOV INT_SEG,ES ;保存向量段基址
MOV INT_OFF,BX ;保存向量偏移量
CLI ;修改向量前關中斷
PUSH DS
;填寫中斷向量表
MOV AX,SEG INT_PR
MOV DS,AX
MOV DX,OFFSET INT_PR
MOV AL,0BH
MOV AH,25H
INT 21H
IN AL,21H
MOV INTSOR,AL ;保護原中斷屏蔽字
AND AL,0F7H ;開放中斷請求
OUT 21H,AL ;開中斷
POP DS
STI
LEA DX,MESS
MOV AH,09H
INT 21H
STI
LOOPA:
HLT
MOV AH,01H
INT 16H
JZ LOOPA
CLI
MOV AX,INT_SEG
MOV DS,AX ;DS指向向量段基址
MOV DX,INT_OFF ;DX指向向量偏移量
MOV AL,0BH
MOV AH,25H ;恢復中斷向量
INT 21H
MOV AL,INTSOR ;恢復原中斷屏蔽字
OUT 21H,AL
STI
;中斷子程序
INT_PR PROC
PUSH DS
STI
MOV DX,0288H
IN AL,DX
CMP AL,0FH
JA LOP1 ;大于0fh跳轉至lop1
MOV BX, OFFSET TAB ;display 低四位
XLAT ;查表
JMP LOP3
LOP1: CMP FLA,0
JNZ LOP2
MOV AL,76H ;數碼管置為 'H'
MOV DX,0289H
OUT DX,AL
INC FLA
JMP LOP4
LOP2: MOV CL,4 ;display 高四位
SHR AL,CL
MOV BX,OFFSET TAB
XLAT ;查表
MOV DX,0289H
OUT DX,AL
DEC FLA
JMP LOP4
LOP3: MOV DX,0289H
OUT DX,AL
LOP4: CLI
POP DS
MOV AL,20H
OUT 20H,AL
STI ;開中斷
IRET
INT_PR ENDP
CODE ENDS
END START
電路圖如下
51hei.png (27.26 KB, 下載次數: 51)
下載附件
2020-7-12 13:10 上傳
51hei1.png (36.06 KB, 下載次數: 74)
下載附件
2020-7-12 13:10 上傳
|