实验四 8259外部中断实验
姓名: 学号: 班级:
1、实验要求:
用8088/86控制8259可编程中断控制器,实现对外部中断的响应和处理。要求程序中对每次中断进行计数,并将计数结果显示在LED数码管上。
2、实验目的:
(1)学习8088/86与8259的连接方法。 (2)学习8088/86对8259的控制方法。
3. 实验器材:
(1)G2010+实验平台 1 台 (2)G6W仿真器 1 台
(3)连线 若干 根 (4)8259芯片 1 片 (5)万用表 1 块 (6)Lab8088板 1 块
4、实验电路:
5、实验说明:
编程时注意:(1)正确地设置可编程中断控制和工作方式。(2)必须正确地设置中断服务程序地址。8259可外接8个中断源,本实验只响应INT0中断,8259也可以多级连接以响应多个中断源。实验时,将单脉冲信号接到8259的INT0脚。每次中断时,可看到LED显示会加1。 6、实验框图: 输出计数值 设置中断服务程序地开 计数值加1 中断入口 设置中断控制器工作方式 中断允许 输出中断结束命令 等待中断 中断返回 主程序框图 EXTINT中断子程序框图 7、程序清单:(IN8088A/B04.ASM) OUTBIT equ 0e101h ; 位控制口
CLK164 equ 0e102h ; 段控制口(接164时钟位) DAT164 equ 0e102h ; 段控制口(接164数据位)
ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4 ICW2 equ 00100000b ; 中断号为20H
ICW4 equ 00000001b ; 工作在8086/88 方式 OCW1 equ 11111110b ; 只响应INT0 中断 CS8259A equ 0A000h ; 8259地址 CS8259B equ 0A001h
data segment
LEDBuf db 6 dup(?) ; 显示缓冲 Num db 1 dup(?) ; 显示的数据 DelayT db 1 dup(?)
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h CNT db 0 data ends
code segment
assume cs:code, ds: data
Delay proc near
push ax ; 延时子程序 push cx
mov al, 0 mov cx,ax loop $
pop cx pop ax ret Delay endp
DisplayLED proc near
mov bx, offset LEDBuf
mov cl, 6 ; 共6个八段管 mov ah, 00100000b ; 从左边开始显示 DLoop:
mov dx, OUTBIT mov al, 0
out dx,al ; 关所有八段管 mov al, [bx]
mov ch, 8 ; 送164 DLP:
push ax mov ah, 0 test al, 80h jz GN1 mov ah, 1 GN1:
mov dx, DAT164 ; 输出数据位 mov al, ah and al,0fdh out dx, al
mov dx, CLK164 ; 送出时钟脉冲 ;mov al, 1 or al,02h out dx, al
;mov al, 0 and al,0fdh out dx, al
pop ax shl al, 1 dec ch jnz DLP
mov dx, OUTBIT mov al, ah
out dx, al ; 显示一位八段管
push ax mov ah, 1 call Delay
pop ax
shr ah, 1 inc bx dec cl jnz DLoop
mov dx, OUTBIT mov al, 0
out dx,al ; 关所有八段管 ret
DisplayLED endp
IEnter proc near push ax push dx
inc CNT
mov dx, CS8259A
mov al, 20h ; 中断服务程序结束指令 out dx, al
pop dx pop ax iret IEnter endp
IInit proc
mov dx, CS8259A mov al, ICW1 out dx, al
mov dx, CS8259B mov al, ICW2 out dx, al
mov al, ICW4 out dx, al
mov al, OCW1
out dx, al ret IInit endp
Start proc near cli
mov ax, data 实验截图:
实验总结:
通过这个实验,我基本了解了如何用8088/86控制8259可编程中断控制器,实现对外部中断的响应和处理。这个实验时本学期实验课的最后一节,实验过程还是比较简单,按照实验步骤就能做完这个实验,并且在能够在LED数码管上显示,前面四位显示8259芯片号,后面两位显示计数器的值,这个数值是两位的16进制数。通过老师的讲解更加了解整个程序的具体操作。