📄 10.asm
字号:
ORG 0000H
AJMP START
ORG 0003H ;INT0中断处理程序入口地址
AJMP EXTINT0 ;跳转到外部中断0程序EXINT0
ORG 0013H ;INT1中断处理程序入口地址
AJMP EXTINT1 ;跳转到外部中断1程序EXINT1
ORG 0030H
START: MOV SP,#60H ;设置堆栈
SETB EX1 ;开外部中断1
SETB EX0 ;开外部中断0
SETB EA ;开总中断
SETB IT1 ;外部中断1由下降沿触发
SETB IT0 ;外部中断0由下降沿触发
MOV A,#0FFH ;A初始化
CLR C
CLR 20H.0 ;按键key0标志位
CLR 20H.1 ;按键key1标志位
NEXT:
JB 20H.0,KEY0 ;判断key0被按下
JB 20H.1,KEY1 ;判断key1被按下
AJMP NEXT ;循环输出
key0: RRC A ;带c位循环右移
MOV P2,A ;将A中的数值输出到P2口
CALL DELAY ;调用延时子程序
AJMP NEXT ;循环输出
key1: RLC A ;带c位循环左移
MOV P2,A ;将A中的数值输出到P2口
CALL DELAY ;调用延时子程序
AJMP NEXT ;循环输出
; 以下是外部中断0服务程序
EXTINT0: PUSH ACC ;将ACC的值存入堆栈保存
PUSH PSW ;将PSW的值存入堆栈保存
SETB 20H.0 ;key0按下置标志位
CLR 20H.1
POP PSW ;从堆栈取回PSW的值
POP ACC ;从堆栈取回A的值
RETI ;返回主程序
; 以下是外部中断1服务程序
EXTINT1: PUSH ACC ;将ACC的值存入堆栈保存
PUSH PSW ;将PSW的值存入堆栈保存
SETB 20H.1 ;key1按下置标志位
CLR 20H.0
POP PSW ;从堆栈取回PSW的值
POP ACC ;从堆栈取回A的值
RETI ;返回主程序
;以下延时子程序
DELAY: PUSH ACC
PUSH PSW
MOV R7,#250
DE1: MOV R6,#250
DE2: DJNZ R6,DE2
DJNZ R7,DE1
POP PSW
POP ACC
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -