计算机科学与技术系
实 验 报 告
专业名称 计算机科学与技术 课程名称 微机原理与接口技术 项目名称 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,以便在执行中断服务程序时,找到其入口地址。
实验七-8259中断控制器实现



