logo资料库

微机原理实验报告-8259/8255/8254.doc

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
微机原理实验报告 学 院 信息工程学院 班 级 电 062 班 姓 学 名 号 指导教师 董洁 课程名称 微机原理
2008 年 12 月 2
实验十一 8259中断控制器应用实验 一、实验目的 1. 学习中断控制器8259的工作原理; 2. 掌握可编程控制器 8259 的应用编程方法。 二、实验内容 1. 利用PC机给实验系统分配的中断线,设计一个单中断应用。使用单次脉冲模拟中断 产生。编写中断处理程序,在显示器屏幕上显示一个字符。 2. 利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。编写程序对 8259控制器的IR0和IR1中断请求进行处理。 三、实验步骤 1.单中断应用实验 本实验要求使用总线上INTR中断请求线完成一次单中断应用实验。中断处理程序完成 在屏幕上的显示字符“5”。实验前先运行CHECK程序,得到INTR所对应的中断号、相 应的初始化命令字寄存器ICW及操作命令字寄存器OCW的地址、开屏蔽的命令字、中 断矢量地址和PCI卡中断控制寄存器INTCSR的地址。得到这些信息后就可以开始设计 实验了。参考程序流程下图所示。 3
实验步骤如下: 1. 确认从PC机引出的两根扁平电缆已经连接在实验平台上; 2. 首先运行CHECK程序,查看INTR中断号及相关信息; 3. 参考实验流程图编写程序,然后编译链接; 4. 将单次脉冲单元的KK1+连接到系统总线上的INTR; 5. 运行程序,按动KK1+按键,观察中断是否产生。 2.扩展多中断源实验 利用实验平台上的8259控制器,可以对总线上的INTR进行扩展。将8259的INT连接到INTR,8259 的8路中断请求线IR0~IR7就成了单一INTR中断请求线的扩充。这8路中断源共用INTR的中断 矢量,共用INTR的中断服务线程。在INTR的中断服务线程 中通过对8259 OCW3的查询,以确 定是IR0~IR7中哪个产生中断,然后转到相应的服务线程进行处理。将8259的OCW3中P位置1 即可执行查询,查询字格式如下图所示。 本实验要求实现8259控制器IR0、IR1两路中断。用KK1+和KK2+模拟两个中断源,在IR0 对应的服务程序中显示字符“0”,在IR1对应的服务程序中显示字符“1”。 实验步骤如下: 1. 确认从PC机引出的两根扁平电缆已经连接在实验平台上; 2. 首先运行CHECK程序,查看INTR中断号及相关信息; 3. 参考实验流程图编写程序,然后编译链接; 4. 参考实验接线图连接实验电路; 5. 运行程序,按动KK1+、KK2+按键,观察中断响应是否正常。 四、思考题 1、单中断与多中断有何不同? 答:对于单中断可直接使用总线上INTR中断请求线完成一次单中断,而不需要不用 8259。多中断源时,需要使用8259对总线上INTR进行扩展。将8259的INT连接到INTR, 8259的多路中断就成了单一INTR中断的扩充。这时就需要对8259的一系列寄存器进行初 始化设置,以确定中断的使用情况,包括优先级等。 2、如何改变中断优先级的顺序? 答:通过设置8259的OCW2,来改变中断优先级的顺序。常见的中断优先级管理的方式有: 全嵌套方式、特殊嵌套方式、优先级自动循环方式、优先级特殊循环方式、查询方式。 五、实验报告内容及要求 1.按步骤分析实验原理及实验过程中存在的问题。 本实验应注意的问题是对ISR内容清零,清除ISR常见的方法有两种。一、 4
初始化8259A时,设置8259A工作方式为自动清零方式。二、初始化8259A 时,设置8259A工作方式为非自动清零方式,需要在中断子程序中,通 过软件方式清零,即通过往OCW2写入20H实现。 2.附中断处理程序清单 实验1的参考程序如下: ;***************根据 CHECK 配置信息修改下列符号值******************* INTR_IVADD EQU EQU INTR_OCW1 01CCH 0A1H ;INTR 对应的中断矢量地址 ;INTR 对应 PC 机内部 8259 的 OCW1 地 址 址 INTR_OCW2 EQU 0A0H ;INTR 对应 PC 机内部 8259 的 OCW2 地 INTR_IM EQU PCI_INTCSR EQU 0F7H 0DF38H ;INTR 对应的中断屏蔽字 ;PCI 卡中断控制寄存器地址 ;***************************************************************** STACK1 SEGMENT DW STACK1 ENDS STACK 256 DUP(?) DATA SEGMENT MES DB CS_BAK DW IP_BAK DW IM_BAK DB DATA ENDS 量 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' ? ? ;保存 INTR 原中断处理程序入口段地址的变量 ;保存 INTR 原中断处理程序入口偏移地址的变 ? ;保存 INTR 原中断屏蔽字的变量 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV MOV MOV MOV INT CLI AX,DATA DS,AX DX,OFFSET MES AH,09H 21H ;显示退出提示 MOV SUB IN MOV MOV DX,PCI_INTCSR DX,19H AL,DX DX,PCI_INTCSR AX,1F00H ;初始化 PCI 卡中断控制寄存器 ;向 PCI_INTCSR 中写入 003F1F00H 5
OUT ADD MOV OUT MOV MOV MOV MOV MOV MOV MOV ADD MOV MOV MOV MOV DX,AX DX,2 AX,003FH DX,AX ;替换 INTR 的中断矢量 AX,0000H ES,AX DI,INTR_IVADD AX,ES:[DI] IP_BAK,AX AX,OFFSET MYISR ES:[DI],AX ;设置当前中断处理程序入口偏移地址 ;保存 INTR 原中断处理程序入口偏移地址 DI,2 AX,ES:[DI] CS_BAK,AX AX,SEG MYISR ES:[DI],AX ;设置当前中断处理程序入口段地址 ;保存 INTR 原中断处理程序入口段地址 MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开 INTR 的屏 蔽位 IN MOV AND OUT AL,DX IM_BAK,AL AL,INTR_IM DX,AL ;保存 INTR 原中断屏蔽字 STI WAIT1: MOV INT JZ QUIT: CLI MOV MOV OUT MOV MOV MOV MOV MOV ADD MOV AH,1 16H WAIT1 ;判断是否有按键按下 ;无按键则跳回继续等待,有则退出 DX,PCI_INTCSR AX,0000H DX,AX ;恢复 PCI 卡中断控制寄存器 ;恢复 INTR 原中断矢量 AX,0000H ES,AX DI,INTR_IVADD AX,IP_BAK ES:[DI],AX DI,2 AX,CS_BAK 6 ;恢复 INTR 原中断处理程序入口偏移地址 ;恢复 INTR 原中断处理程序入口段地址
字 MOV MOV MOV OUT STI MOV INT MYISR PROC MOV MOV INT MOV INT OVER: MOV SUB IN MOV ADD MOV OUT ES:[DI],AX DX,INTR_OCW1 ;恢复 INTR 原中断屏蔽寄存器的屏蔽 AL,IM_BAK DX,AL AX,4C00H 21H ;返回到 DOS ;中断处理程序 MYISR NEAR AL,35H AH,0EH AL,20H 10H 10H DX,PCI_INTCSR DX,19H AL,DX DX,PCI_INTCSR DX,2 AX,003FH DX,AX ;清 PCI 卡中断控制寄存器标志位 MOV DX,INTR_OCW2 ;向 PC 机内部 8259 发送中断结束 命令 MOV OUT MOV OUT IRET MYISR ENDP CODE ENDS END AL,20H DX,AL AL,20H 20H,AL START 7
实验 2 的参考程序如下: ;****************根据查看端口资源修改下列符号值******************* IOY0 EQU 0D800H ;片选 IOY0 对应的端口始地址 ;***************************************************************** MY8259_ICW1 EQU MY8259_ICW2 EQU MY8259_ICW3 EQU MY8259_ICW4 EQU MY8259_OCW1 EQU MY8259_OCW2 EQU MY8259_OCW3 EQU ;实验系统中 8259 的 ICW1 端口地址 ;实验系统中 8259 的 ICW2 端口地址 ;实验系统中 8259 的 ICW3 端口地址 ;实验系统中 8259 的 ICW4 端口地址 ;实验系统中 8259 的 OCW1 端口地址 ;实验系统中 8259 的 OCW2 端口地址 ;实验系统中 8259 的 OCW3 端口地址 IOY0+00H IOY0+04H IOY0+04H IOY0+04H IOY0+04H IOY0+00H IOY0+00H STACK1 SEGMENT DW STACK1 ENDS STACK 256 DUP(?) CODE SEGMENT ASSUME CS:CODE START: MOV 的 ICW1 DX,MY8259_ICW1 ;初始化实验系统中 8259 AL,13H DX,AL ;边沿触发、单片 8259、需要 ICW4 DX,MY8259_ICW2 ;初始化实验系统中 8259 AL,08H DX,AL DX,MY8259_ICW4 ;初始化实验系统中 8259 AL,01H DX,AL ;非自动结束 EOI DX,MY8259_OCW1 ;初始化实验系统中 8259 AL,0FCH DX,AL AH,1 16H QUIT ;打开 IR0 和 IR1 的屏蔽位 ;判断是否有按键按下 ;有按键则退出 8 的 ICW2 的 ICW4 的 OCW1 MOV OUT MOV MOV OUT MOV MOV OUT MOV MOV OUT QUERY: MOV INT JNZ
分享到:
收藏