📄 zd02.asm
字号:
;文件名:ZD02.ASM
;程序功能:多级外部中断控制灯移动
ORG 00H ; 主程序起始地址
JMP START ;跳到主程序START
ORG 03H ;INT0中断子程序起始地址
JMP EXT0 ; 中断子程序
ORG 13H ; INT1中断子程序起始地址
JMP EXT1
START: MOV IE, #10000101B ; INT0中断使能
MOV IP, #00000100B ; INT0中断优先
MOV TCON, #00000000B ; INT0为电平触发
MOV SP, #70H ;设定堆栈指针
MOV A, #00H ; A存有P1口欲显值
LOOP: MOV P1,A ; P1端口灯亮
LCALL DELAY ; 调延时1秒子程序
CPL A ;将A的值反相
JMP LOOP
EXT0: PUSH ACC ;将累加器的值压入堆栈保存
PUSH PSW ;将 PSW的值压入堆栈保存
SETB RS0 ;设定工作寄存器组1
CLR RS1 ;
MOV R3,#03
LOOP1: MOV R0, #08
;设置左移位数
MOV A ,#0FEH ;设置左移初值
LOOP2: MOV P1, A ;输出至P1
ACALL DELAY ;调延时1秒子程序
RL A ;左移一位
DJNZ R0, LOOP2 ;判断移动位数
MOV R0,#07 ;设置右移位数
LOOP3: RR A ;右移一位
MOV P1, A ;输出至P1
LCALL DELAY ;调延时1秒子程序
DJNZ R0, LOOP3
DJNZ R3,LOOP1
POP PSW ;从堆栈取回PSW的值
POP ACC ;从堆栈取回值 A的值
RETI ;返回主程序
EXT1: PUSH ACC ;将累加器的值压入堆栈保存
PUSH PSW ;将 PSW的值压入堆栈保存
SETB RS1 ;设定工作寄存器组1
CLR RS0 ;
MOV R3,#03
LOOP4: MOV R0, #06 ;设置左移位数
MOV A ,#0FCH ;设置左移初值
LOOP5: MOV P1, A ;输出至P1
ACALL DELAY ;调延时1秒子程序
RL A ;左移一位
DJNZ R0, LOOP5 ;判断移动位数
MOV R0,#06 ;设置右移位数
LOOP6: RR A ;右移一位
MOV P1, A ;输出至P1
LCALL DELAY ;调延时1秒子程序
DJNZ R0, LOOP6
DJNZ R3,LOOP4
POP PSW ;从堆栈取回PSW的值
POP ACC ;从堆栈取回值 A的值
RETI ;返回主程序
DELAY: MOV R5, #20 ; 延时1秒子程序
DLY1: MOV R6, #20 ;
DLY2: MOV R7, #248 ;
DJNZ R7, $ ;
DJNZ R6, DLY2 ;
DJNZ R5, DLY1 ;
RET ;
END ; 程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -