📄 cmp.asm
字号:
;-----------------------------------
; 比较输入数大小实例
;功能:输入两个数,比较两个输入数大小
;-----------------------------------
LED1_PIN EQU P1.0
LED2_PIN EQU P1.1
LED3_PIN EQU P1.2
KEY1_PIN EQU P3.2
KEY2_PIN EQU P3.3
DATA1 DATA 30H
DATA2 DATA 31H
INPUT_FLAG DATA 32H
ORG 0000H ;伪指令,指定程序从0000H开始存放
LJMP MAIN ;跳转指令,程序跳转到MAIN处
ORG 0100H ;伪指令,指定以下程序从0100H开始存放
MAIN:
MOV SP,#60H ;给堆栈指针赋初值
SETB KEY1_PIN ;置一P3.2,初始化输入口
SETB KEY2_PIN ;置一P3.3,初始化输入口
SETB LED1_PIN ;置一P1.0,LED1灭
SETB LED2_PIN ;置一P1.1,LED2灭
SETB LED3_PIN ;置一P1.2,LED3灭
MOV DATA1,#00H ;给DATA1赋初值
MOV DATA2,#00H ;给DATA2赋初值
MOV INPUT_FLAG,#00H ;给INPUT_FLAG赋初值
KEY1:
MOV C,KEY1_PIN ;检测按键1
JC KEY2
LCALL DELAY10MS ;延时10MS,按键抖动消除
MOV C,KEY1_PIN
JC KEY2
LCALL KEY1_PROC ;按键1被按下,调用按键1处理子程序
KEY2:
MOV C,KEY2_PIN ;检测按键2
JC KEY1
LCALL DELAY10MS ;延时10MS,按键抖动消除
MOV C,KEY2_PIN
JC KEY1
LCALL KEY2_PROC ;按键2被按下,调用按键2处理子程序
SJMP KEY1 ;跳转,程序继续
;延时10MS子程序
DELAY10MS:
MOV R7,#20
DELAY0:
MOV R6,#250
DJNZ R6,$
DJNZ R7,DELAY0
RET
;按键1输入处理程序
KEY1_PROC:
MOV A,INPUT_FLAG
JNZ KEY1_PROC_NEXT ;如果INPUT_FLAG =0,DATA1= DATA1+1
INC DATA1
RET
KEY1_PROC_NEXT:
DEC A
JNZ KEY1_PROC_EXIT ;如果INPUT_FLAG =1,DATA2= DATA2+1
INC DATA2
KEY1_PROC_EXIT:
RET
;按键2输入处理程序
KEY2_PROC:
MOV DPTR,#KEY2_PROC_TABLE
MOV A,INPUT_FLAG
ADD A,INPUT_FLAG
JMP @A+DPTR
KEY2_PROC_TABLE:
AJMP KEY2_PROC1
AJMP KEY2_PROC2
AJMP KEY2_PROC3
;按键2第一次被按下,第一个数被输入,LED3亮
KEY2_PROC1:
INC INPUT_FLAG ;变量INPUT_FLAG加一
CLR LED3_PIN ;清零P1.2,LED3亮,指示第一个数已被输入
RET
;按键2第二次被按下,第二个数被输入,比较两次输入数字大小,给出比较结果,LED3灭
KEY2_PROC2:
INC INPUT_FLAG ;变量INPUT_FLAG加一
CLR C ;计算DATA1-DATA2
MOV A,DATA1
SUBB A,DATA2
JZ KEY2_PROC2_ZERO ;如果DATA1-DATA2=0,跳转到KEY2_PROC2_ZERO
JC KEY2_PROC2_NEXT ;如果DATA1<DATA2,跳转到KEY2_PROC2_NEXT
CLR LED2_PIN ;如果DATA1>DATA2,清零P1.1,LED2亮
SJMP KEY2_PROC2_EXIT
KEY2_PROC2_NEXT:
CLR LED1_PIN ;如果DATA1<DATA2,清零P1.0,LED1亮
SJMP KEY2_PROC2_EXIT
KEY2_PROC2_ZERO:
CLR LED1_PIN ;如果DATA1=DATA2,清零P1.0和P1.1,LED1和LED2亮
CLR LED2_PIN
KEY2_PROC2_EXIT:
SETB LED3_PIN ;清零P1.2,LED3亮
RET
;按键2第三次被按下,初始化各变量,LED全部熄灭,准备下次比较
KEY2_PROC3:
MOV INPUT_FLAG,#00H ;给INPUT_FLAG赋初值
MOV DATA1,#00H ;给DATA1赋初值
MOV DATA2,#00H ;给DATA2赋初值
SETB LED1_PIN ;置一P1.0,LED1灭
SETB LED2_PIN ;置一P1.1,LED2灭
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -