目录
初始化命令字
有四个ICW1、ICW2、ICW3、ICW4,
首先输入ICW1,然后输入ICW2、ICW3、ICW4,
由ICW1决定是否输入ICW3、ICW4。系统复位后只设置一次,必须顺序填写
。
操作命令字
OCW1、OCW2、OCW3
ICW1初始化命令字
例题
ICW2(设置中断类信号)初始化命令字
ICW3标识主片从片初始化命令字
例题
ICW4方式控制初始化命令字
操作命令字
由CPU向8259A送三个字节的操作命令字OCW,用以规定8259A的工作方式。
中断屏蔽
结束中断
优先权循环
中断状态
操作命令字
是在应用程序
中设置的,设置时,顺序上没有严格的要求。OCW1
必须写入奇地址
端口,OCW2、OCW3
必须写入偶地址
端口。
OCW1-中断屏蔽操作命令字
OCW1是中断屏蔽命令字,命令字中的M7-M0
对应IMR的各位。Mi=1
表示该中断被屏蔽
,Mi=0
表示该中断开放
。
例题
⭐OCW2优先权循环方式和中断结束方式操作字
L2-L0:
当SL=1时有效,当设置为特殊结束EOI
命令时,指出清除中断寄存器中的哪一位,
当设置为特殊优先级循环
时,指出循环开始时设置的最低优先级
。
R=1:
循环优先权
R=0:
固定优先权
SL=1:
由L0-L2指定IRi位;
SL=0:
由L0-L2无效;EOI=1:中断结束
OCW3特殊屏蔽方式和查询方式的命令
总结:
由于8259A只设计了一个地址信号A0,所以其端口地址不太规范:
A0=0时,可以写入ICW1、OCW2、OCW3
当A0=1时,可以写入ICW2-ICW4、OCW1
。
状态读取:
对于IMR,可以在任意时刻,使用IN指令,从奇地址端口
读取。
对于ISR、IRR,需要先送出读状态命令字,由OCW3形成,然后IN指令,从偶地址端口
读出。如果要多次读同样的寄存器,只需写一次命令字即可。
查询方式工作:
是否有中断,是通过发P命令后,从偶地址
读取状态字。
8259A的应用举例
(一)初始化
MOV AL,13H ;00001 011
OUT 20H,AL ;设置ICW1,上升沿触发,单片不设ICW3,需设置ICW4
MOV AL,08H
OUT 21H,AL ;设置中断类型号基值08 ICW2
MOV AL,0DH ;设置ICW4,缓冲方式主片、非自动EOI
OUT 21H,AL
MOV AL,0H ;写OCW1,允许所有的中断
OUT 21H,AL
(二)送中断向量
将中断向量
送入中断向量表
例如异步通信中断IR4,中断类型码为12,那么其中断向量在中断类型表中的位置为12*4=48
MOV AX, 0 ;中断入口表
MOV ES,AX ;段地址送ES
MOV BX,n*4 ;偏移量送DI
MOV AX,OFFSET INTRAD
MOV ES:[BX],AX
MOV AX,SEG INTRAD
MOV ES:[BX+2],AX
STI ;恢复中断
(三)中断服务子程序
;保护现场
PUSH DS
PUSH AX
PUSH CX
PUSH DX
STI ;开中断,允许中断嵌套
... ;执行中断处理程序
CLI ;关中断
;恢复现场
POP DX
POP CX
POP AX
POP DS
MOV AL,20H ;中断结束命令OCW2
OUT 20H,AL
IRET ;中断返回