设微机系统外扩一片8255A,相应的实验电路如下图所示。要求利用微机日时钟1CH中断,实现发光二级管LED点亮1秒钟后,再熄灭1秒,循环往复。当主机键盘按下任意键时,程序结束
时间: 2024-03-07 16:49:45 浏览: 76
以下是一个基于8086汇编语言的8255A中断程序,实现LED点亮1秒钟后熄灭1秒钟的循环,并在键盘按下时结束程序。请根据实际情况进行调整和修改:
```
; 定义端口地址和控制字
PORT_A equ 0A000H
PORT_C equ 0A002H
CTRL_WORD equ 82H
; 初始化8255A控制字
INIT:
mov al, CTRL_WORD
out PORT_C, al
ret
; 延时函数
DELAY:
push ax
push bx
push cx
push dx
mov cx, 0FFFFH
mov dx, 0FFFFH
mov ax, 0FFFFH
loop1:
loop loop1
dec ax
jnz loop1
dec cx
jnz loop1
pop dx
pop cx
pop bx
pop ax
ret
; 中断服务程序
INTERRUPT:
push ax
push bx
push cx
push dx
in al, PORT_A ; 读取端口A状态
or al, 01H ; 将最低位设置为1,点亮LED
out PORT_A, al ; 输出到端口A
call DELAY ; 延时1秒钟
xor al, 01H ; 将最低位取反,熄灭LED
out PORT_A, al ; 输出到端口A
call DELAY ; 延时1秒钟
pop dx
pop cx
pop bx
pop ax
iret
; 主程序
MAIN:
call INIT ; 初始化8255A
mov ah, 35H ; 设置1CH中断向量表
mov al, 9 ; 1CH中断服务程序入口地址
int 21H
mov ah, 25H ; 设置键盘中断向量表
mov al, 9 ; 键盘中断服务程序入口地址
int 21H
mov al, 20H ; 开启中断
out 20H, al
mov al, 0 ; 清除中断屏蔽位
out 21H, al
mov ah, 4CH ; 程序结束
int 21H
; 1CH中断服务程序入口
mov al, 20H
out 20H, al
jmp INTERRUPT
; 键盘中断服务程序入口
mov al, 20H
out 20H, al
mov ah, 1
int 16H
cmp al, 0
jne EXIT
jmp INTERRUPT
; 程序结束
EXIT:
mov ah, 4CH
int 21H
```
请注意,以上程序仅供参考,并未在实际环境下测试运行,可能存在错误和不足之处。需要根据实际情况进行修改和完善。
阅读全文