EXTRN InitKeyDisplay:NEAR, Display8A:NEAR
IO8259_0 EQU 0250H
IO8259_1 EQU 0251H
_STACK SEGMENT STACK
DW 100 DUP(?)
_STACK ENDS
_DATA SEGMENT WORD PUBLIC 'DATA'
BUFFER DB 8 DUP(?)
Counter DB ?
num DW ?
ReDisplayFlag DB 0
_DATA ENDS
CODE SEGMENT
START PROC NEAR
ASSUME CS:CODE, DS:_DATA, SS:_STACK
MOV AX,_DATA
MOV DS,AX
MOV ES,AX
NOP
CALL InitKeyDisplay
CALL Init8259
CALL WriIntver
MOV Counter,0 ;中断次数
MOV num,5 ;主程序次数,不能为 0
MOV ReDisplayFlag,1 ;需要显示
STI ;开中断
START1: LEA SI,Buffer
CALL LedDisplay
CALL Display8A
DEC num
CMP num,0
JNZ START1
MOV num,2000
JMP START1
Init8259 PROC NEAR ;编写 8259A 的初始化程序
MOV DX,IO8259_0 ; 8259A 边沿触发,单片使用,需要设置 ICW4
MOV AL,13H ;非缓冲方式,非自动 EOI
OUT DX,AL ;开放 IR0 中断请求,其余屏蔽
MOV DX,IO8259_1 ;
MOV AL,08H
OUT DX,AL
MOV AL,01H
OUT DX,AL
MOV AL,0FEH
OUT DX,AL
RET
Init8259 ENDP
WriIntver PROC NEAR
PUSH ES
MOV AX,0
MOV ES,AX
MOV DI,20H
LEA AX,INT_0
STOSW
MOV AX,CS
STOSW
POP ES
RET
WriIntver ENDP
LedDisplay PROC NEAR
MOV AX,num
MOV BL,200
DIV BL
AND AL,0FH
MOV Buffer + 1,AL
MOV AL,AH
XOR AH,AH
MOV BL,20
DIV BL
AND AL,0FH
MOV Buffer,AL
MOV AL,Counter
MOV AH,AL
AND AL,0FH
MOV Buffer + 2,AL
AND AH,0F0H
ROR AH,4
MOV Buffer + 3,AH
MOV Buffer + 4,10H ;高四位不需要显示
MOV Buffer + 5,10H
MOV Buffer + 6,10H
MOV Buffer + 7,10H
RET
LedDisplay ENDP
INT_0: PUSH DX
PUSH AX
MOV AL,Counter
ADD AL,1
DAA
MOV Counter,AL
MOV DX,IO8259_0
MOV AL,20H
OUT DX,AL
POP AX
POP DX
IRET
START ENDP
CODE ENDS
END START
中断控制器8259实验
转载下一篇:1-1汇编语言程序上机调试

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
8259A可编程中断控制器
微机原理与接口技术 学习笔记(三) 中断系统与8259A(DMA待添加)
linux 微机原理 寻址 操作命令 -
EXTI—外部中断事件控制器
外部中断概述 STM32F4的每个IO都可以作为外部中断输入。
外部中断 中断向量 #include -
中断控制器移植
//=====================================================================//TITLE:// 中断控制
#define xml #include microsoft 复制文件