📄 ic.lst
字号:
0204 5006 202 JNC DURU
0206 C3 203 CLR C
0207 9406 204 SUBB A,#06H
0209 540F 205 ANL A,#0FH
020B D3 206 SETB C
020C F7 207 DURU: MOV @R1,A
020D 09 208 INC R1
020E 08 209 INC R0
020F DAF1 210 DJNZ R2,KOUQIAN ;*********************************
0211 8003 211 SJMP FINISHED
0213 212 ERRORB:
0213 120223 213 LCALL ERROR
0216 214 FINISHED:
0216 120502 215 LCALL WT ;将处理完的30h起始的数据写入到24c02的30h起始的单元中去
216 ;LCALL RT
0219 752120 217 MOV NUMB,#20H ;标志位,用来查询的时候判断上一次的操作
021C 752040 218 MOV POINTER,#40H;标志位写入到40h中去
021F 12042C 219 LCALL WR_1B
220 ;LCALL RD_1B
0222 22 221 RET
0223 222 ERROR:
0223 C2A7 223 CLR WELA ;出错时,所有数码管全显示一横
0225 758000 224 MOV P0,#00H
0228 D2A7 225 SETB WELA
022A C2A7 226 CLR WELA
022C C2A6 227 CLR DULA
022E 758001 228 MOV P0,#01H
0231 D2A6 229 SETB DULA
0233 C2A6 230 CLR DULA
0235 120738 231 LCALL DELAY2
0238 120730 232 LCALL KSTART
023B 60E6 233 JZ ERROR
023D 22 234 RET
235
023E E9 236 LOOP1:MOV A,R1 ;统计数据区的有效位数,放入R0中
023F C3 237 CLR C
0240 9430 238 SUBB A,#30H
0242 4012 239 JC ERRORA
0244 1A 240 DEC R2
0245 7400 241 MOV A,#00H ;看看30H或40H中的数是否为全零,是则跳转
0247 C3 242 CLR C
0248 9A 243 SUBB A,R2
0249 500E 244 JNC ZERO
024B E7 245 MOV A,@R1
024C 19 246 DEC R1
024D C3 247 CLR C
024E 9400 248 SUBB A,#00H
0250 60EC 249 JZ LOOP1
0252 EA 250 MOV A,R2
0253 F6 251 MOV @R0,A
0254 8005 252 JMP FINISH
0256 120223 253 ERRORA:LCALL ERROR
0259 7600 254 ZERO:MOV @R0,#00H
025B 255 FINISH:
A51 MACRO ASSEMBLER IC 07/12/2008 15:19:28 PAGE 5
025B 22 256 RET
257 ;****************************存钱*******************************
025C 258 DEPOSIT:
025C 120586 259 LCALL RT ;把内存30~37读入外存30H~37H
025F 120540 260 LCALL STS
261 ;键盘输入到60h~67h单元中,并且将输入的单元送到40h~47h中以便后面处理
0262 120521 262 LCALL WT1 ;将40h起始的内容写入到24c02中50-57H,以便进行查询
263 ;等待处理
0265 7935 264 MOV R1,#35H ;卡里的钱最低位存到30H
0267 7A07 265 MOV R2,#07H ;统计卡里钱的位数,存到50H
0269 7850 266 MOV R0,#50H ;
026B 1202CC 267 LCALL LOOP2 ;子程序统计
026E 7945 268 MOV R1,#45H ;将要存的钱的低位数存到47h
0270 7A07 269 MOV R2,#07H
0272 7851 270 MOV R0,#51H ;将要扣的钱位数存在51H
0274 1202CC 271 LCALL LOOP2 ;子程序统计
0277 7836 272 MOV R0,#36H
0279 7400 273 MOV A,#00H
027B F6 274 MOV @R0,A
027C 754600 275 MOV 46H,#00H
027F 7851 276 MOV R0,#51H
0281 E6 277 MOV A,@R0
0282 18 278 DEC R0
0283 B5501F 279 CJNE A,50H,ADDITION
280 ;比较51H和50H中那个数大,如果一样大就按存钱的位数进行加,顺序执行
0286 7930 281 J1: MOV R1,#30H
0288 7840 282 MOV R0,#40H
028A 04 283 INC A ;***************************************
028B FA 284 MOV R2,A
028C C3 285 CLR C
028D E7 286 CUNQIAN:MOV A,@R1
028E 36 287 ADDC A,@R0
028F D4 288 DA A
0290 C3 289 CLR C
0291 FD 290 MOV R5,A
0292 54F0 291 ANL A,#0F0H
0294 C4 292 SWAP A
0295 B4000A 293 CJNE A,#00H,JINBIAO ;跳转存储进位标志位,顺须执行没有进位
0298 ED 294 CONTINUE:MOV A,R5
0299 540F 295 ANL A,#0FH
029B F7 296 MOV @R1,A
029C 09 297 INC R1
029D 08 298 INC R0
029E DAED 299 DJNZ R2,CUNQIAN
02A0 800A 300 JMP DUSHU
02A2 D3 301 JINBIAO:SETB C
02A3 80F3 302 SJMP CONTINUE
02A5 4002 303 ADDITION:JC CARD ;C=1,卡里剩余钱位数高,跳转
02A7 80DD 304 JMP J1 ;C=0,存钱位数高,按存钱位数进行加
02A9 E6 305 CARD: MOV A,@R0
02AA 80DA 306 JMP J1
02AC E536 307 DUSHU: MOV A,36H
02AE C3 308 CLR C
02AF 9401 309 SUBB A,#01H
02B1 4007 310 JC TIAO
02B3 7836 311 MOV R0,#36H
02B5 7400 312 MOV A,#00H
02B7 F6 313 MOV @R0,A
02B8 800E 314 SJMP ERRORC
02BA 120502 315 TIAO: LCALL WT ;将处理完的30h起始的数据写入到24c02的30h起始的单元中去
316 ;LCALL RT
02BD 752110 317 MOV NUMB,#10H ;标志位
02C0 752040 318 MOV POINTER,#40H ;标志位,用来查询的时候判断上一次的操作
02C3 12042C 319 LCALL WR_1B ;标志位写入到40h中去
02C6 8003 320 JMP TIAL
02C8 120223 321 ERRORC: LCALL ERROR ;然后重新调这个子程序,重新输入数字
A51 MACRO ASSEMBLER IC 07/12/2008 15:19:28 PAGE 6
02CB 22 322 TIAL: RET
323
02CC 1A 324 LOOP2: DEC R2
02CD 7400 325 MOV A,#00H ;看看30H或40H中的数是否为全零,是则跳转
02CF C3 326 CLR C
02D0 9A 327 SUBB A,R2
02D1 500B 328 JNC ZERO2
02D3 E7 329 MOV A,@R1
02D4 19 330 DEC R1
02D5 C3 331 CLR C
02D6 9400 332 SUBB A,#00H
02D8 60F2 333 JZ LOOP2
02DA EA 334 MOV A,R2
02DB F6 335 MOV @R0,A
02DC 8003 336 jMP FINISHED1
02DE 337 ZERO2:
02DE 7400 338 MOV A,#00H
02E0 F6 339 MOV @R0,A
02E1 22 340 FINISHED1: RET
341 ;***************************查询上一次的操作**********************
02E2 342 INQUIRE:
02E2 752040 343 MOV POINTER,#40H
02E5 12044F 344 LCALL RD_1B
02E8 EF 345 MOV A,R7
02E9 B41026 346 CJNE A,#10H,IN1 ;是否为存
02EC C2A7 347 CLR WELA
02EE 758000 348 MOV P0,#00H
02F1 D2A7 349 SETB WELA
02F3 C2A7 350 CLR WELA
02F5 C2A6 351 CLR DULA
02F7 75804F 352 MOV P0,#4fH ;全选中,显示3
02FA D2A6 353 SETB DULA
02FC C2A6 354 CLR DULA
02FE 120765 355 LCALL DELAY3
0301 120765 356 LCALL DELAY3
0304 120765 357 LCALL DELAY3
0307 120765 358 LCALL DELAY3
030A 120765 359 LCALL DELAY3
030D 120765 360 LCALL DELAY3
361
0310 8024 362 JMP IN2
0312 363 IN1:
0312 C2A7 364 CLR WELA
0314 758000 365 MOV P0,#00H
0317 D2A7 366 SETB WELA
0319 C2A7 367 CLR WELA
031B C2A6 368 CLR DULA
031D 75805B 369 MOV P0,#5bH ;全选中,显示2
0320 D2A6 370 SETB DULA
0322 C2A6 371 CLR DULA
0324 120765 372 LCALL DELAY3
0327 120765 373 LCALL DELAY3
032A 120765 374 LCALL DELAY3
032D 120765 375 LCALL DELAY3
0330 120765 376 LCALL DELAY3
0333 120765 377 LCALL DELAY3
378
0336 379 IN2:
0336 7A64 380 MOV R2,#100
0338 381 IN3:
0338 120738 382 LCALL DELAY2
033B DAFB 383 DJNZ R2,IN3
033D 1205DD 384 LCALL RRT1
0340 1205F7 385 LCALL SHOWDO
0343 120765 386 LCALL DELAY3
0346 120765 387 LCALL DELAY3
A51 MACRO ASSEMBLER IC 07/12/2008 15:19:28 PAGE 7
0349 120765 388 LCALL DELAY3
034C 120765 389 LCALL DELAY3
034F 120765 390 LCALL DELAY3
0352 120765 391 LCALL DELAY3
0355 22 392 RET
393 ;***************************查询余额********************************
0356 394 SURPLUS:
0356 120586 395 LCALL RT
0359 396 SS1:
0359 1205A0 397 LCALL SHOWSUR
035C 120765 398 LCALL DELAY3
035F 120765 399 LCALL DELAY3
0362 120730 400 LCALL KSTART
0365 60F2 401 JZ SS1
402 ;LJMP MAIN1
0367 22 403 RET
404 ;**************************数据的输入***********************
0368 405 NUIN:
0368 7860 406 MOV R0,#60H
036A 7F01 407 MOV R7,#1
036C 408 D1:
036C 120730 409 LCALL KSTART ;上一次的确认键要松开手
036F 70FB 410 JNZ D1
0371 411 D3:
0371 120395 412 LCALL ENTER ;调用单个键的输入
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -