版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZhtSunday/article/details/51052938
可编程中断控制器8259A 使用摘要
微机原理实验设计的过程中不可避免的需要用到8259A可编程控制器,这里总结一下8259A的用法。
- 首先,尽管《微型计算机原理及接口技术》中对于8259A的初始化进行了很详细的解释说明,但实际上,8259A的初始化这样重要的事怎么能让我们来做呢……8259A的初始化是由BIOS完成的。书上的介绍了解一下即可。
- 8259A是在计算机是主板上,一般来说,实验室的试验箱上会留有一个接口来接收你连接的外设发出的中断。
- 使用8259A接收外部中断的时候,一般使用0BH和0CH作为中断号。这两种中断号在8086中对应的中断类型是异步通信端口,0BH对应开放的是IRQ3,0CH对应开放IRQ4(这个注意不要搞错)。
- 设置中断的步骤分为:
(1)取中断向量(用MOV AH,35H
INT 21H
指令)
(2)保存中断向量
(3)填写中断向量表(用MOV AH,25H
INT 21H
指令)
(4)开放中断请求 - 中断服务程序的结构为:
(1)PUSH 保护现场
(2)STI 开中断
(3)中断处理程序主体
(4)中断结束命令MOV AL,20H
OUT 20H,AL
(第一个20H为功能号,第二个是8259A地址)
(5)CLI 关中断
(6)POP 恢复现场
(7)开中断
(8)IRET 返回(注意和普通子程序的返回 RET不同)
设置中断向量程序示例
;设置中断向量
MOV AL,0BH ;0BH指定为中断号
MOV AH,35H
INT 21H ;取中断向量,段地址放在ES中,偏移地址放在BX中
MOV INT_SEG,ES
MOV INT_OFF,BX ;INT_SEG INT_OFF都是设置的变量,用来暂存原来的中断向量
PUSH DS
MOV AX,SEG INTP ;INTP是中断服务程序的名字
MOV DS,AX
MOV DX,OFFSET INTP
MOV AX,250BH
INT 21H ;利用DOS调用,中断向量填入中断向量表
POP DS
IN AL,21H
MOV INSTOR,AL
AND AL,0FBH ;开放IRQ3的中断请求
OUT 21H,AL
;下面可以写主程序
这里面用的是0BH中断号,对应就是IRQ3口
中断服务程序
;中断服务程序
INTPRO PROC
PUSH AX
PUSH BX
PUSH DX ;保护现场
STI ;注意开中断。
MOV BX,OFFSET TABLE
MOV DX,0218H
IN AL,DX
CMP AL,0EH
JB SHOW
MOV AL,76H
MOV DX, 0219H
OUT DX,AL
SHOW:
ADD AL,02H
XLAT
MOV DX,0219H
OUT DX,AL ;中断处理主体部分完毕
MOV AL,20H
OUT 20H,AL ;发出结束中断命令
CLI ;注意关中断
POP AX
POP BX
POP DX ;恢复现场
STI ;开中断
IRET ;返回
INTPRO ENDP
恢复中断向量
用完了中断向量当然还要恢复回去,这时就用到刚刚存起来的原始中断向量的段地址和偏移地址了。
CLI
MOV AX,INT_SEG
MOV DS,AX
MOV DX,INT_OFF
MOV AL,0BH
MOV AH,25H
INT 21H ;利用DOS调用写中断向量
STI