0
点赞
收藏
分享

微信扫一扫

8255方式1+8259(中断方式)程序设计实验 应用

九点韶留学 2022-02-10 阅读 53
开发语言
CODE SEGMENT
    ASSUME CS:CODE
START:CLI  ;关中断
    MOV DS,AX  ;给data段地址
    
    MOV DX,200H  ;ICW1是0端口
    MOV AL,11H   ;控制字11H 边沿触发00010001
    OUT DX,AL    ;设置ICW1
    MOV DX,201H  ;写ICW2,ICW2是1端口 中断向量
    MOV AL,0DH   ;设置主8259的中断类型号
    OUT DX,AL    ;设置ICW2
    MOV AL,05H   ;ICW3,IR5
    OUT DX,AL    
    MOV AL,01H   ;写ICW4 EOI结束中断
    OUT DX,AL

    ;设置控制字223H
    MOV DX,223H
    MOV AL,0A0H
    OUT DX,AL
    MOV AL,0DH
    OUT DX,AL

    MOV DX,201H
    IN AL,DX  ;读IMR
    AND AL,0DFH  ;开放IR5中断 DFH(1101 1111B)
    OUT DX,AL

    MOV AX,0
    MOV DS,AX  ;中断向量码写入内存0段区域
    LEA AX,INT_PROC  ;转到中断命令 写中断向量
    ;写中断向量地址
    MOV BX,5  ;IR5
    MOV SI,08H  ;BASE=08H
    ADD SI,BX
    ;地址乘4 找段地址
    ADD SI,SI
    ADD SI,SI
    MOV [SI],AX  ;IP地址 置入中断服务程序入口地址的偏移量IP
    MOV AX,CS
    MOV [SI+2],AX  ;CS设置中断向量地址,置入中断服务程序入口地址的段基地址CS
    
    MOV BL,1
    STI  ;开中断
    L: JMP L  ;自身循环,主程序

INT_PROC:
    ;灯亮
    MOV AL,BL  ;中断处理程序
    MOV DX,220H
    OUT DX,AL  ;A口输出

    SHL BL,1   ;左移一位

    MOV DX,200H
    MOV AL,20H   ;向8259发出EOI结束中断
    OUT DX,AL
    MOV DX,201H  ;读IMR
    JNC NEXT    ;高位不为0时转移到NEXT
    
    ;中断结束
    IN AL,DX
    OR AL,20H   ;屏蔽位  关闭IR5
    OUT DX,AL
    STI    ;开中断 允许中断嵌套
    MOV AH,4CH
    INT 21H   ;返回DOS
NEXT:
    IRET       ;中断返回
CODE ENDS
   END START

电路图如下

 备注:

利用SHL语句 将结果左移一位,判断最高位是否为1再进行是否循环的语句,完成逻辑开关的设计。

举报

相关推荐

0 条评论