📄 iic.ls1
字号:
439 ; SCL = 0;
440 ; SOURCE LINE # 107
001F C2B5 441 CLR SCL
442 ;
443 ; return(retc);
444 ; SOURCE LINE # 109
0021 7800 F 445 MOV R0,#LOW (retc?343)
0023 E6 446 MOV A,@R0
0024 FF 447 MOV R7,A
448 ; }
449 ; SOURCE LINE # 110
0025 450 ?C0011:
0025 22 451 RET
452 ; END OF RcvByte
453
A51 MACRO ASSEMBLER IIC 10/31/2003 02:22:26 PAGE 8
454 ;
455 ; static void AckI2c(bool bFlag)
456
---- 457 RSEG ?PR?AckI2c?IIC
0000 458 L?0051:
459 USING 0
0000 EF 460 MOV A,R7
0001 120000 F 461 LCALL ?C?CSTPTR
0004 C200 F 462 CLR ?AckI2c?BIT
0006 463 AckI2c:
464 ; SOURCE LINE # 112
465 ; {
466 ; SOURCE LINE # 113
467 ; SDA = bFlag;
468 ; SOURCE LINE # 114
0006 A200 F 469 MOV C,bFlag?444
0008 92B4 470 MOV SDA,C
471 ; //_nop_();
472 ; SCL = 1;
473 ; SOURCE LINE # 116
000A D2B5 474 SETB SCL
475 ; //_nop_();
476 ; SCL = 0; /*清时钟线,钳住I2C总线以便继续接收*/
477 ; SOURCE LINE # 118
000C C2B5 478 CLR SCL
479 ; }
480 ; SOURCE LINE # 119
000E 22 481 RET
482 ; END OF AckI2c
483
484 ;
485 ;
486 ; /***************************************************************/
487 ;
488 ;
489 ; extern bool iic_send_byte(byte SlaveAddress, byte value)
490
---- 491 RSEG ?PR?_iic_send_byte?IIC
0000 492 _iic_send_byte:
493 USING 0
494 ; SOURCE LINE # 125
495 ;---- Variable 'value?546' assigned to Register 'R5' ----
496 ;---- Variable 'SlaveAddress?545' assigned to Register 'R7' ----
497 ; {
498 ; SOURCE LINE # 126
499 ; StartI2c(); /*启动总线*/
500 ; SOURCE LINE # 127
501 ;
502 ; if(!SendByte(SlaveAddress)) /*发送器件地址*/
503 ; SOURCE LINE # 129
0000 120000 F 504 LCALL L?0050
0003 4001 505 JC ?C0013
506 ; {
507 ; SOURCE LINE # 130
508 ; return(FALSE);
509 ; SOURCE LINE # 131
0005 22 510 RET
511 ; }
512 ; SOURCE LINE # 132
0006 513 ?C0013:
514 ;
515 ; if(!SendByte(value)) /*发送数据*/
516 ; SOURCE LINE # 134
0006 AF05 517 MOV R7,AR5
0008 120000 F 518 LCALL _SendByte
000B 4001 519 JC ?C0015
A51 MACRO ASSEMBLER IIC 10/31/2003 02:22:26 PAGE 9
520 ; {
521 ; SOURCE LINE # 135
522 ; return(FALSE);
523 ; SOURCE LINE # 136
000D 22 524 RET
525 ; }
526 ; SOURCE LINE # 137
000E 527 ?C0015:
528 ;
529 ; StopI2c(); /*结束总线*/
530 ; SOURCE LINE # 139
000E 120000 F 531 LCALL StopI2c
532 ;
533 ; return(TRUE);
534 ; SOURCE LINE # 141
0011 D3 535 SETB C
536 ; }
537 ; SOURCE LINE # 142
0012 538 ?C0014:
0012 22 539 RET
540 ; END OF _iic_send_byte
541
542 ;
543 ;
544 ;
545 ; extern bool iic_rcv_byte(byte SlaveAddress, byte value)
546
---- 547 RSEG ?PR?_iic_rcv_byte?IIC
0000 548 _iic_rcv_byte:
549 USING 0
550 ; SOURCE LINE # 146
551 ;---- Variable 'value?648' assigned to Register 'R5' ----
552 ;---- Variable 'SlaveAddress?647' assigned to Register 'R7' ----
553 ; {
554 ; SOURCE LINE # 147
555 ; StartI2c(); /*启动总线*/
556 ; SOURCE LINE # 148
0000 120000 F 557 LCALL StartI2c
558 ;
559 ; if(!SendByte(SlaveAddress + 1)) /*发送器件地址*/
560 ; SOURCE LINE # 150
0003 EF 561 MOV A,R7
0004 04 562 INC A
0005 FF 563 MOV R7,A
0006 120000 F 564 LCALL _SendByte
0009 4001 565 JC ?C0016
566 ; {
567 ; SOURCE LINE # 151
568 ; return(FALSE);
569 ; SOURCE LINE # 152
000B 22 570 RET
571 ; }
572 ; SOURCE LINE # 153
000C 573 ?C0016:
574 ;
575 ; value = RcvByte(); /*读取数据*/
576 ; SOURCE LINE # 155
000C 120000 F 577 LCALL RcvByte
000F AD07 578 MOV R5,AR7
579 ;
580 ; AckI2c(TRUE); /*发送非就答位*/
581 ; SOURCE LINE # 157
0011 D200 F 582 SETB ?AckI2c?BIT
0013 120000 F 583 LCALL AckI2c
584 ;
585 ; StopI2c(); /*结束总线*/
A51 MACRO ASSEMBLER IIC 10/31/2003 02:22:26 PAGE 10
586 ; SOURCE LINE # 159
0016 120000 F 587 LCALL StopI2c
588 ;
589 ; return(TRUE);
590 ; SOURCE LINE # 161
0019 D3 591 SETB C
592 ; }
593 ; SOURCE LINE # 162
001A 594 ?C0017:
001A 22 595 RET
596 ; END OF _iic_rcv_byte
597
598 ;
599 ;
600 ; extern bool iic_send_str(byte SlaveAddress, byte address, byte *source, byte len)
601
---- 602 RSEG ?PR?_iic_send_str?IIC
0000 603 _iic_send_str:
604 USING 0
605 ; SOURCE LINE # 165
606 ;---- Variable 'SlaveAddress?749' assigned to Register 'R7' ----
607 ;---- Variable 'source?751' assigned to Register 'R1/R2/R3' ----
608 ;---- Variable 'address?750' assigned to Register 'R5' ----
609 ; {
610 ; SOURCE LINE # 166
611 ; byte idata i;
612 ;
613 ; StartI2c(); /*启动总线*/
614 ; SOURCE LINE # 169
615 ;
616 ; if(!SendByte(SlaveAddress)) /*发送器件地址*/
617 ; SOURCE LINE # 171
0000 120000 F 618 LCALL L?0050
0003 4001 619 JC ?C0018
620 ; {
621 ; SOURCE LINE # 172
622 ; return(FALSE);
623 ; SOURCE LINE # 173
0005 22 624 RET
625 ; }
626 ; SOURCE LINE # 174
0006 627 ?C0018:
628 ;
629 ; if(!SendByte(address)) /*发送器件子地址*/
630 ; SOURCE LINE # 176
0006 AF05 631 MOV R7,AR5
0008 120000 F 632 LCALL _SendByte
000B 4001 633 JC ?C0020
634 ; {
635 ; SOURCE LINE # 177
636 ; return(FALSE);
637 ; SOURCE LINE # 178
000D 22 638 RET
639 ; }
640 ; SOURCE LINE # 179
000E 641 ?C0020:
642 ;
643 ; for(i = 0; i < len; i++)
644 ; SOURCE LINE # 181
000E E4 645 CLR A
000F 7800 F 646 MOV R0,#LOW (i?753)
0011 F6 647 MOV @R0,A
0012 648 ?C0021:
0012 900000 F 649 MOV DPTR,#len?752
0015 E0 650 MOVX A,@DPTR
0016 FF 651 MOV R7,A
A51 MACRO ASSEMBLER IIC 10/31/2003 02:22:26 PAGE 11
0017 7800 F 652 MOV R0,#LOW (i?753)
0019 E6 653 MOV A,@R0
001A C3 654 CLR C
001B 9F 655 SUBB A,R7
001C 5016 656 JNC ?C0022
657 ; {
658 ; SOURCE LINE # 182
659 ; if(!SendByte(*source)) /*发送数据*/
660 ; SOURCE LINE # 183
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -