logo资料库

8259A中断控制器实验(含代码和思考题).doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
实验六 8259A 中断控制器实验 计算机与电子信息学院 一、实验目的 (1)学习中断控制器 8259 的工作原理。 (2)掌握可编程控制器 8259 的应用编程方法。 二、实验设备 PC 微机一台、TD-PIT+实验系统一套。 三、实验内容 1、本系统中已设计有一片 8259A 中断控制芯片,工作于主片方式,8 个中断请求输入 端 IR0,IR7 对应的中断型号为 8F,其和中断矢量关于如下表 5-3 所示。 8259 中断源 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 中断类型号 中断矢量表地址 8 9 A B C D E F 20H~23H 24H~27H 28H~2BH 2CH~2FH 30H~33H 34H~37H 38H~3BH 3CH~3FH 2、8259A 和 8088 系统总线直接相连,8259A 上连有一系统地址线 A0,故 8259A 有 2 个端口地址, 本系统中为 20H、21H。 20H 用来写 ICW1, 21H 用来写 ICW2、ICW3、 ICW4,初始化命令字写好后, 再写操作命令字。OCW2、OCW3 用口地址 20H,OCW1 用口地址 21H。图 5-14 中,使用了 3 号中断源,IR3 插孔和 SP 插孔相连,中断方式为边 沿触发方式,每按一次 AN 按钮产生一次中断信号,向 8259A 发出中断请求信号。CPU 响 应中断后,在中断服务中, 对中断次数进行计数并显示,计满 5 次结束。 3、8259A 芯片是专为控制优先级中断而设计开发的芯片。它将中断源优先级排队,辨 别中断源以及提供中断矢量的电路集于一片中。只需对 8259A 编程,就可以管理 8 级中断, 并选择优先模式和中断请求方式,即中断结构可由用户编程来设定。 4、流程图
四、实验过程 程序清单: INTR_IVADD INTR_OCW1 INTR_OCW2 INTR_IM PCI_INTCSR STACK1 SEGMENT STACK EQU 01CCH EQU 0A1H EQU 0A0H EQU 0F7H EQU 0D878H DW 256 DUP(?) STACK1 ENDS DATA SEGMENT CS_BAK DW ? IP_BAK DW ? IM_BAK DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX CLI MOV DX,PCI_INTCSR MOV AX,1F00H OUT DX,AX ADD DX,2
MOV AX,003FH OUT DX,AX MOV AX,0000H MOV ES,AX MOV DI,INTR_IVADD MOV AX,ES:[DI] MOV IP_BAK,AX MOV AX,OFFSET MYISR MOV ES:[DI],AX ADD DI,2 MOV AX,ES:[DI] MOV CS_BAK,AX MOV AX,SEG MYISR MOV ES:[DI],AX MOV DX,INTR_OCW1 IN AL,DX MOV IM_BAK,AL AND AL,INTR_IM OUT DX,AL mov cx,5h STI WAIT1: cmp cx,0h JnZ WAIT1 QUIT: CLI MOV DX,PCI_INTCSR MOV AX,0000H OUT DX,AX MOV AX,0000H MOV ES,AX MOV DI,INTR_IVADD MOV AX,IP_BAK MOV ES:[DI],AX ADD DI,2 MOV AX,CS_BAK MOV ES:[DI],AX MOV DX,INTR_OCW1 MOV AL,IM_BAK
OUT DX,AL STI MOV AX,4C00H INT 21H MYISR PROC NEAR MOV AL,39H MOV AH,0EH INT 10H MOV AL,20H INT 10H OVER: MOV DX,PCI_INTCSR ADD DX,2 MOV AX,003FH OUT DX,AX MOV DX,INTR_OCW2 MOV AL,20H OUT DX,AL MOV AL,20H OUT 20H,AL dec cx IRET MYISR ENDP CODE ENDS END START 五、实验思考 1、在编程过程中,用到了那些操作命令字? 答:<1>OCW1,用来进行屏蔽操作,直接将中断屏蔽寄存器 IMR 的相应位置位或复位。 <2> OCW2,用来设置中断结束方式和优先级循环方式 。 2、在执行中断程序之前,保存了那些断点?为什么? 答:<1>保存了 INTR 原中断处理程序入口断地址的变量,保存了 INTR 原中断处理程 序入口偏移地址的变量,保存了 INTR 原中断屏蔽字的变量。<2>因为出现在 INTR 线上的 请求信号是电平触发的,它的出现是异步的,在 CPU 内部是由 CLK 的上升沿来同步的。在 INTR 线上的中断请求信号(即有效的高电平)必须保持到当前指令的结束。
分享到:
收藏