📄 main.lst
字号:
0104 C0E0 +1 430 PUSH ACC
0106 C0E0 +1 431 PUSH ACC
0108 C0E0 +1 432 PUSH ACC
010A C0E0 +1 433 PUSH ACC
010C C0E0 +1 434 PUSH ACC
010E C0E0 +1 435 PUSH ACC
0110 C0E0 +1 436 PUSH ACC
+1 437
0112 8981 +1 438 MOV SP,R1
+1 439
0114 +1 440 TASK_CREATE_START_RETURN:
0114 22 +1 441 RET
+1 442
+1 443 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;
+1 444 ;Suspend a task
0115 +1 445 TASK_SUSPEND:
+1 446 ;reserve
0115 22 +1 447 RET
+1 448
+1 449 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;
+1 450 ;Resume a task
0116 +1 451 TASK_RESUME:
+1 452 ;reserve
0116 22 +1 453 RET
+1 454
+1 455 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;
+1 456 ;Destroy a task
0117 +1 457 TASK_DESTROY:
+1 458 ;reserve
0117 22 +1 459 RET
+1 460
+1 461 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;
+1 462 ;Task sleep
+1 463 ;Input : R0 - sleep number of low 8bit, R1 - sleep number of high 8bit
+1 464 ;Output : NULL
0118 +1 465 TASK_SLEEP:
+1 466
+1 467 ;R2~R3 ago tick
0118 AA09 +1 468 MOV R2,VAR_TIMER_TICK_NOW_BYTE0
011A AB0A +1 469 MOV R3,VAR_TIMER_TICK_NOW_BYTE1
+1 470
011C +1 471 TASK_SLEEP_LOOP:
011C C3 +1 472 CLR C
+1 473
+1 474 ;R4~R5 different tick
011D E509 +1 475 MOV A,VAR_TIMER_TICK_NOW_BYTE0
011F 9A +1 476 SUBB A,R2
0120 FC +1 477 MOV R4,A
+1 478
0121 E50A +1 479 MOV A,VAR_TIMER_TICK_NOW_BYTE1
0123 9B +1 480 SUBB A,R3
0124 FD +1 481 MOV R5,A
+1 482
+1 483 ;Now >= Ago
0125 C3 +1 484 CLR C
+1 485
0126 EC +1 486 MOV A,R4
0127 98 +1 487 SUBB A,R0
0128 FC +1 488 MOV R4,A
+1 489
0129 ED +1 490 MOV A,R5
A51 MACRO ASSEMBLER MAIN 04/19/2009 02:07:50 PAGE 9
012A 99 +1 491 SUBB A,R1
012B FD +1 492 MOV R5,A
+1 493
012C 40EE +1 494 JC TASK_SLEEP_LOOP
012E 020134 +1 495 LJMP TASK_SLEEP_RETURN
+1 496
0131 02011C +1 497 LJMP TASK_SLEEP_LOOP
+1 498
0134 +1 499 TASK_SLEEP_RETURN:
0134 22 +1 500 RET
+1 501
+1 502 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;
+1 503 ;Create multi task, if no need multi task don't call this function
+1 504 ;Note: The main function can be use multi task aslo, but the task count don't out of DEFINE
_TASK_MAX
0135 +1 505 CREATE_MULTI_TASK:
+1 506 ;System flow
0135 900565 +1 507 MOV DPTR,#MAIN_TASK_PROCESS
0138 7800 +1 508 MOV R0,#00
013A 11D7 +1 509 CALL TASK_CREATE_
+1 510
+1 511 ;CLOCK
013C 9000C8 +1 512 MOV DPTR,#CLOCK_TASK_PROCESS
013F 7801 +1 513 MOV R0,#01
0141 11D7 +1 514 CALL TASK_CREATE_
+1 515
+1 516 ;Storage device
0143 9004C9 +1 517 MOV DPTR,#E2PROM_TASK_PROCESS ; E2PROM
0146 7802 +1 518 MOV R0,#02
0148 11D7 +1 519 CALL TASK_CREATE_
+1 520
+1 521 ;Communication device
014A 9004CE +1 522 MOV DPTR,#COM_TASK_PROCESS
014D 7803 +1 523 MOV R0,#03
014F 11D7 +1 524 CALL TASK_CREATE_
0151 22 +1 525 RET
+1 526
527
528
529 ;Driver
530 ;$include (..\Driver\I2C.inc)
+1 531 ;System I2C part
0152 +1 532 I2C_INITIAL:
0152 7AA2 +1 533 MOV R2,#0xA2
0154 7BA3 +1 534 MOV R3,#0xA3
+1 535
0156 7801 +1 536 MOV R0,#0x01 ;24C02 address
0158 7902 +1 537 MOV R1,#0x02 ;RAM address
+1 538 ;CALL I2C_WRITE
015A 22 +1 539 RET
+1 540
015B +1 541 I2C_START:
015B D2A1 +1 542 SETB DEFINE_I2C_IO_SCL
015D D2A0 +1 543 SETB DEFINE_I2C_IO_SDA
015F C2A0 +1 544 CLR DEFINE_I2C_IO_SDA
0161 C2A1 +1 545 CLR DEFINE_I2C_IO_SCL
0163 22 +1 546 RET
+1 547
0164 +1 548 I2C_STOP:
0164 C2A1 +1 549 CLR DEFINE_I2C_IO_SCL
0166 C2A0 +1 550 CLR DEFINE_I2C_IO_SDA
0168 D2A1 +1 551 SETB DEFINE_I2C_IO_SCL
016A D2A0 +1 552 SETB DEFINE_I2C_IO_SDA
016C 22 +1 553 RET
+1 554
A51 MACRO ASSEMBLER MAIN 04/19/2009 02:07:50 PAGE 10
016D +1 555 I2C_ACK_RECV:
016D D2A0 +1 556 SETB DEFINE_I2C_IO_SDA
016F D2A1 +1 557 SETB DEFINE_I2C_IO_SCL
0171 A2A0 +1 558 MOV C,DEFINE_I2C_IO_SDA
0173 C2A1 +1 559 CLR DEFINE_I2C_IO_SCL
0175 22 +1 560 RET
+1 561
0176 +1 562 I2C_ACK_SEND:
0176 C2A0 +1 563 CLR DEFINE_I2C_IO_SDA
0178 D2A1 +1 564 SETB DEFINE_I2C_IO_SCL
017A C2A1 +1 565 CLR DEFINE_I2C_IO_SCL
017C D2A0 +1 566 SETB DEFINE_I2C_IO_SDA
017E 22 +1 567 RET
+1 568
017F +1 569 I2C_ACK_NO_SEND:
017F D2A0 +1 570 SETB DEFINE_I2C_IO_SDA
0181 D2A1 +1 571 SETB DEFINE_I2C_IO_SCL
0183 C2A1 +1 572 CLR DEFINE_I2C_IO_SCL
0185 D2A0 +1 573 SETB DEFINE_I2C_IO_SDA
0187 22 +1 574 RET
+1 575
0188 +1 576 I2C_8BIT_SEND:
0188 75F008 +1 577 MOV B,#0x08
018B C3 +1 578 CLR C
+1 579
018C +1 580 I2C_8BIT_SEND_LOOP:
018C 33 +1 581 RLC A
018D 92A0 +1 582 MOV DEFINE_I2C_IO_SDA,C
018F D2A1 +1 583 SETB DEFINE_I2C_IO_SCL
0191 C2A1 +1 584 CLR DEFINE_I2C_IO_SCL
0193 D5F0F6 +1 585 DJNZ B,I2C_8BIT_SEND_LOOP
0196 22 +1 586 RET
+1 587
0197 +1 588 I2C_8BIT_RECV:
0197 75F008 +1 589 MOV B,#0x08
019A E4 +1 590 CLR A
+1 591
019B +1 592 I2C_8BIT_RECV_LOOP:
019B D2A1 +1 593 SETB DEFINE_I2C_IO_SCL
019D A2A0 +1 594 MOV C,DEFINE_I2C_IO_SDA
019F 33 +1 595 RLC A
01A0 C2A1 +1 596 CLR DEFINE_I2C_IO_SCL
01A2 D5F0F6 +1 597 DJNZ B,I2C_8BIT_RECV_LOOP
01A5 22 +1 598 RET
+1 599
01A6 +1 600 I2C_READ:
01A6 +1 601 I2C_READ_LOOP_A:
01A6 315B +1 602 CALL I2C_START
+1 603
01A8 74A0 +1 604 MOV A,#10100000B
01AA 3188 +1 605 CALL I2C_8BIT_SEND
01AC 316D +1 606 CALL I2C_ACK_RECV
01AE 40F6 +1 607 JC I2C_READ_LOOP_A
+1 608
01B0 E8 +1 609 MOV A,R0
01B1 3188 +1 610 CALL I2C_8BIT_SEND
01B3 316D +1 611 CALL I2C_ACK_RECV
+1 612
01B5 +1 613 I2C_READ_LOOP_B:
01B5 315B +1 614 CALL I2C_START
+1 615
01B7 74A1 +1 616 MOV A,#10100001B
01B9 3188 +1 617 CALL I2C_8BIT_SEND
01BB 316D +1 618 CALL I2C_ACK_RECV
01BD 40F6 +1 619 JC I2C_READ_LOOP_B
+1 620
A51 MACRO ASSEMBLER MAIN 04/19/2009 02:07:50 PAGE 11
01BF 3197 +1 621 CALL I2C_8BIT_RECV
01C1 F7 +1 622 MOV @R1,A
01C2 3176 +1 623 CALL I2C_ACK_SEND
+1 624
01C4 09 +1 625 INC R1
+1 626
01C5 3197 +1 627 CALL I2C_8BIT_RECV
01C7 F7 +1 628 MOV @R1,A
01C8 317F +1 629 CALL I2C_ACK_NO_SEND
+1 630
01CA 3164 +1 631 CALL I2C_STOP
01CC 22 +1 632 RET
+1 633
01CD +1 634 I2C_WRITE:
01CD +1 635 I2C_WRITE_LOOP_A:
01CD 315B +1 636 CALL I2C_START
+1 637
01CF 74A0 +1 638 MOV A,#10100000B
01D1 3188 +1 639 CALL I2C_8BIT_SEND
01D3 316D +1 640 CALL I2C_ACK_RECV
01D5 40F6 +1 641 JC I2C_WRITE_LOOP_A
+1 642
01D7 E8 +1 643 MOV A,R0
01D8 3188 +1 644 CALL I2C_8BIT_SEND
01DA 316D +1 645 CALL I2C_ACK_RECV
+1 646
01DC E7 +1 647 MOV A,@R1
01DD 3188 +1 648 CALL I2C_8BIT_SEND
01DF 316D +1 649 CALL I2C_ACK_RECV
+1 650
01E1 09 +1 651 INC R1
+1 652
01E2 E7 +1 653 MOV A,@R1
01E3 3188 +1 654 CALL I2C_8BIT_SEND
01E5 317F +1 655 CALL I2C_ACK_NO_SEND
+1 656
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -