一、实验目的:
1、掌握8259中断控制器的工作原理。
2、学习8259的应用编程方法。
3、掌握8259级联方式的使用方法。
二、实验内容与要求:
1.利用系统总线上中断请求信号MIR7,设计一个单一中断请求实验。
2.利用系统总线上中断请求信号MIR6和MIR7,设计一个双中断优先级应用实验,观察8259对中断优先级的控制。
3.利用系统总线上中断请求信号MIR7和SIR1,设计一个级连中断应用实验。
四、实验步骤:
1.8259单中断实验
实验接线图如图4.2.11所示,单次脉冲输出与主片8259的IR7相连,每按动一次单次脉冲,产生一次外部中断,在显示屏上输出一个字符“7” (代码修改成“9”)。
图1 8259单中断实验接线图
(1)按图1连接实验线路。
(2)编写实验程序,经编译、链接无误后装入系统。
(3)单击RUN按钮,运行实验程序,重复按单次脉冲开关KK1+,在界面的输出区会显示字符“9”,说明响应了中断。
2.8259双中断优先级实验
实验接线图如图2所示,KK1+和KK2+分别连接到主片8259的IR7和IR6上,当按一次KK1+时,显示屏上显示字符“7” (代码修改成“8”),按一次KK2+时,显示字符“6” (代码修改成“3”)。编写程序。
图2 8259单中断实验接线图
(1)按图2连接实验线路。
(2)编写实验程序,经编译、链接无误后装入系统。
(3)单击RUN按钮,运行实验程序,重复按单次脉冲开关KK1+和KK2+,在界面的输出区会显示字符“8”和“3”,说明响应了中断。
(4)尝试先按KK1+,再快速按KK2+,观察MIR7和MIR6两个中断请求的优先级,分析实验结果。
3.8259级连中断实验
实验接线图如图3所示,KK1+连接到主片8259的IR7上,KK2+连接到从片8259的IR1上,当按一次KK1+时,显示屏上显示字符“L2”,按一次KK2+时,显示字符“S1”。编写程序。
图3 8259级联实验接线图
(1)按图3连接实验线路。
(2)输入程序,编译、链接无误后装入系统。
(3)单击凹按钮,运行实验程序,重复按单次脉冲开关KK1+和KK2+,在界面的输出区会显示字符“L2”和“S1”,说明响应了中断,验证实验程序的正确性。
(4)尝试先按KK1+,再快速按KK2+,观察MIR7和SIR1两个级连中断请求的优先级,分析实验结果。
五、电路连接
1.8259单中断实验电路连接
图4 8259单中断实验电路连接
2.8259双中断优先级实验电路连接
图5 8259双中断优先级实验电路连接
3.8259级连中断实验电路连接
图6 8259级连中断实验电路连接
六、代码设计与分析
1.关于显示字符
MOV AX, 0137H
INT 10H ;显示字符 7
这里AH=01,AL=37=‘7’,会显示AL对应的字符。
2.关于中断矢量地址
以IR7为例:
MOV AX, OFFSET MIR7 ;取中断入口地址
MOV SI, 003CH ;中断矢量地址
MOV [SI], AX ;填IRQ7的偏移矢量
MOV AX, CS ;段地址
MOV SI, 003EH
MOV [SI], AX ;填IRQ7的段地址矢量
子程序入口是中断类型号*4,从下图可以看出,IR7的中断类型号是F(0F),0F×4=003C,003E=0F×4+2
IRQ6和SIR1(即IR1,丛片1)同上分析。
3.关于初始化ICW与OCW
MOV AL, 11H
OUT 20H, AL ;ICW1
MOV AL, 08H
OUT 21H, AL ;ICW2
MOV AL, 04H
OUT 21H, AL ;ICW3
MOV AL, 01H
OUT 21H, AL ;ICW4
MOV AL, 6FH ;OCW1 0110 1111 开放4号中断串口用,7号中断实验用
1)送ICW1命令到20H端口地址,用于定义触发方式,单片/多片使用,是否需要写ICW4,具体命令格式如下图。
2)送ICW2命令到21H端口地址,确定中断号的高五位,具体命令格式如下图。
3)如果采用多片级联方式,则定义主片和从片的IR引脚编号,送到20H端口地址,具体命令格式如下图。如果没有级联直接进入第四步。(ICW3命令只有系统存在2片以上中断控制器芯片时才启用,否则,不用ICW3命令。)
4)如果需要ICW4,则定义中断方式,嵌套方式缓冲方式和系统位数,具体命令格式如下图。如果不需要,则跳到第五步。
5)准备接收中断
七、实验现象
1.8259单中断实验结果
重复按单次脉冲开关KK1+,在界面的输出区会显示字符“9”),说明响应了中断。
图7 8259单中断实验结果
2.8259双中断优先级实验结果
先按KK1+,显示字符3,再快速按KK2+,因为MIR7的中断请求优先级高于MIR6,所以会显示字符8,当MIR7的中断响应的结束后执行MIR6的中断响应,所以可以看到字符3和字符8如图10所示。
图8 8259双中断优先级实验结果
3.8259级连中断实验结果
先按KK1+,显示字符L2,再快速按KK2+,因为MIR7的中断请求优先级高于SIR1,所以会显示字符S1,当MIR7的中断响应的结束后执行SIR1的中断响应,所以可以看到字符L2和字符S1如图11所示。
图9 8259级连中断实验结果
八、实验代码
1.A82591.ASM
功能描述: 8259中断实验,中断源为主片8259的IRQ7;每产生一次中断输出显示一个字符7
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: PUSH DS
MOV AX, 0000H
MOV DS, AX
MOV AX, OFFSET MIR7 ;取中断入口地址
MOV SI, 003CH ;中断矢量地址
MOV [SI], AX ;填IRQ7的偏移矢量
MOV AX, CS ;段地址
MOV SI, 003EH
MOV [SI], AX ;填IRQ7的段地址矢量
CLI
POP DS
;初始化主片8259
MOV AL, 11H
OUT 20H, AL ;ICW1
MOV AL, 08H
OUT 21H, AL ;ICW2
MOV AL, 04H
OUT 21H, AL ;ICW3
MOV AL, 01H
OUT 21H, AL ;ICW4
MOV AL, 6FH ;OCW1 0110 1111 开放4号中断串口用,7号中断实验用
OUT 21H, AL
STI
AA1: NOP
JMP AA1
MIR7: STI
CALL DELAY
MOV AX, 0137H
INT 10H ;显示字符7
MOV AX, 0120H
INT 10H
MOV AL, 20H
OUT 20H, AL ;中断结束命令
IRET
DELAY: PUSH CX
MOV CX, 0F00H
AA0: PUSH AX
POP AX
LOOP AA0
POP CX
RET
CODE ENDS
END START
2. A82592.ASM
功能描述: 8259中断优先级应用实验
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: PUSH DS
MOV AX, 0000H
MOV DS, AX
MOV AX, OFFSET MIR7 ;取中断入口地址
MOV SI, 003CH ;中断矢量地址
MOV [SI], AX ;填IRQ7的偏移矢量
MOV AX, CS ;段地址
MOV SI, 003EH
MOV [SI], AX ;填IRQ7的段地址矢量
MOV AX, OFFSET MIR6
MOV SI, 0038H
MOV [SI], AX
MOV AX, CS
MOV SI, 003AH
MOV [SI], AX
CLI
POP DS
;初始化主片8259
MOV AL, 11H
OUT 20H, AL ;ICW1
MOV AL, 08H
OUT 21H, AL ;ICW2
MOV AL, 04H
OUT 21H, AL ;ICW3
MOV AL, 01H
OUT 21H, AL ;ICW4
MOV AL, 2FH
OUT 21H, AL ;主8259 OCW1
STI
AA1: NOP
JMP AA1
MIR7: STI
CALL DELAY
MOV AX, 0137H
INT 10H ;显示字符7
MOV AX, 0120H
INT 10H
MOV AL, 20H
OUT 20H, AL ;中断结束命令
IRET
MIR6: STI
CALL DELAY
MOV AX, 0136H
INT 10H ;显示字符6
MOV AX, 0120H
INT 10H
MOV AL, 20H
OUT 20H, AL
IRET
DELAY: PUSH CX
MOV CX, 0F000H
AA0: PUSH AX
POP AX
LOOP AA0
POP CX
RET
CODE ENDS
END START
3.A82593.ASM
功能描述: 8259级联中断实验,中断源为主片8259的IR7,从片8259的IR1。从片8259通过主片8259的IR2;进行级联;主片每产生一次中断输出显示一个字符M7,从片每产生一次中断输出显示一个字符
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: PUSH DS
MOV AX, 0000H
MOV DS, AX
MOV AX, OFFSET MIR7 ;取中断入口地址
MOV SI, 003CH ;中断矢量地址
MOV [SI], AX ;填IRQ7的偏移矢量
MOV AX, CS ;段地址
MOV SI, 003EH
MOV [SI], AX ;填IRQ7的段地址矢量
MOV AX, OFFSET SIR1
MOV SI, 00C4H
MOV [SI], AX
MOV AX, CS
MOV SI, 00C6H
MOV [SI], AX
CLI
POP DS
;初始化主片8259
MOV AL, 11H
OUT 20H, AL ;ICW1
MOV AL, 08H
OUT 21H, AL ;ICW2
MOV AL, 04H
OUT 21H, AL ;ICW3
MOV AL, 01H
OUT 21H, AL ;ICW4
;初始化从片8259
MOV AL, 11H
OUT 0A0H, AL ;ICW1
MOV AL, 30H
OUT 0A1H, AL ;ICW2
MOV AL, 02H
OUT 0A1H, AL ;ICW3
MOV AL, 01H
OUT 0A1H, AL ;ICW4
MOV AL, 0FDH
OUT 0A1H,AL ;OCW1 = 1111 1101
MOV AL, 6BH
OUT 21H, AL ;主8259 OCW1
STI
AA1: NOP
JMP AA1
MIR7: STI
CALL DELAY
MOV AX, 014DH
INT 10H ;显示字符M
MOV AX, 0137H
INT 10H ;显示字符7
MOV AX, 0120H
INT 10H
MOV AL, 20H
OUT 20H, AL ;中断结束命令
IRET
SIR1: STI
CALL DELAY
MOV AX, 0153H
INT 10H ;显示字符S
MOV AX, 0131H
INT 10H ;显示字符1
MOV AX, 0120H
INT 10H
MOV AL, 20H
OUT 0A0H, AL
OUT 20H, AL
IRET
DELAY: PUSH CX
MOV CX, 0F00H
AA0: PUSH AX
POP AX
LOOP AA0
POP CX
RET
CODE ENDS
END START
S1。