📄 8259.asm
字号:
CODE SEGMENT
ASSUME CS:CODE
INTPORT1 EQU 0020H ;中断口
INTPORT2 EQU 0021H
TCONTRO EQU 0073H ;8255命令口
TB EQU 0071H ;8255 B口
CONTPORT EQU 00DFH ;8279命令口
DATAPORT EQU 00DEH ;8279数据口
DATA1 EQU 0500H ;显示 ‘8259-A03’数据区
ORG 1000H ;代码区开始
JMP START
START: JMP MAIN
MAIN: CALL FORMAT
CALL LEDDISP
MOV AX,0H
MOV DS,AX
CALL WRINTVER ;置中断矢量
MOV DX, TCONTRO ;8255初始化
MOV AL, 0E1H
OUT DX, AL
MOV DX, INTPORT1 ;8259A初始化ICW1
MOV AL, 13H ;电平触发则1B
OUT DX,,AL
MOV DX, INTPORT2 ;8259A初始化ICW2
MOV AL, 08H
OUT DX, AL
MOV AL, 01H ;8259A初始化ICW4
OUT DX, AL
MOV AL, 0F7H ;开IR3的中断
OUT DX, AL
MOV CX, 00FAH
STI ;开CPU的中断
WATING:JMP WATING ;主程序,死等待
WRINTVER:
MOV AX,0H
MOV ES,AX
MOV DI,002CH ;置中断矢量
LEA AX,INTIRQ3
STOSW
MOV AX,CS
STOSW
RET
INTIRQ3:
PUSH AX
PUSH DX
PUSH DI ;保护现场
CLI ;关中断
MOV AX, CX ;交替点亮LED指示灯
AND AL, 01H
MOV DX, TB
OUT DX, AL
DEC CX
CMP CX, 00H
JZ RE
MOV AL,20H ;如果是非自动结束,则发中断结束命令
MOV DX,INTPORT1
OUT DX,AL
STI ;开中断
POP DI
POP DX
POP AX ;恢复现场
IRET
RE: HLT
LEDDISP:MOV AL, 90H
MOV DX, CONTPORT
OUT DX, AL
MOV BYTE PTR DS: [0600H],00
LED1: CMP BYTE PTR DS: [0600H], 07H
JA LED2
MOV BL, DS: [0600H]
MOV BH, 0H
MOV AL, CS: [BX+DATA1]
MOV DX, DATAPORT
OUT DX, AL
ADD BYTE PTR DS: [0600H], 01H
JNZ LED1
LED2: RET
FORMAT: MOV BX, 0
MOV WORD PTR DS: [BX+0500H], 3F4FH ;’8259-A03’
ADD BX, 2
MOV WORD PTR DS: [BX+0500H], 4077H
ADD BX, 2
MOV WORD PTR DS: [BX+0500H], 6D6FH
ADD BX, 2
MOV WORD PTR DS: [BX+0500H], 7F5BH
RET
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -