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

📄 实验四(3).asm

📁 单片机只是别人的东西
💻 ASM
字号:
;功能:中断嵌套演示程序

ORG 0000H
LJMP MAIN

ORG 0003H		;外中断INT0入口地址
LJMP INT0

ORG 0013H		;外中断INT1入口地址
LJMP INT1

ORG 0050H

PROC MAIN
MAIN:
     MOV DPTR, #8000H     ;关闭蜂鸣器
     MOV A, #0FFH
     MOVX @DPTR, A

     MOV SP, #5FH	;初始化堆栈指针SP
     ;初始化外中断INT0
     SETB IT0          	;边沿触发

     ;初始化外中断INT1
     SETB IT1           ;边沿触发
     SETB EX0           ;允许INT0中断
     SETB EX1           ;允许INT1中断
     SETB EA            ;开中断
     CLR PX0		;修改中断优先级
     SETB PX1
     ORL P1, #09H	;P1口与立即数09H相或,使P1.3、P1.0同时为1。
     CLR P1.3           ;将P1.3置为低电平,是INT0中断有效
     NOP
     SETB P1.3
     SJMP $		;模拟主程序
END


;INT0中断服务程序
ORG 0300H               ;一般并不需要指定中断服务程序存放位置
                        ;但为直观了解PC指针,这里还是指定中断
                        ;服务程序的存放位置。
PROC INT0
INT0:
     PUSH PSW
     PUSH ACC
     CLR RS1
     SETB RS0           ;切换到工作寄存器区1

     MOV P0, #0C0H      ;在LED200数码管上显示数码“0”
                        ;表明正在执行INT0中断服务程序
     LCALL SDELAY       ;调用软件延迟,使“0” 字稳定显示2S

     SETB P1.0
     CLR P1.0           ;将P1.0置为低电平,使INT1中断有效
     SETB P1.0
     NOP

     NOP                ;断点1

     MOV P0, #80H       ;在LED200数码管上显示数码“8”
     LCALL SDELAY       ;调用软件延迟,使“8” 字稳定显示2S

     POP  ACC
     POP  PSW
     RETI
END

ORG 0400H
PROC INT1
INT1:
     PUSH PSW
     PUSH ACC
     SETB RS1
     CLR RS0            ;切换到工作寄存器区2
     NOP                ;断点2

     MOV P0, #0F9H      ;在LED200数码管上显示数码“1”
                        ;表明正在执行INT1中断服务程序
     LCALL SDELAY       ;调用软件延迟,使“1” 字稳定显示2S

     POP  ACC
     POP  PSW
     RETI
END



;利用多重循环实现软件延迟
;延迟时间约为25*255*255个机器周期,当晶体频率为12MHz,
;在12时钟机器周期状态下,延迟时间约为2-3S。
PROC SDELAY
SDELAY:
    MOV R5, #25
LOOP2:
    MOV R6, #0FFH
LOOP1:
    MOV R7, #0FFH
    DJNZ R7, $
    DJNZ R6, LOOP1
    DJNZ R5, LOOP2
    RET
END

⌨️ 快捷键说明

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