微机实验8255方式1

题目要求:
每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务:依次输出01H、02H、……80H使得L0~L7依次发光,中断8次结束。
输出电路:
这里写图片描述
代码:

data segment
count db 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax

cli;关中断
push ds
;设置新的中断向量
mov dx,offset intr
mov ax,seg intr
mov ds,ax
mov ax,250bh;设外部终端intr类型号为08h
int 21h;将外部中断服务程序intr入口地址填入中断向量表
pop ds;恢复ds
;设置中断掩码
in al,21h;读取旧的中断屏蔽字
push ax;保存在堆栈中
and al,0f7h;允许IR3
out 21h,al
;初始化设置8255
mov dx,28bh
mov al,0a0h
out dx,al;A口方式1输出
mov al,0dh
out dx,al;将pc6置位
mov bl,1

sti;开中断

again:
cmp count,8
jb again;中断8次后退出


cli;关中断

pop ax;弹出旧的中断屏蔽字
out 21h,al;回复旧的中断屏蔽字
sti
mov ax,4c00h
int 21h

intr proc
    ;cli
    push ax
    ;push bx
    push ds
    push si

    mov al,bl
    mov dx,288h
    out dx,al

    mov al,20h
    out 20h,al;EOI

    shl bl,1
    inc count

    pop si
    pop ds
    ;pop bx
    pop ax
    ;sti
    iret
intr endp

code ends
    end start  

这个代码写的复杂了一些,很多没有用上。以后要力求简单!
如果遇见同班的同学,大家千万别照抄,看看就好,因为这个作业两个老师都看过了,因为写成这样,所以印象应该很深。拜托(^人^)

猜你喜欢

转载自blog.csdn.net/Han_L/article/details/78836778