戴十字架有什么讲究:8259A应用举例
来源:百度文库 编辑:中财网 时间:2024/10/14 12:50:04
硬件连接如图6.22所示。
8259A的硬件连接比较简单,不需要附加其他电路就可以与CPU直接连接。
系统的工作过程是:当80486 CPU响应8259A的中断请求INT时,向8259A回送中断响应信号,自动进入中断响应总线周期,进行中断处理。
是由,和信号通过总线控制逻辑产生,其编码见表2.6,当,和的编码是000时,为中断响应周期。时序如图6.23所示:
在第一个周期,CPU向8259A发送第一个脉冲,表示响应INT请求,并利用这个信号将8259A的请求信号IRi复位,同时使总线锁存信号有效,以禁止其他总线主控设备争用总线。
在第二周期,8259A将中断类型号n通过数据总线送至CPU,由CPU自动完成向量表地址4n运算后,从中断向量表中取出相应的中断向量送入CS:IP中,继而转去执行中断服务子程序。 同时,还利用第二个周期的后沿将INT复位。在自动结束方式中,也是利用这个后沿,将ISR中的中断服务标志位清除。
【例6.2】 设计一个中断处理程序。要求中断请求信号以跳变方式由IR2引入(可为任一定时脉冲信号),当CPU响应IR2请求时,输出字符串“8259A INTERRUPT!”,中断10次,程序退出(设8259A的端口地址为20H和21H,中断类型号为40H)。
中断处理程序如下:
DATA SEGMENT
MESS DB'8259A? INTERRUPT!', 0AH, 0DH, '$'
COUNT DB 10 ; 计数值为10
DATA ENDS
STACK SEGMENT STACK
STA DB 100H DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
MAIN: CLI
MOV AX,DATA
NOV DS, AX
MOV AX, STACK
MOV SS, AX
MOV SP, TOP
MOV AL, 13H ; 8259A初始化
OUT 20H, AL ; 单片, 边沿触发
MOV AL, 40H ; 中断类型号40H
OUT 21H, AL
MOV AL, 01H ; 非自动结束
OUT 21H, AL
MOV AX, SEG INT-P ; 设置中断向量
MOV DS, AX ; 中断服务子程序入口段基址送DS
MOV DX, OFFSET INT-P ; 中断服务子程序入口偏移地址送DX
MOV AL, 42H ; IR2的中断类型号42H送AL
MOV AH, 25H ; 25H功能调用
INT 21H
IN AL, 21H ; 读IMR
AND AL, 0FBH ; 允许IR2请求中断
OUT 21H, AL ; 写中断屏蔽字OCW1
WAIT1: STI ; 开中断
CMP COUNT,0 ; 判断10次中断是否结束
JNZ WAIT1 ; 未结束, 等待
MOV AX, 4C00H ; 结束, 返回DOS
INT 21H
INT-P PROC ; 中断服务子程序
PUSH DS ; 保护现场
PUSH AX
PUSH DX
STI ; 开中断
MOV DS, AX
MOV DX, OFFSET MESS
MOV AH, 09H
INT 21H
DEC COUNT ; 控制10次循环
JNZ NEXT
IN AL, 21H ; 读IMR
OR AL, 04H ; 屏蔽IR2请求
OUT 21H, AL
NEXT: CLI ; 关中断
MOV AL, 20H ; 写OCW2, 送中断结束命令EOI
OUT 20H, AL
POP DX ; 恢复现场
POP AX
POP DS
IRET ; 中断返回
INT-P ENDP
CODE ENDS
END MAIN