实验七-8259中断控制器实现

更新时间:2023-09-29 11:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机科学与技术系

实 验 报 告

专业名称 计算机科学与技术 课程名称 微机原理与接口技术 项目名称 8259A中断控制实验

班 级

学 号 姓 名

同组人员 无

实验日期 2016/06/28

一、实验目的与要求

1、了解8259的内部结构,工作原理;了解8259A与8088的接口逻辑;掌握对8259A

的初始化编程方法,了解8088是如何响应中断、退出中断的。

二、实验逻辑原理图与分析(汇编—流程图) 2.1 画实验逻辑原理图

2.2 逻辑原理图分析

实验原理与分析:由于实验中需拨动单脉冲开关,送给8259A的IR0,触发中断,8088计数中断次数,显示于G5区的数码管上。故8259中断控制实验需要8259A芯片,8282地址锁存器,用于8086CPU与8259A芯片地址线的连接,8286收发器用于8086CPU与8259A芯片数据线的连接,通过地址译码器实现片选信号(CS)的选通。

三、 程序分析 3.1程序代码分析

.MODEL TINY

EXTRN Display8:NEAR ;装入外部程序块 IO8259_0 EQU 0F000H IO8259_1 EQU 0F001H .STACK 100 .DATA

BUFFER DB 8 DUP(?) Counter DB ? ReDisplayFlag DB 0 .CODE

START: MOV AX,@DATA

MOV DS,AX MOV ES,AX NOP

CALL Init8259 CALL WriIntver MOV Counter,0 ;中断次数 MOV ReDisplayFlag,1 ;需要显示 STI ;开中断 START1: CMP ReDisplayFlag,0 JZ START1

CALL LedDisplay MOV ReDisplayFlag,0 JMP START1

Init8259 PROC NEAR MOV DX,IO8259_0

mov al,13h ;ICW1:0001 0011 上升沿触发,间隔为8,单片工作故没有ICW3,写ICW4 out dx,al

mov dx,IO8259_1

mov al,08h ;ICW2:0000 1000 中断类型码为:00001,用的中断请求为IR0 out dx,al mov al,09h ;ICW4:0000 1001 000为ICW4的标识码,采用一般嵌套,缓冲方式,正常EOI,8086/8088系统 out dx,al

mov al,0feh ;OCW1:1111 1110 屏蔽其他IR,允许IR0发送中断请求 out dx,al

RET

Init8259 ENDP

WriIntver PROC NEAR PUSH ES MOV AX,0 MOV ES,AX MOV DI,20H ;20H~23H是IR0的矢量地址 LEA AX,INT_0

STOSW ;把INT_0的偏移地址写到ES:DI指向的内存单元中 MOV AX,CS

STOSW ;把段基址存入ES:DI的内存单元中 POP ES RET

WriIntver ENDP

LedDisplay PROC NEAR MOV AL,Counter MOV AH,AL AND AL,0FH ;0000 0001和0000 1111相与为0000 0001 MOV Buffer,AL ;第八位 AND AH,0F0H ;0000 0001和1111 0000想与为0000 0000 ROR AH,4 ;0000 0000 MOV Buffer + 1,AH ;高八位 MOV Buffer + 2,10H ;高六位不需要显示 MOV Buffer + 3,10H MOV Buffer + 4,10H MOV Buffer + 5,10H MOV Buffer + 6,10H MOV Buffer + 7,10H LEA SI,Buffer CALL Display8 RET LedDisplay ENDP

INT_0: PUSH DX PUSH AX MOV AL,Counter ADD AL,1 DAA MOV Counter,AL MOV ReDisplayFlag,1 MOV DX,IO8259_0

MOV AL,20H OUT DX,AL POP AX POP DX IRET END START

初始化8259,初始化命令字ICW1(设置8259的工作方式),ICW2(设置中断类型码),ICW4(方式控制初始化命令字,设置中断结束方式):

Init8259 PROC NEAR ;初始化命令字ICW1,

D0 D1 D2 D3 D4 D5 D6 D7 1 1 0 0 1 0 0 0 写ICW4 单片工作 上升沿触发 特征位

MOV DX,IO8259_0

MOV AL,13H OUT DX,AL

;初始化命令字ICW2,08H中断请求引脚为IR0

D0 D1 D2 D3 D4 D5 D6 D7 0 0 0 0 1 0 0 0 MOV DX,IO8259_1 MOV AL,08H OUT DX,AL

;初始化命令字ICW4,16位8086系统,一般嵌套(D4为0),正常EOI,即中断结束后要求发EOI命令结束中断,并复位ISR(清零)

缓冲方式 D0 D1 D2 D3 D4 D5 D6 D7 1 0 0 1 0 0 0 0 16位系统 正常EOI MOV AL,09H OUT DX,AL

初始化OCW1,设置和清除中断屏蔽寄存器,只响应IR0中断,屏蔽IR1到IR7中断

D0 D1 D2 D3 D4 D5 D6 D7 0 1 1 1 1 1 1 1 初始化命令字ocw2 D0 D1 D2 D3 D4 D5 D6 D7 0 0 0 0 0 1 0 0 四、实验数据和结果分析

4.1 实验结果数据 实验结果: 12 4.2 结果数据分析

单脉冲被按下12次,执行12次中断服务程序,中断程序的功能就是统计中断执行的次数,每按一下单脉冲,Counter就加一次,并通过LED显示,LED只显示低两位,所以实验结果为:12。

五、实验问题分析、思考题与小结

5.1实验问题分析、思考题

在实验进行过程中,老师抛出一个问题是中断发生的地方,第一次实验,大家都没想过这个问题,后来实验课上通过单步执行程序和同学一起讨论,找到了断点处,断点处不固定,只要按下单脉冲(上升沿触发)并单步执行就是执行中断服务程序。 5.2实验小结

通过分支实验,使我熟悉了使用断点、单步进入、单步运行找到断点处,了解了每次中断结束,ISR(中断服务寄存器)的相应位清零,即复位,以及响应中断前要做的工作:关闭中断,保护断点,写中断向量表,即中断服务程序的段基址写入CS、偏移地址写入IP,以便在执行中断服务程序时,找到其入口地址。

本文来源:https://www.bwwdw.com/article/pchd.html

Top