📄 中断系统的应用(二).asm
字号:
ORG 0000H ;主程序起始地址设置
AJMP START ;跳到主程序入口
ORG 0003H ; 中断子程序矢量地址(K1键钮)
AJMP INTR0 ;跳到 中断子程序入口
ORG 0013H ; 中断矢量地址(K2键钮)
AJMP INTR1 ;跳到 中断子程序入口
START: MOV IE,#85H ;设定 和 中断使能
MOV IP,#04H ; 优先设置为最高
MOV TCON,#00H ; 和 电平触发
MOV SP,#60H
MOV P0,#0FFH
MOV P1,#0FFH
MOV R0,#00H ;设置K1按键初值
MOV A,#00H ;设置D0~D7初始状态
LP1: MOV P0,A ;将A送至P0口
LCALL DELAY
CPL A ;D0~D7闪烁
SJMP LP1 ;等待按键按下中断
INTR0: PUSH Acc ;将A压入堆栈暂时保存
PUSH PSW ;将PSW压入堆栈暂时保存
SETB RS0 ;使用工作寄存器组1
INC R0 ;K1键值加1
MOV A,#00H ;判断K1键值的奇偶性
ORL A, R0
JNB PSW.0,DOUBLE ;PSW的D0=0,即K1键值为偶数,跳转
SINGLE:MOV P0,#00H ;D0~D3、 D4~D7交叉点亮程序
MOV A,#0FH
MOV R4,#03H ;设定交叉点亮3次
SINGLE1:MOV P0,A
LCALL DELAY
SWAP A ;A高、低字节交换
DJNZ R4,SINGLE1
AJMP LP5 ;交叉次数到,退出
DOUBLE:MOV P0,#00H ;D0~D7进行左移和右移程序
MOV R1,#02H ;设定移动2次
DOUBLE1:MOV A, #01H
MOV R2,#08H ;左移8个灯
SETB C
MOV P0,A
LP2: RLC A
LCALL DELAY
DJNZ R2,LP2
MOV A, #01H
MOV R2,#08H ;右移8个灯
CLR C
LP3: MOV P0,A
LCALL DELAY
RRC A
DJNZ R2,LP3
DJNZ R1,DOUBLE1 ;判移动次数是否达到,否,继续
LP5: NOP ;退出INT0中断子程序
POP PSW ;取回PSW暂时保存的值
POP Acc ;取回A暂时保存的值
RETI ;返回主程序
INTR1:PUSH Acc ;K2键下时,报警子程序
PUSH PSW
CLR P1.0 ;报警
LCALL DELAY ;延时
SETB P1.0
POP PSW
POP Acc
RETI ; 中断返回
DELAY:MOV R7,#20 ;延时0.2s子程序
DELA1:MOV R6,#20
DELA2:MOV R5,#248
DJNZ R5,$
DJNZ R6,DELA2
DJNZ R7,DELA1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -