8259A硬件中断实验程序.doc
文本预览下载声明
;*---------------------------------------------------------*
;* 中断控制器8259应用实验-中断方式控制彩灯点亮 *
;* 中断方式控制彩灯点亮程序source file *
;* 运行步骤:1.将PC4和IRQ10两个跳接开关分别联上 *
;* 2.按下1次SW3,申请1次中断,使LED灯点亮1次 *
;* Copyright (c) 2002 by HUST *
;*---------------------------------------------------------*
STACK1 SEGMENT STACK
DW 200 DUP(?)
STACK1 ENDS
DATA SEGMENT
MESG1 DB Press SW3 one time to invoke interrupt one time,and to light one of LEDs,0ah,0dh
DB Exit with q/Q,0ah,0dh,$
LEDDATA DB 01H,02H,04H,08H,10H,20H,40H,80H
NUM DW(0)
INT0A_OFF DW(?)
INT0A_SEG DW(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESG1
MOV AH,09H
INT 21h ;显示提示信息
MOV DX,303H ;初始化8255
MOV AL,83H
OUT DX,AL
MOV DX,300H ;LED灯熄灭
MOV AL,00H
OUT DX,AL
MOV AX,3572H ;获取原中断向量
INT 21H
MOV INT0A_OFF,BX ;保存原中断向量
MOV BX,ES
MOV INT0A_SEG,BX
CLI ;关中断
MOV AX,2572H
MOV DX,SEG LEDLIGHT ;设置新的中断向量
PUSH DS
MOV DS,DX
MOV DX,OFFSET LEDLIGHT
INT 21H
POP DS
STI ;开中断
IN AL,0A1H ;打开IRQ10
AND AL,0FBH
OUT 0A1H,AL
IN AL,21H ;打开IRQ2
AND AL,0FBH
OUT 21H,AL
L1:
MOV AH,0BH ;检查是否有’Q’或’q’键按下
INT 21H
INC AL
JNZ NEXT0 ; 若无键按下,则程序往下执行
MOV AH,08H ;如有’Q’或’q’键按下,则程序退出
INT 21H
CMP AL,q
JZ EXIT
CMP AL,Q
JZ EXIT
NEXT0:
MOV DX,302H ;查PC2是否为0
IN AL,DX
AND AL,04H
JNZ L1
MOV DX,303H ;按下SW3,则PC4=1申请中断
MOV AL,09H
OUT DX,AL
PUSH CX
MOV CX,100
WT: LOOP WT
POP CX
MOV DX,303H ;置PC4=0
MOV AL,08H
OUT DX,AL
JMP L1
EXIT:
MOV AX,2572H ;恢复中断向量
显示全部