1、1山 西 大 学 计 算 机 与 信 息 技 术 学 院实 验 报 告姓 名 学 号 专业班级 2012 级 计算机科学与技术课程名称 微型计算机系统原理及应用指导教师 实验日期 2014.12.05 成 绩实 验 名 称 8259 中断控制实验1、实验目的:1. 掌握 8259 中断控制器的工作原理。2. 掌握 系统总线上 PCI_INTR 中断请求的应用编程方法。2、实验设备PC 机一台、TD-PIT+实验装置一套三、实验内容1、单中断实验。利用系统总线上中断请求信号 INTR,设计一个单中断应用。使用单次脉冲模拟中断产生。编写中断处理程序,在显示器屏幕上显示一个字符。2、扩展中断源查询方
2、式应用实验。利用实验平台上 8259 控制器对系统总线上的中断线INTR 进行扩展。编写程序对 8259 控制器的 IR0 和 IRI 中断请求进行处理。四、实验原理: (1)PC 微机系统中的 8259 介绍中断控制器 8259 是 Intel 公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对 8259 进行编程,就可以管理 8 级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片 8259 的级连,能构成多达 64 级的矢量中断系统。它的管理功能
3、包括: 1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向 CPU 传送中断类型号。8259A 的命令字共有 7 个,可分为两类。一类是初始化命令字,另一类是操作命令字。8259 的编程就是根据应用需要将初始化命令字 ICW1-ICW4 和操作命令字 OCW1- OCW3 分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4 各命令字格式如表 2-1 所示,2OCW1-OCW3 各命令字格式如表 2-2 所示,其中 OCW1 用于设置中断屏蔽操作字,OCW2 用于设置优先级循环方式和结束方式的操作命令字,OCW3 用于设置和撤消特殊屏蔽方式,设
4、置中断查询方式以及设置对 8259A 内部寄存器的读出命令。表 2-1 8259A 初始化命令字表 2-2 8259A 操作命令字D7 D6 D5 D4 D3 D2 D1 D0OCW1 Di=0:开放 IRi 中断请求Di=1:禁止 IRi 中断请求OCW2优先级循环控制位L2L0有效控制位中断结束命令位0 0 中断级编码OCW3 X0X:无意义10:撤销特殊屏蔽11:设置特殊屏蔽0 1中断查询控制位0X:无意义10:读 IRR寄存器11:读 ISR 寄存器(2)PC 微机系统中的 8259A在 80x86 系列 PC 微机系统中,系统中包含了两片 8259 中断控制器,通过级连可以管理15
5、级硬件中断,但其中部分中断号已经被系统硬件占用,具体使用情况如表 2-3 所示。两片8259 的端口地址为:主片 8259 使用 020H 和 021H 两个端口;从片使用 0A0H 和 0AlH 两个D7 D6 D5 D4 D3 D2 D1 D0ICW1X X X 11:电平触发0:边沿触发X1:单片82590:多片82591:需要ICW40:不需要ICW4ICW2 中断向量的高 5 位 X X XICW3(主) 分别对应 8 个 IRQ,Di=1,IRQi 上有级连芯片,=0,无级连芯片ICW3(从) 0 0 0 0 0 指明从片连接在主片的哪个 IRQ 上ICW40 0 01:特殊全嵌套
6、0:非特殊全嵌套1:缓冲0:非缓冲1:主片0:从片1:自动 EOI0:非自动 EOI1: 8086系统0: 8080系统3端口。系统初始化两片 8259 的中断请求信号均采用上升沿触发,采用全嵌套方式,优先级的排列次序为:0 级最高,依次为 1 级、8 级15 级,然后是 3 级7 级。在实验平台上系统总线单元的 INTR 信号对应的中断线就是 PC 机保留中断其中的一个。对 INTR 中断的初始化 PC 机已经完成,在使用时主要是将其中断屏蔽打开,修改中断向量。表 2-3 PC 微 机 系 统 中 的 硬 件 中 断中断号 功能 中断向量号 中断向量地址主 8259 IRQ0 时钟/计数器
7、0 08H 0020H0023H主 8259 IRQ1 键盘 09H 0024H0027H主 8259 IRQ2 接从片 8259 0AH 0028H002BH主 8259 IRQ3 串行口 2 0BH 002CH002FH主 8259 IRQ4 串行口 1 0CH 0030H0033H主 8259 IRQ5 并行口 2 0DH 0034H0037H主 8259 IRQ6 软盘 0EH 0038H003BH主 8259 IRQ7 并行口 1 0FH 003CH003FH从 8259 IRQ8 实时钟 70H 01C0H01C3H从 8259 IRQ9 保留 71H 01C4H01C7H从 82
8、59 IRQ10 保留 72H 01C8H01CBH从 8259 IRQ11 保留 73H 01CCH01CFH从 8259 IRQ12 保留 74H 01D0H01D3H从 8259 IRQ13 协处理器中断 75H 01D4H01D7H从 8259 IRQ14 硬盘控制器 76H 01D8H01DBH从 8259 IRQ15 保留 77H 01DCH01DFH5、实验说明及步骤1、单中断应用实验实验平台上系统总线单元的 INTR 中断请求信号已经是对应到 PC 机内部的某一级中断。 INTR 产生一个上升沿的中断请求, PC 机内部相应的那级中断就会得到响应。所以,使用INTR 中断请求信
9、号,就相当在使用 PC 机内部相应的那一级中断。 本实验要求使用总线上 INTR 中断请求线完成一次单中断应用实验。用单次脉冲上升沿模拟中断源,中断处理程序完成在屏幕上的显示字符“9” 。图 2-1 8259 单中断实验参考接线图4(1)实验步骤如下:实验接线图如图 2-1 所示,按图接线。 运行 Tdpit 集成操作软件,编写程序,编译、链接。 使用运行命令运行程序,重复按单次脉冲开关 KK1,显示屏会显示字符“9” ,说明响应了中断。 实验代码如下:INTR_IVADD EQU 01C8H ;INTR 对应的中断矢量地址INTR_OCW1 EQU 0A1H ;INTR 对应 PC 机内部
10、8259 的 OCW1 地址INTR_OCW2 EQU 0A0H ;INTR 对应 PC 机内部 8259 的 OCW2 地址INTR_IM EQU 0FBH ;INTR 对应的中断屏蔽字STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDATA SEGMENT MES DB Press any key to exit!,0AH,0DH,0AH,0DH,$CS_BAK DW ? ;保存 INTR 原中断处理程序入口段地址的变量IP_BAK DW ? ;保存 INTR 原中断处理程序入口偏移地址的变量IM_BAK DB ? ;保存 INTR 原中断屏蔽字的变
11、量DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MES ;显示退出提示MOV AH,09HINT 21HCLIMOV AX,0000H ;替换 INTR 的中断矢量MOV ES,AXMOV DI,INTR_IVADD MOV AX,ES:DIMOV IP_BAK,AX ;保存 INTR 原中断处理程序入口偏移地址 MOV AX,OFFSET MYISRMOV ES:DI,AX ;设置当前中断处理程序入口偏移地址ADD DI,2MOV AX,ES:DIMOV CS_BAK,A
12、X ;保存 INTR 原中断处理程序入口段地址MOV AX,SEG MYISRMOV ES:DI,AX ;设置当前中断处理程序入口段地址5MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开 INTR 屏蔽位IN AL,DXMOV IM_BAK,AL ;保存 INTR 原中断屏蔽字AND AL,INTR_IMOUT DX,ALSTIWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ WAIT1 ;无按键则跳回继续等待,有则退出QUIT: CLIMOV AX,0000H ;恢复 INTR 原中断矢量MOV ES,AXMOV DI,INTR_IVADD MOV AX,I
13、P_BAK ;恢复 INTR 原中断处理程序入口偏移地址MOV ES:DI,AXADD DI,2MOV AX,CS_BAK ;恢复 INTR 原中断处理程序入口段地址MOV ES:DI,AXMOV DX,INTR_OCW1 ;恢复 INTR 原中断屏蔽寄存器的屏蔽字MOV AL,IM_BAKOUT DX,ALSTIMOV AX,4C00H ;返回到 DOSINT 21HMYISR PROC NEAR ;中断处理程序 MYISRPUSH AXMOV AL,39HMOV AH,0EHINT 10HMOV AL,20HINT 10HOVER: MOV DX,INTR_OCW2 ;向 PC 机内部 8
14、259 发送中断结束命令MOV AL,20HOUT DX,ALmov al,20hout 20h,al POP AX IRET MYISR ENDPCODE ENDSEND START(2 ) 实验结果如下:62、扩展中断应用实验利用实验单元中的 8259 控制器,可以对总线上的 INTR 进行中断源的扩充。将 8259 的INT 连接到 INTR,8259 的 8 路中断请求线 IR0IR7 就成了单一 INTR 中断请求线的扩充。这8 路中断源共用 INTR 的中断矢量,共用 INTR 的中断服务程序。在 INTR 的中断服务程序中通过对 8259 的 OCW3 的查询,以确定是 IR0I
15、R7 中哪个产生中断,然后转到相应的服务线程进行处理。 本实验要求实现 8259 控制器 IR0、IR1 两路中断都可以通过 INTR 向 PC 发起中断请求。用 KK1+和 KK2+模拟两个中断源,在 IR0 对应的服务程序中显示字符“0” ,在 IR1 对应的服务程序中显示字符“1” 。图 2-3 8259 扩充中断源实验参考接线图(1)实验步骤如下:实验接线图如图 2-3 所示,按图接线。 7运行 Tdpit 集成操作软件,编写程序,编译、链接。 使用运行命令运行程序,按动 KK1+、KK2+ 按键,观察中断是否产生。实验代码如下:INTR_IVADD EQU 01C8H ;INTR 对
16、应的中断矢量地址INTR_OCW1 EQU 0A1H ;INTR 对应 PC 机内部 8259 的 OCW1 地址INTR_OCW2 EQU 0A0H ;INTR 对应 PC 机内部 8259 的 OCW2 地址INTR_IM EQU 0FBH ;INTR 对应的中断屏蔽字IOY0 EQU 3000H ;片选 IOY0 对应的端口始地址MY8259_ICW1 EQU IOY0+00H ;实验系统中 8259 的 ICW1 端口地址MY8259_ICW2 EQU IOY0+04H ;实验系统中 8259 的 ICW2 端口地址MY8259_ICW3 EQU IOY0+04H ;实验系统中 825
17、9 的 ICW3 端口地址MY8259_ICW4 EQU IOY0+04H ;实验系统中 8259 的 ICW4 端口地址MY8259_OCW1 EQU IOY0+04H ;实验系统中 8259 的 OCW1 端口地址MY8259_OCW2 EQU IOY0+00H ;实验系统中 8259 的 OCW2 端口地址MY8259_OCW3 EQU IOY0+00H ;实验系统中 8259 的 OCW3 端口地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDATA SEGMENT MES DB Press any key to exit!,0AH,0DH,
18、0AH,0DH,$CS_BAK DW ? ;保存 INTR 原中断处理程序入口段地址的变量IP_BAK DW ? ;保存 INTR 原中断处理程序入口偏移地址的变量IM_BAK DB ? ;保存 INTR 原中断屏蔽字的变量DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MES ;显示退出提示MOV AH,09HINT 21HCLIMOV AX,0000H ;替换 INTR 的中断矢量MOV ES,AXMOV DI,INTR_IVADD MOV AX,ES:DIMOV IP_
19、BAK,AX ;保存 INTR 原中断处理程序入口偏移地址MOV AX,OFFSET MYISRMOV ES:DI,AX ;设置当前中断处理程序入口偏移地址ADD DI,2MOV AX,ES:DIMOV CS_BAK,AX ;保存 INTR 原中断处理程序入口段地址8MOV AX,SEG MYISRMOV ES:DI,AX ;设置当前中断处理程序入口段地址MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开 INTR 屏蔽位IN AL,DXMOV IM_BAK,AL ;保存 INTR 原中断屏蔽字AND AL,INTR_IMOUT DX,ALMOV DX,MY8259_ICW1 ;初始
20、化实验系统中 8259 的 ICW1MOV AL,13h ;边沿触发、单片 8259、需要 ICW4OUT DX,ALMOV DX,MY8259_ICW2 ;初始化实验系统中 8259 的 ICW2MOV AL,08h OUT DX,ALMOV DX,MY8259_ICW4 ;初始化实验系统中 8259 的 ICW4MOV AL, 05h ;非自动结束 EOIOUT DX,ALMOV DX,MY8259_OCW3 ;向 8259 的 OCW3 发送读取 IRR 命令MOV AL,0AHOUT DX,ALMOV DX,MY8259_OCW1 ;初始化实验系统中 8259 的 OCW1MOV AL
21、,0fch ;打开 IR0 和 IR1 的屏蔽位OUT DX,ALSTIWAIT1: MOV AH,1 ;判断是否有按键按下INT 16HJZ WAIT1 ;无按键则跳回继续等待,有则退出QUIT: CLIMOV AX,0000H ;恢复 INTR 原中断矢量MOV ES,AXMOV DI,INTR_IVADD MOV AX,IP_BAK ;恢复 INTR 原中断处理程序入口偏移地址MOV ES:DI,AXADD DI,2MOV AX,CS_BAK ;恢复 INTR 原中断处理程序入口段地址MOV ES:DI,AXMOV DX,INTR_OCW1 ;恢复 INTR 原中断屏蔽寄存器的屏蔽字MO
22、V AL,IM_BAKOUT DX,ALSTIMOV AX,4C00H ;返回到 DOS9INT 21HMYISR PROC NEAR ;中断处理程序 MYISRPUSH AXQUERY: MOV DX,MY8259_OCW3 ;向 8259 的 OCW3 发送读取 IRR 命令IN AL,DX ;读出 IRR 寄存器值And al,03hCMP AL,01HJE IR0ISR ;若为 IR0 请求,跳到 IR0 处理程序JNE IR1ISR ;若为 IR1 请求,跳到 IR1 处理程序JMP OVERIR0ISR:MOV AL,30H ;IR0 处理,显示字符串 STR0MOV AH,0EH
23、INT 10HMOV AL,20HINT 10H JMP OVERIR1ISR:MOV AL,31H ;IR1 处理,显示字符串 STR1MOV AH,0EHINT 10HMOV AL,20HINT 10HJMP OVEROVER: MOV DX,INTR_OCW2 ;向 PC 机内部 8259 发送中断结束命令MOV AL,20HOUT DX,ALMOV AL,20HOUT 20H,ALPOP AXIRETMYISR ENDPCODE ENDSEND START(2)实验结果如下:106、思考题编写程序实现实验一中流水灯的 A、B 口对应 16 位灯依次循环点亮。实验代码如下:IOY0 EQ
24、U 3000H MY8255_A EQU IOY0+00H*4 MY8255_B EQU IOY0+01H*4 MY8255_C EQU IOY0+02H*4 MY8255_MODE EQU IOY0+03H*4 STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDATA SEGMENT LA DB ? LB DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,MY8255_MODE MOV AL, 80h OUT DX,ALMOV DX,MY8255_A MOV AL, 80hOUT DX,ALMOV LA,ALMOV DX,MY8255_B MOV AL,01hOUT DX,ALMOV LB,ALLOOP0: MOV CL,8LOOP1: CALL DALLY