⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmp.asm

📁 《PIC单片机应用开发典型模块》源代码及图片
💻 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 + -