前言
网课划水俩月不知悔改就是我本人了
问了班级大佬才弄明白一点的代码和使用方法。
实现分别控制
NOUT equ 8000h ; 数码管输出地址
ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4
ICW2 equ 01100000b ; 中断号为60H
ICW4 equ 00011001b ; 工作在8086/88 方式
OCW1 equ 10111110b ; 中断屏蔽字,只响应INT0 INT6 中断
CS8259A equ 09000h ; 8259地址
CS8259B equ 09002h
data segment
CNT DB 0
data ends
code segment 'code'
assume cs:code,ds:data,es:data
start: mov ax,data
mov ds,ax
mov es,ax
cli
mov ax,0
mov ds,ax; 00000~003ffh
mov si, ICW2*4
lea ax, int0 ;中断服务程序地址
mov [si],ax
mov ax,cs
mov [si+2],ax
;add ICW2,6h ;初始化int1
mov si, 66h*4
lea ax, int1
mov [si],ax
mov ax,cs
mov [si+2],ax
mov al, ICW1;初始化8259
mov dx, CS8259A
out dx,al
mov al,ICW2; 中断向量
mov dx,CS8259B
out dx,al
mov al, ICW4; 00011011 ICW4
out dx,al
mov dx,CS8259B
mov al,OCW1;中断屏蔽字
out dx,al
mov dx,NOUT
mov al,cnt
out dx,al
sti
LI: nop
jmp LI
;中断服务程序
int0 proc
cli
inc cnt
cmp cnt,10h
jnz int_next
mov cnt,0
int_next:mov al, cnt
mov dx,NOUT
out dx,al
mov dx,CS8259A ;非自动结束方式,发送结束EOI命令
mov al,20h
out dx,al
sti
iret
int0 endp
int1 proc
cli
add cnt,10H
cmp cnt,90h
jnz int_next1
mov cnt,0H
int_next1:mov al, cnt
mov dx,NOUT
out dx,al
mov dx,CS8259A ;非自动结束方式,发送结束EOI命令
mov al,20h
out dx,al
sti
iret
int1 endp
code ends
end start
实现优先级控制
NOUT equ 8000h ; 数码管输出地址
ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4
ICW2 equ 01100000b ; 中断号为60H
ICW4 equ 00011001b ; 工作在8086/88 方式
OCW1 equ 10111110b ; 中断屏蔽字,只响应INT0 INT6中断
CS8259A equ 09000h ; 8259地址
CS8259B equ 09002h
data segment
CNT DB 0
data ends
code segment 'code'
assume cs:code,ds:data,es:data
start: mov ax,data
mov ds,ax
mov es,ax
cli
mov ax,0
mov ds,ax; 00000~003ffh
mov si, ICW2*4
lea ax, int0 ;中断服务程序地址
mov [si],ax
mov ax,cs
mov [si+2],ax
;add ICW2,6h ;初始化int1
mov si, 66h*4
lea ax, int1
mov [si],ax
mov ax,cs
mov [si+2],ax
mov al, ICW1;初始化8259
mov dx, CS8259A
out dx,al
mov al,ICW2; 中断向量
mov dx,CS8259B
out dx,al
mov al, ICW4; 00011011 ICW4
out dx,al
mov dx,CS8259B
mov al,OCW1;中断屏蔽字
out dx,al
mov dx,NOUT
mov al,cnt
out dx,al
sti
LI: nop
jmp LI
;中断服务程序
int0 proc
go0:
add cnt,10h
mov al, cnt
mov dx,NOUT
out dx,al
sti
mov cx,10000 ;延时
loop $
jmp go0
mov dx,CS8259A ;非自动结束方式,发送结束EOI命令
mov al,20h
out dx,al
sti
iret
int0 endp
int1 proc
go1:
inc cnt
cmp cnt,10h
jnz int_next
mov cnt,0
int_next:
mov al, cnt
mov dx,NOUT
out dx,al
sti
mov cx,10000 ;延时
loop $
jmp go1
mov dx,CS8259A ;非自动结束方式,发送结束EOI命令
mov al,20h
out dx,al
sti
iret
int1 endp
code ends
end start
写在最后
发现老师的课件真的全,但是自己有印象的没有多少,网课何时才能停止划水,,
本文章5月11号之前不允许转载以及抄袭。