实验二 8259中断控制器实验<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一、实验目的
掌握8259中断控制器的接口方法与程序设计。
二、实验要求
编制程序,将中断触发信号连接8259芯片的IR0—TR7的任意输入端,作为中断源,产生单一中断,系统显示中断号的数字。
三、程序流程
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
四、实验电路
五、实验提示
(1)“SP”插孔和8259A的 中断输入TR0—IR7插孔相连,“SP”端初始为低电平。
(2)按照实验1电路连接138译码电路,8259的CS端连138译码器的Y0—Y7孔。
(3)将8259单元的D0~D7,用8芯扁平线与数据总线单元D0~D7的任意接口相连。
六、实验程序设计
1.编程提示:
8259中断控制器是专为控制优先级中断设计的芯片。它将中断源优先级排队、中断源识别以及提供中断矢量的电路集于芯片中。因此无需附加任何电路,只需对8259进行编程,就可以管理8级中断,中断结构可以由用户编程来设定。在不需要增加其它电路的情况下,通过多片8259的级联,能构成多达64级的矢量中断系统。
中断序号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
变量地址 | 20~23h | 24~27h | 28~2Bh | <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2C~2Fh | 30~33h | 34~37h | 38~3Bh | 3C~3Fh |
本实验中使用8259A的任意中断源TR0—IR7,中断方式为边沿触发方式,按动AN按钮产生一次中断,编写程序,使系统每次响应外部中断时,显示1个与中断源对应的数字字符,显示满以后清空显示“P.”继续等待中断。
2.参考程序
ZXK EQU 0FFDCH ;显示字形口地址
ZWK EQU 0FFDDH ;显示字位口地址
Port0 EQU ( 0FF80) ;8259A端口地址,A0=0
Port1 EQU ( 0FF81) ;8259A端口地址,A0=1
/*******端口地址=片选+片内**********/
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 3400H
H8: JMP P8259
LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H
BUF DB ?,?,?,?,?,?
P8259: CLI
CALL WP ;初始化显示“P.”
;--------------建立中断向量表-----------------
MOV AX,OFFSET INT8259 ;
MOV BX, (中断序号低2位 ) ;中断向量表地址,在此地址中存放中断子程序偏移地址
MOV [BX],AX ;
MOV BX, (中断序号高2位 ) ;中断向量表地址,在此地址中存放中断子程序的段地址
/**************这里一般是实验系统固定的*****************/
MOV AX,0000H ;
MOV [BX],AX ;
CALL FOR8259 ;
M0V SI,0000H
STI ;
CON8: CALL DIS ;
JMP CON8
;----------------8259中断子程序---------------
INT8259:CLI
MOV BX,OFFSET BUF
MOV BYTE PTR [BX+SI],07H
INC SI
CMP SI,0007H
JZ X59
XX59: MOV AL,20H ;
MOV DX,Port0
OUT DX,AL
MOV CX,0050H
xxx59: PUSH CX
CALL DIS
POP CX
LOOP xxx59
STI
IRET
X59: MOV SI,0000H
CALL WP
JMP XX59
;============8259初始化子程序===========
FOR8259:
(由学生完成)
mov dx,port0
mov al,13h
out dx,al ; ICW1中断请求触发方式设定+芯片数目的设定
mov dx,port1
mov al,8
out dx,al ;ICW2中断类型号的确定
(这里可以随意自己设定高5位,低3位系统自 动分配给IR中断请求线)
mov al,9
out dx,al ;ICW4缓冲方式+中断结束方式设定
mov al,7fh
out dx,al :ocw1屏蔽低六位
ret
;-------------------------------------
WP: MOV BUF,11H ;初始化显示“P.”
MOV BUF+1,10H
MOV BUF+2,10H
MOV BUF+3,10H
MOV BUF+4,10H
MOV BUF+5,10H
RET
;----------------显示子程序-------------
DIS: MOV CL,20H
MOV BX,OFFSET BUF
DIS1: MOV AL,[BX]
PUSH BX
MOV BX,OFFSET LED
XLAT
POP BX
MOV DX,ZXK
OUT DX,AL
MOV AL,CL
MOV DX,ZWK
OUT DX,AL
PUSH CX
MOV CX,0100H
DELAY: LOOP $
POP CX
CMP CL,01H
JZ EXIT
INC BX
SHR CL,1
JMP DIS1
EXIT: MOV AL,00H
MOV DX,ZWK
OUT DX,AL
RET
;-------------------------------------
CODE ENDS
END H8
七、实验要求
(1)通过完成注释,说明中断向量表的建立过程。
(2)完成8259初始化子程序设计。
(3)阅读程序,说明在显示程序中如何获得段码。
(4)阅读程序,写出本程序中所用8259A的命令字。
(5)实验程序在Inter8088实验系统环境中实现编译、连接、装载成功后,通过Inter8088实验系统环境中的连续运行命令,实现程序运行。
(6)或通过实验箱键盘输入程序起始地址,按EXEC键运行已经装载成功的程序。(7)按动AN按钮产生中断信号,LED数码管从最高位开始依次显示数字,显示
满六位后,最高位显示“P.”继续等待中断。
菜鸟收获:这次试验的关键是中断向量表的建立=中断号+中断程序的入口地址(菜鸟认为是cpu通过 中断号 访问 中断服务程序的入口地址 )/中断号由ICW2定义5位+自动分配的3位 =======>对应系统提供的中断序号地址(即中断服务程序的入口地址)
第一次实验的心得。。。。。。。请同学们批正!
用户377235 2012-12-10 15:31