📄 para.ls1
字号:
0033 3400 414 ADDC A,#00H
0035 FE 415 MOV R6,A
0036 120000 F 416 LCALL _FlashRdByte
0039 BFF016 417 CJNE R7,#0F0H,?C0003
418 ; StartAddr = ParaStart + SECTOR_SIZE + 2;
A51 MACRO ASSEMBLER PARA 03/13/2009 15:44:57 PAGE 8
419 ; SOURCE LINE # 83
003C 900000 F 420 MOV DPTR,#ParaStart
003F 7401 421 MOV A,#01H
0041 93 422 MOVC A,@A+DPTR
0042 2482 423 ADD A,#082H
0044 424 ?C0068:
0044 FE 425 MOV R6,A
0045 E4 426 CLR A
0046 93 427 MOVC A,@A+DPTR
0047 3400 428 ADDC A,#00H
0049 900000 F 429 MOV DPTR,#StartAddr?045
004C F0 430 MOVX @DPTR,A
004D A3 431 INC DPTR
004E CE 432 XCH A,R6
004F F0 433 MOVX @DPTR,A
0050 8003 434 SJMP ?_ParaWrite?Redo
0052 435 ?C0003:
436 ; else
437 ; return -1;
438 ; SOURCE LINE # 85
0052 020000 F 439 LJMP ?C0069
440 ;
441 ; Redo:
442 ; SOURCE LINE # 87
0055 443 ?_ParaWrite?Redo:
444 ; // search and write
445 ; for(i=StartAddr; i<StartAddr+SECTOR_SIZE-2; i+=2)
446 ; SOURCE LINE # 89
0055 900000 F 447 MOV DPTR,#StartAddr?045
0058 E0 448 MOVX A,@DPTR
0059 FF 449 MOV R7,A
005A A3 450 INC DPTR
005B E0 451 MOVX A,@DPTR
005C 900000 F 452 MOV DPTR,#i?042
005F CF 453 XCH A,R7
0060 F0 454 MOVX @DPTR,A
0061 A3 455 INC DPTR
0062 EF 456 MOV A,R7
0063 F0 457 MOVX @DPTR,A
0064 458 ?C0007:
0064 900000 F 459 MOV DPTR,#StartAddr?045+01H
0067 E0 460 MOVX A,@DPTR
0068 247E 461 ADD A,#07EH
006A FD 462 MOV R5,A
006B 900000 F 463 MOV DPTR,#StartAddr?045
006E E0 464 MOVX A,@DPTR
006F 3400 465 ADDC A,#00H
0071 FC 466 MOV R4,A
0072 900000 F 467 MOV DPTR,#i?042
0075 E0 468 MOVX A,@DPTR
0076 FE 469 MOV R6,A
0077 A3 470 INC DPTR
0078 E0 471 MOVX A,@DPTR
0079 FF 472 MOV R7,A
007A C3 473 CLR C
007B 9D 474 SUBB A,R5
007C EE 475 MOV A,R6
007D 9C 476 SUBB A,R4
007E 4003 477 JC $ + 5H
0080 020000 F 478 LJMP ?C0008
479 ; {
480 ; SOURCE LINE # 90
481 ; oldpara = FlashRdByte(i);
482 ; SOURCE LINE # 91
0083 120000 F 483 LCALL _FlashRdByte
484 ;---- Variable 'oldpara?044' assigned to Register 'R7' ----
A51 MACRO ASSEMBLER PARA 03/13/2009 15:44:57 PAGE 9
485 ;
486 ; if(oldpara == PARA_EMPTY) // if empty, write para
487 ; SOURCE LINE # 93
0086 EF 488 MOV A,R7
0087 B4FF1B 489 CJNE A,#0FFH,?C0010
490 ; {
491 ; SOURCE LINE # 94
492 ; FlashWrByte(i, para);
493 ; SOURCE LINE # 95
008A 900000 F 494 MOV DPTR,#i?042
008D E0 495 MOVX A,@DPTR
008E FE 496 MOV R6,A
008F A3 497 INC DPTR
0090 E0 498 MOVX A,@DPTR
0091 FF 499 MOV R7,A
0092 900000 F 500 MOV DPTR,#para?040
0095 E0 501 MOVX A,@DPTR
0096 FD 502 MOV R5,A
0097 120000 F 503 LCALL _FlashWrByte
504 ; oldpara = FlashRdByte(i);
505 ; SOURCE LINE # 96
009A 900000 F 506 MOV DPTR,#i?042
009D E0 507 MOVX A,@DPTR
009E FE 508 MOV R6,A
009F A3 509 INC DPTR
00A0 E0 510 MOVX A,@DPTR
00A1 FF 511 MOV R7,A
00A2 120000 F 512 LCALL _FlashRdByte
513 ; }
514 ; SOURCE LINE # 97
00A5 515 ?C0010:
516 ;
517 ; if(oldpara == para) // same as input para
518 ; SOURCE LINE # 99
00A5 900000 F 519 MOV DPTR,#para?040
00A8 E0 520 MOVX A,@DPTR
00A9 6F 521 XRL A,R7
00AA 7057 522 JNZ ?C0009
523 ; {
524 ; SOURCE LINE # 100
525 ; oldvalue = FlashRdByte(i+1);
526 ; SOURCE LINE # 101
00AC 900000 F 527 MOV DPTR,#i?042+01H
00AF E0 528 MOVX A,@DPTR
00B0 2401 529 ADD A,#01H
00B2 FF 530 MOV R7,A
00B3 900000 F 531 MOV DPTR,#i?042
00B6 E0 532 MOVX A,@DPTR
00B7 3400 533 ADDC A,#00H
00B9 FE 534 MOV R6,A
00BA 120000 F 535 LCALL _FlashRdByte
536 ;---- Variable 'oldvalue?043' assigned to Register 'R7' ----
537 ; if(oldvalue == value) // same value, return success
538 ; SOURCE LINE # 102
00BD 900000 F 539 MOV DPTR,#value?041
00C0 E0 540 MOVX A,@DPTR
00C1 FD 541 MOV R5,A
00C2 6F 542 XRL A,R7
00C3 7002 543 JNZ ?C0012
544 ; {
545 ; SOURCE LINE # 103
546 ; return oldvalue;
547 ; SOURCE LINE # 104
00C5 FE 548 MOV R6,A
00C6 22 549 RET
550 ; }
A51 MACRO ASSEMBLER PARA 03/13/2009 15:44:57 PAGE 10
551 ; SOURCE LINE # 105
00C7 552 ?C0012:
553 ; else if((oldvalue | value) == oldvalue) // can be over write
554 ; SOURCE LINE # 106
00C7 ED 555 MOV A,R5
00C8 4F 556 ORL A,R7
00C9 6F 557 XRL A,R7
00CA 702A 558 JNZ ?C0014
559 ; {
560 ; SOURCE LINE # 107
561 ; FlashWrByte(i+1, value);
562 ; SOURCE LINE # 108
00CC 900000 F 563 MOV DPTR,#i?042+01H
00CF E0 564 MOVX A,@DPTR
00D0 2401 565 ADD A,#01H
00D2 FF 566 MOV R7,A
00D3 900000 F 567 MOV DPTR,#i?042
00D6 E0 568 MOVX A,@DPTR
00D7 3400 569 ADDC A,#00H
00D9 FE 570 MOV R6,A
00DA 900000 F 571 MOV DPTR,#value?041
00DD E0 572 MOVX A,@DPTR
00DE FD 573 MOV R5,A
00DF 120000 F 574 LCALL _FlashWrByte
575 ; return FlashRdByte(i+1);
576 ; SOURCE LINE # 109
00E2 900000 F 577 MOV DPTR,#i?042+01H
00E5 E0 578 MOVX A,@DPTR
00E6 2401 579 ADD A,#01H
00E8 FF 580 MOV R7,A
00E9 900000 F 581 MOV DPTR,#i?042
00EC E0 582 MOVX A,@DPTR
00ED 3400 583 ADDC A,#00H
00EF FE 584 MOV R6,A
00F0 120000 F 585 LCALL _FlashRdByte
00F3 7E00 586 MOV R6,#00H
00F5 22 587 RET
588 ; }
589 ; SOURCE LINE # 110
00F6 590 ?C0014:
591 ; else // should be erase 1st
592 ; { // then find a new place
593 ; SOURCE LINE # 112
594 ; FlashWrByte(i, PARA_ERASHED);
595 ; SOURCE LINE # 113
00F6 900000 F 596 MOV DPTR,#i?042
00F9 E0 597 MOVX A,@DPTR
00FA FE 598 MOV R6,A
00FB A3 599 INC DPTR
00FC E0 600 MOVX A,@DPTR
00FD FF 601 MOV R7,A
00FE E4 602 CLR A
00FF FD 603 MOV R5,A
0100 120000 F 604 LCALL _FlashWrByte
605 ; }
606 ; SOURCE LINE # 114
607 ; }
608 ; SOURCE LINE # 115
609 ; }
610 ; SOURCE LINE # 116
0103 611 ?C0009:
0103 900000 F 612 MOV DPTR,#i?042+01H
0106 E0 613 MOVX A,@DPTR
0107 2402 614 ADD A,#02H
0109 F0 615 MOVX @DPTR,A
010A 900000 F 616 MOV DPTR,#i?042
A51 MACRO ASSEMBLER PARA 03/13/2009 15:44:57 PAGE 11
010D E0 617 MOVX A,@DPTR
010E 3400 618 ADDC A,#00H
0110 F0 619 MOVX @DPTR,A
0111 020000 F 620 LJMP ?C0007
0114 621 ?C0008:
622 ;
623 ; // check redo flag
624 ; if(fRedo)
625 ; SOURCE LINE # 119
0114 300005 F 626 JNB fRedo?046,?C0016
627 ; return -1;
628 ; SOURCE LINE # 120
0117 629 ?C0069:
0117 7EFF 630 MOV R6,#0FFH
0119 7FFF 631 MOV R7,#0FFH
011B 22 632 RET
011C 633 ?C0016:
634 ;
635 ; // copy parameters to new sector and erase old one
636 ; // and update start address
637 ; if(StartAddr == ParaStart+2)
638 ; SOURCE LINE # 124
011C 900000 F 639 MOV DPTR,#ParaStart
011F 7401 640 MOV A,#01H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -