?? 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 + -