8259外部中断实验
一、实验目的
1.掌握8259芯片结构及工作方式;
2.熟悉8259的初始化和操作编程;
3.熟悉基本输出接口74LS273的应用。
二、实验原理
8259A是8086/8088系列的可编程中断控制器,它的主要功能是:
(1)具有8级优先级控制,通过级联可以扩展到64级优先级控制;
(2)每一级中断可由程序单独屏蔽或允许;
(3)可提供中断类型号传送给CPU;
(4)可以通过编程选择多种不同的工作方式。
8259A为28个引脚的双列直插式芯片,在Lab6000p实验箱中的8259模块连线如图所示:
图—1 8259模块连线
AD0~AD7、A0、/WR、/RD已分别连接至系统总线DB0~DB7、AB0、/IOW、/IOR;引出CS、IR0(即INT0)、INTA留给用户连接。
实验原理图如附录:
三、实验设备
https://www.wendangku.net/doc/b71257372.html,b6000p实验教学系统;
2.IBM-PC机
四、实验程序框图
图—2 实验程序框图
五、实验内容
1.用系统的08H中断, 实现每隔5秒钟响铃一次,同时在屏幕上显示信息”The bell is ring!”总共显示10次。
实验程序如下所示:
DATA SEGMENT
COUNT DW 91
STRING DB'The bell is ring!',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,1CH ;去中断类型号为1CH
MOV AH,35H ;的中断向量到ES:BX
INT 21H
PUSH BX
PUSH DS
MOV DX,OFFSET RING
MOV AX,SEG RING
MOV DS,AX
MOV AL,1CH
MOV AH,25H
INT 21H
POP DS
IN AL,21H ;允许定时器中断AND AL,11111110B
OUT 21H,AL
STI
MOV SI,10
L1: CMP SI,0
JNZ L1
POP DX
POP DS
MOV AL,1CH
MOV AH,25H
INT 21H
MOV AX,4C00H
INT 21H
MAIN ENDP
RING PROC FAR
PUSH DS
PUSH AX
PUSH CX
PUSH DX
MOV AX,DATA
MOV DS,AX
STI
DEC COUNT
JNZ EXIT
MOV DX,OFFSET STRING
MOV AH,09H
INT 21H
MOV COUNT,91
DEC SI
EXIT: CLI
POP DX
POP CX
POP DS
STI
IRET
RING ENDP
CODE ENDS
END START
结果:
每隔5s在显示屏上显示‘The bell is ring!’,符合实验要求。
2.用8259和74ls273实现脉冲个数计数,脉冲个数以二进制形式在LED上显示。实验程序如下所示:
DATA SEGMENT
AA DB 21H
DATA ENDS
STACK SEGMENT
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: SUB CX,CX
MOV AX,0 ;设置中断服务程序入口地址
MOV ES,AX
MOV BX,80H
MOV AX,OFFSET DIANJI
MOV ES:WORD PTR[BX],AX
MOV AX,SEG DIANJI
MOV ES:WORD PTR[BX+2],AX
MOV AL,13H ;设置ICW1
MOV DX,8000H
OUT DX,AL
MOV AL,20H ;设置ICW2
MOV DX,8001H
OUT DX,AL
MOV AL,01H ;设置ICW4
OUT DX,AL
MOV AL,0FEH ;设置OCW1
OUT DX,AL
STI ;开中断
S1: JMP S1
MOV AX,4C00H ;返回DOS用
MAIN ENDP
DIANJI PROC FAR
PUSH DX
PUSH AX
INC CL
MOV AL,CL
MOV DX,9000H ;锁存器存器端口为9000H
OUT DX,AL
MOV AL,20H ;普通EOI结束命令
MOV DX,8000H
OUT DX,AL
POP AX
POP DX
IRET
DIANJI ENDP
CODE ENDS
END START
结果:
Lab6000p实验箱中的八盏LED灯以二进制的方式用来记录脉冲个数。
六、思考题
1.若想使单脉冲的中断类型号为22H,该如何修改程序?
答:由于IR0端对应的中断类型号必须为8的整数倍,而22H不是8的整数,故只能在IR0的中断类型号继续为20H的前提下,使单脉冲从IR2端引。故在设置中断程序入口地址时,应将中断向量放在内存中0:88H开始的连续四个字节中;OCW1应该设置为0FBH,即使IR2端不被屏蔽,而其他端均被屏蔽;在中断程序中,EOI 结束命令应使AL为22H,即OCW2为22H,使中断服务寄存器ISR2位清零。
2.为什么在初始化时未设置ICW3以及OCW2和OCW3?
答:ICW3只在8259级联使用时才进行设置,在本实验中只涉及一片8259,不涉及到级联的问题,所以ICW3可以省略;
OCW2为优先权循环方式和中断结束方式操作字,是在中断服务程序结束后写入;
OCW3为特殊屏蔽方式和查询方式操作字,由于实验过程中只有一个外部中断程序,故不需要设置OCW3。
微机原理与接口技术8259外部中断实验
医电61
刘晶
06121005