⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aexp14.asm

📁 微机接口技术的入门必备试验代码 试验平台msdi
💻 ASM
字号:
;*---------------------------------------------------------*
;*  Aexp14.asm  中断控制器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 AH,09H
 	  MOV DX,OFFSET MESG1
	  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         ;恢复中断向量
    MOV DX,INT0A_SEG
    PUSH DS
    MOV DS,DX
    MOV DX,INT0A_OFF
    INT 21H
    POP DS
    IN  AL,0A1H         ;屏蔽IRQ10
    OR  AL,04H
    OUT 0A1H,AL
    IN  AL,21H         ;屏蔽IRQ2
    OR  AL,04H
    OUT 21H,AL
    MOV AX,4C00H       ;程序退出
    INT 21H   
LEDLIGHT PROC FAR      ;中断服务程序
    PUSH SI
    PUSH AX
    PUSH DX
    
    CLI                 ;关中断
    MOV SI,OFFSET LEDDATA 
    ADD SI,NUM
    MOV AL,[SI]
    MOV DX,300H
    OUT DX,AL            ;点亮LED
    INC NUM
    CMP NUM,08H
    JNE NEXT
    MOV NUM,00H
NEXT :
    MOV AL,62H       ;发中断结束命令
    MOV DX,0A0H
    OUT DX,AL        ;向从片8259发EOI命令
    OUT 020H,AL      ;向主片8259发EOI命令
    STI                ;开中断
    POP DX
    POP AX
    POP SI     
    IRET
LEDLIGHT ENDP
CODE ENDS
     END START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -