⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.ls1

📁 一个完整的51单片机的操作糸统源程序! 内容十分丰富!很有借鉴价值!
💻 LS1
📖 第 1 页 / 共 5 页
字号:
                     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 + -