📄 cmp.lst
字号:
A51 MACRO ASSEMBLER CMP 06/23/2007 09:45:24 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN CMP.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE CMP.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;-----------------------------------
2 ; 比较输入数大小实例
3 ;功能:输入两个数,比较两个输入数大小
4 ;-----------------------------------
0090 5 LED1_PIN EQU P1.0
0091 6 LED2_PIN EQU P1.1
0092 7 LED3_PIN EQU P1.2
00B2 8 KEY1_PIN EQU P3.2
00B3 9 KEY2_PIN EQU P3.3
0030 10 DATA1 DATA 30H
0031 11 DATA2 DATA 31H
0032 12 INPUT_FLAG DATA 32H
13
0000 14 ORG 0000H ;伪指令,指定程序从0000H开始存放
0000 020100 15 LJMP MAIN ;跳转指令,程序跳转到MAIN处
16
0100 17 ORG 0100H ;伪指令,指定以下程序从0100H开始存放
0100 18 MAIN:
0100 758160 19 MOV SP,#60H ;给堆栈指针赋初值
0103 D2B2 20 SETB KEY1_PIN ;置一P3.2,初始化输入口
0105 D2B3 21 SETB KEY2_PIN ;置一P3.3,初始化输入口
0107 D290 22 SETB LED1_PIN ;置一P1.0,LED1灭
0109 D291 23 SETB LED2_PIN ;置一P1.1,LED2灭
010B D292 24 SETB LED3_PIN ;置一P1.2,LED3灭
010D 753000 25 MOV DATA1,#00H ;给DATA1赋初值
0110 753100 26 MOV DATA2,#00H ;给DATA2赋初值
0113 753200 27 MOV INPUT_FLAG,#00H ;给INPUT_FLAG赋初值
0116 28 KEY1:
0116 A2B2 29 MOV C,KEY1_PIN ;检测按键1
0118 400A 30 JC KEY2
011A 120134 31 LCALL DELAY10MS ;延时10MS,按键抖动消除
011D A2B2 32 MOV C,KEY1_PIN
011F 4003 33 JC KEY2
0121 12013D 34 LCALL KEY1_PROC ;按键1被按下,调用按键1处理子程序
0124 35 KEY2:
0124 A2B3 36 MOV C,KEY2_PIN ;检测按键2
0126 40EE 37 JC KEY1
0128 120134 38 LCALL DELAY10MS ;延时10MS,按键抖动消除
012B A2B3 39 MOV C,KEY2_PIN
012D 40E7 40 JC KEY1
012F 12014A 41 LCALL KEY2_PROC ;按键2被按下,调用按键2处理子程序
0132 80E2 42 SJMP KEY1 ;跳转,程序继续
43
44 ;延时10MS子程序
0134 45 DELAY10MS:
0134 7F14 46 MOV R7,#20
0136 47 DELAY0:
0136 7EFA 48 MOV R6,#250
0138 DEFE 49 DJNZ R6,$
013A DFFA 50 DJNZ R7,DELAY0
013C 22 51 RET
52
53 ;按键1输入处理程序
013D 54 KEY1_PROC:
013D E532 55 MOV A,INPUT_FLAG
013F 7003 56 JNZ KEY1_PROC_NEXT ;如果INPUT_FLAG =0,DATA1= DATA1+1
0141 0530 57 INC DATA1
0143 22 58 RET
A51 MACRO ASSEMBLER CMP 06/23/2007 09:45:24 PAGE 2
0144 59 KEY1_PROC_NEXT:
0144 14 60 DEC A
0145 7002 61 JNZ KEY1_PROC_EXIT ;如果INPUT_FLAG =1,DATA2= DATA2+1
0147 0531 62 INC DATA2
0149 63 KEY1_PROC_EXIT:
0149 22 64 RET
65
66 ;按键2输入处理程序
014A 67 KEY2_PROC:
014A 900152 68 MOV DPTR,#KEY2_PROC_TABLE
014D E532 69 MOV A,INPUT_FLAG
014F 2532 70 ADD A,INPUT_FLAG
0151 73 71 JMP @A+DPTR
0152 72 KEY2_PROC_TABLE:
0152 2158 73 AJMP KEY2_PROC1
0154 215D 74 AJMP KEY2_PROC2
0156 2177 75 AJMP KEY2_PROC3
76
77 ;按键2第一次被按下,第一个数被输入,LED3亮
0158 78 KEY2_PROC1:
0158 0532 79 INC INPUT_FLAG ;变量INPUT_FLAG加一
015A C292 80 CLR LED3_PIN ;清零P1.2,LED3亮,指示第一
个数已被输入
015C 22 81 RET
82
83 ;按键2第二次被按下,第二个数被输入,比较两次输入数字大小,给出比较结果,LED3灭
015D 84 KEY2_PROC2:
015D 0532 85 INC INPUT_FLAG ;变量INPUT_FLAG加一
015F C3 86 CLR C ;计算DATA1-DATA2
0160 E530 87 MOV A,DATA1
0162 9531 88 SUBB A,DATA2
0164 600A 89 JZ KEY2_PROC2_ZERO ;如果DATA1-DATA2=0,跳转到KEY2_PROC2_ZERO
0166 4004 90 JC KEY2_PROC2_NEXT ;如果DATA1<DATA2,跳转到KEY2_PROC2_NEXT
0168 C291 91 CLR LED2_PIN ;如果DATA1>DATA2,清零P1.1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -