实验内容:
按动按钮模拟发送一次外部中断,控制小灯的的变换
实验思路:
外部(开关)向8259发送中断信号,8259处理之后向CPU发出中断请求信号INTR,CPU之后向8259发送中断响应信号INTA*,在第二个INTA*脉冲到来之前8259向CPU发送中断类型号,CPU根据中断向量表找到相应中断服务程序的地址并且转到相应的程序运行,程序中选中IO2*接口输出相应数据控制小灯的亮暗。
实验过程:
(1)画电路图
(2)在EMU8086中写好代码并且编译完(点击compile)形成MS-DOS程序
(3)将代码安装到8086CPU中
安装过程:点击8086弹出以下界面
将MS-DOS文件路径添加在Program File中
设置代码代码段段地址<此实验设置段地址是800h>
选中Internal Memory Size能够设置代码段长度
proteus仿真图:
实验代码:
org 100h
start: cli
;设置中断向量
mov ax,0
mov es,ax
mov si,60h*4
mov ax,offset int0
mov es:[si],ax
mov ax,800h ;8086仿真模型中程序装入段地址
mov es:[si+2],ax
;8259初始化
mov dx,20h ;8259偶地址,设置ICW1
mov al,13h ;边沿触发,单片,ICW4 NEEDED
out dx,al
mov dx,22h ;8259奇地址,设置ICW2
mov al,60h ;中断类型号为60h
out dx,al
mov al,03h ;ICW4,自动清除中断,8086CPU
out dx,al
mov al,00h ;OCW1, 开放所有中断
out dx,al
;设置指示灯的初始状态
mov bl,1
mov al,bl
mov dx,40h
out dx,al
sti
lp:
jmp lp
int0:
rol bl,1 ;cnt=cnt<<1
mov al,bl
mov dx,40h ;led=cnt<<1
out dx,al
iret ;返回主程序
ret