📄 实验四(3).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 + -