找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1601|回复: 0
收起左侧

51单片机中断查询汇编程序

[复制链接]
ID:704735 发表于 2020-4-25 22:00 | 显示全部楼层 |阅读模式
ORG         0000H
        LJMP        MAIN
ORG                0003H
        LJMP        INT_0
ORG                0030H
;==========主程序MAIN函数====LED流水灯===
MAIN:        MOV                SP, #40H                ;设置栈底
                MOV      A,#0FEH                 ;送显示模式字
                MOV                P0,#0FFH                ;P0口等待输入
                SETB        EA                                ;开总中断
                SETB        EX0                                ;开外部中断0
                SETB        EX1                                ;开外部中断1,可以直接写MOV IE,#85H
LINE:        MOV      P2,A                  ;点亮二极管 P2=1111 1011B
             ACALL          DELAY500MS
                RL          A           ;左移一位,改变显示模式字A=1111 1011
                ACALL        DELAY500MS
        SJMP     LINE           ;下面一个二极管

;==========外部中断0中断服务成程序=====
INT_0:        CLR    EA       ;关中断
        PUSH   ACC      ;保护现场
        PUSH   PSW
        JB     P0.0,EXT0  ;中断查询
                JB           P0.1,EXT1
                JB           P0.2,EXT2
                JB           P0.3,EXT3
EXIT:   POP    PSW      ;恢复现场
        POP    ACC
        SETB   EA
        RETI            ;中断返回
EXT0:                                        ; EXINT0中断程序
                MOV           R3, #0FH ;LED亮灭8次
                MOV           A, #0FFH ;送LED灭
ON_OFF0:MOV           P2, A
                LCALL  DELAY500MS
                CPL           A                ;8个LED亮灭转换
                LCALL  DELAY500MS
                DJNZ   R3, ON_OFF0
                AJMP        EXIT
EXT1:                                        ; EXINT1中断程序
                MOV           R3, #0FH ;LED亮灭8次
                MOV           A, #0FH ;送LED灭
ON_OFF1:MOV           P2, A
                LCALL  DELAY500MS
                CPL           A                ;8个LED亮灭转换
                LCALL  DELAY500MS
                DJNZ   R3, ON_OFF1
                AJMP        EXIT
EXT2:                                ;EXINT2中断程序
                MOV           R3, #0FH ;LED亮灭8次
                MOV           A, #33H ;送LED灭
ON_OFF2:MOV           P2, A
                LCALL  DELAY500MS
                CPL           A                ;8个LED亮灭转换
                LCALL  DELAY500MS
                DJNZ   R3, ON_OFF2
                AJMP        EXIT
EXT3:                                         ;EXINT3中断程序
                MOV           R3, #0FH ;LED亮灭8次
                MOV           A, #55H ;送LED灭
ON_OFF3:MOV           P2, A
                LCALL  DELAY500MS
                CPL           A                ;8个LED亮灭转换
                LCALL  DELAY500MS
                DJNZ   R3, ON_OFF3
                AJMP         EXIT

;==========延时0.5秒===================
DELAY500MS:                        ;@12.000MHz
        PUSH 30H
        PUSH 31H
        PUSH 32H
        MOV 30H,#2                  ; 总时间=(3*255*255+215*255+100)*2μs ≈ 500ms
        MOV 31H,#215
        MOV 32H,#10
NEXT:
        DJNZ 32H,NEXT
        DJNZ 31H,NEXT
        DJNZ 30H,NEXT
        POP 32H
        POP 31H
        POP 30H
        RET

        END                        ;汇编程序结束


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表