📄 系统.lst
字号:
A51 MACRO ASSEMBLER 系统 05/23/2008 13:37:01 PAGE 1
MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN 系统.OBJ
ASSEMBLER INVOKED BY: E:\Program Files\KeiL\C51\BIN\A51.EXE 系统.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;****************************************************
2 ;*超声波倒车雷达
3 ;*12MHz晶振
4 ;*共阳LED显示器,空位显示0,2*4位一体数码管(8位)
5 ;****************************************************
6 ;堆栈在4F以上,20H用于接收成功标志,21H用于当前距离与设定值判定标志(1表示相等->报警)
7 ;显示缓冲单元40H-43H为设定安全距离显示;44H-47H为实际距离显示
8 ;内存4AH,4BH,4CH用于计算距离
9 ;
10 ;
11 ;
12
00B0 13 VOUT EQU P3.0
14 ;
15 ;
16 ;
17 ;***************************************************
18 ;* 中断入口
19 ;***************************************************
20 ;
21
0000 22 ORG 0000H
0000 02002C 23 LJMP START
0003 24 ORG 0003H
0003 0200BA 25 LJMP PINT0
000B 26 ORG 000BH
000B 020096 27 LJMP INTT0
0013 28 ORG 0013H
0013 32 29 RETI
001B 30 ORG 001BH
001B 0200A9 31 LJMP INTT1
0023 32 ORG 0023H
0023 32 33 RETI
002B 34 ORG 002BH
002B 32 35 RETI
36
37 ;**************************************************
38 ; 主程序
39 ;**************************************************
002C 75814F 40 START: MOV SP, #4FH
002F 7840 41 MOV R0, #40H ;40~47H为显示数据存放单元(40为最高位)
0031 7F0F 42 MOV R7,#0FH
0033 7600 43 CLEARDISP: MOV @R0, #00H
0035 08 44 INC R0
0036 DFFB 45 DJNZ R7, CLEARDISP
46
0038 31B1 47 CALL KEY_PLAER
003A 11CF 48 CALL KEY_SCAN1 ;调用设定距离程序
49
003C 752000 50 START0: MOV 20H, #00H
51
003F 758921 52 MOV TMOD, #21H ;T1为8位自动重装模式,T0为16位定时器
0042 758C8A 53 MOV TH0, #8AH ;65ms初值
0045 758ACF 54 MOV TL0, #0CFH
0048 758DF4 55 MOV TH1, #0F4H ;40KHz初值
004B 758BF4 56 MOV TL1, #0F4H
57
004E 7580FF 58 MOV P0, #0FFH
A51 MACRO ASSEMBLER 系统 05/23/2008 13:37:01 PAGE 2
0051 7590FF 59 MOV P1, #0FFH
0054 75A0FF 60 MOV P2, #0FFH
0057 75B0FF 61 MOV P3, #0FFH
005A 7C08 62 MOV R4, #08H ;超声波脉冲个数控制(为赋值的一半)
005C D2B8 63 SETB PX0
005E D2A9 64 SETB ET0
0060 D2AF 65 SETB EA
0062 D28C 66 SETB TR0 ;开启测距定时器
0064 1201C9 67 START1: LCALL DISPLAY
0067 3000FA 68 JNB 00H, START1 ;收到反射信号时标志位为1
006A C2AF 69 CLR EA
006C 120220 70 LCALL WORK ;计算距离子程序
71
006F 12030A 72 LCALL CMP
0072 203011 73 JB 30H,WARN
74
0075 D2AF 75 SETB EA
76
77
0077 C230 78 CLR 30H
0079 C200 79 CLR 00H
007B D28C 80 SETB TR0 ;重新开启测距定时器
007D 7A64 81 MOV R2, #064H ;测量间隔控制(约4*100=400ms)64H
007F 1201C9 82 LOOP: LCALL DISPLAY
0082 DAFB 83 DJNZ R2, LOOP
0084 80B6 84 SJMP START0
85
0086 86 WARN:
0086 C28C 87 CLR TR0 ;关计数器
0088 C28E 88 CLR TR1
008A C2A8 89 CLR EX0
008C C2AF 90 CLR EA
008E C2A9 91 CLR ET0
0090 C2AB 92 CLR ET1
93
0092 319E 94 CALL ALARM
0094 80F0 95 SJMP WARN
96 ;
97 ;****************************************
98 ;中断程序
99 ;****************************************
100 ;T0中断,65ms中断一次
101 ;
0096 C2AF 102 INTT0: CLR EA
0098 C28C 103 CLR TR0
009A 758C8A 104 MOV TH0, #8AH
009D 758ACF 105 MOV TL0, #0CFH
00A0 D2AB 106 SETB ET1
00A2 D2AF 107 SETB EA
00A4 D28C 108 SETB TR0 ;启动计时器T0,用以计算超声波来回时间
00A6 D28E 109 SETB TR1 ;开启发超声波用定时器T1
00A8 32 110 OUT: RETI
111
112 ;
113 ;T1中断,发超声波用
114 ;
00A9 B2B0 115 INTT1: CPL VOUT
00AB DC0C 116 DJNZ R4,RETIOUT
00AD C28E 117 CLR TR1 ;超声波发送完毕,关T1
00AF C2AB 118 CLR ET1
00B1 7C08 119 MOV R4,#08H
00B3 C289 120 CLR IE0
121
00B5 D2AF 122 SETB EA
123
124
A51 MACRO ASSEMBLER 系统 05/23/2008 13:37:01 PAGE 3
00B7 D2A8 125 SETB EX0 ;开启接收回波中断
00B9 32 126 RETIOUT: RETI
127
128 ;
129 ;外中断0,收到回波时进入
130 ;
00BA 131 PINT0:
00BA C28C 132 CLR TR0 ;关计数器
00BC C28E 133 CLR TR1
00BE C2AF 134 CLR EA
00C0 C2A9 135 CLR ET0
00C2 C2AB 136 CLR ET1
00C4 C2A8 137 CLR EX0
00C6 858A4A 138 MOV 4AH, TL0 ;将计数值移入处理单元
00C9 858C4B 139 MOV 4BH, TH0
00CC D200 140 SETB 00H ;接收成功标志
00CE 32 141 RETI
142
143 ;********************************
144 ;键盘设定安全距离
145 ;********************************
00CF 146 KEY_SCAN1: ;识别键盘有无键按下子程序
147
00CF 75A0F0 148 MOV P2,#0F0H ;置列线为0,行线为1
149
00D2 E5A0 150 MOV A,P2 ;读P2口
00D4 54F0 151 ANL A,#0F0H ;取出高四位
00D6 F5F0 152 MOV B,A ;暂存到B
00D8 75A00F 153 MOV P2,#0FH ;置列线为1,行线为0
154
00DB E5A0 155 MOV A,P2 ;读P2口
00DD 540F 156 ANL A,#0FH ;取出低四位
00DF 45F0 157 ORL A,B ;高四位与低四位逻辑或运算重新组合
00E1 B4FF02 158 CJNE A,#0FFH,KEY_IN1_1 ;0FFH为无按键按下
00E4 80E9 159 JMP KEY_SCAN1
160
00E6 161 KEY_IN1_1: ;识别具体按键值子程序
00E6 F5F0 162 MOV B,A ;将按键的特征编码暂存于B
00E8 900192 163 MOV DPTR,#KEY_TABLE
00EB 7BFF 164 MOV R3,#0FFH
00ED 165 KEY_IN1_2:
00ED 0B 166 INC R3 ;顺序码加1
00EE EB 167 MOV A,R3
00EF 93 168 MOVC A,@A+DPTR ;查表
00F0 B5F010 169 CJNE A,B,KEY_IN1_3 ;比较,若相同则找到按键的特征编码。
00F3 EB 170 MOV A,R3 ;找到特征编码后,取顺序码
171
00F4 F543 172 MOV 43H,A ;存入43H单元
00F6 31B1 173 CALL KEY_PLAER
00F8 854342 174 MOV 42H,43H
00FB 754300 175 MOV 43H,#00H
176
00FE BB0A07 177 CJNE R3,#10,KEY_SCAN2 ;输入是否结束
0101 218D 178 JMP EXIT
0103 179 KEY_IN1_3:
0103 B400E7 180 CJNE A,#00H,KEY_IN1_2 ;末完,继续查
0106 80C7 181 JMP KEY_SCAN1 ;00H为结束码
182
0108 183 KEY_SCAN2: ;识别键盘有无键按下子程序
184
185
0108 75A0F0 186 MOV P2,#0F0H ;置列线为0,行线为1
187
010B E5A0 188 MOV A,P2 ;读P2口
010D 54F0 189 ANL A,#0F0H ;取出高四位
010F F5F0 190 MOV B,A ;暂存到B
A51 MACRO ASSEMBLER 系统 05/23/2008 13:37:01 PAGE 4
0111 75A00F 191 MOV P2,#0FH ;置列线为1,行线为0
192
0114 E5A0 193 MOV A,P2 ;读P2口
0116 540F 194 ANL A,#0FH ;取出低四位
0118 45F0 195 ORL A,B ;高四位与低四位逻辑或运算重新组合
011A B4FF02 196 CJNE A,#0FFH,KEY_IN2_1 ;0FFH为无按键按下
011D 80E9 197 JMP KEY_SCAN2
198
011F 199 KEY_IN2_1: ;识别具体按键值子程序
011F F5F0 200 MOV B,A ;将按键的特征编码暂存于B
0121 900192 201 MOV DPTR,#KEY_TABLE
0124 7BFF 202 MOV R3,#0FFH
0126 203 KEY_IN2_2:
0126 0B 204 INC R3 ;顺序码加1
0127 EB 205 MOV A,R3
0128 93 206 MOVC A,@A+DPTR ;查表
0129 B5F01E 207 CJNE A,B,KEY_IN2_3 ;比较,若相同则找到按键的特征编码。
012C EB 208 MOV A,R3 ;找到特征编码后,取顺序码
209
012D F543 210 MOV 43H,A ;存入43H单元
211
212
012F BB0A0B 213 CJNE R3,#10,OUT2 ;输入是否结束
0132 854243 214 MOV 43H,42H
0135 754200 215 MOV 42H,#00H
0138 754100 216 MOV 41H,#00H
013B 8050 217 JMP EXIT
218
013D 219 OUT2:
013D 31B1 220 CALL KEY_PLAER
013F 854241 221 MOV 41H,42H
0142 854342 222 MOV 42H,43H
0145 75430A 223 MOV 43H,#0AH
224
0148 8005 225 JMP KEY_SCAN3
226
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -