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

📄 i2c.lst

📁 系统采用51单片机
💻 LST
📖 第 1 页 / 共 4 页
字号:
 294   1              I2C_Start();
 295   1      //发送从机地址
 296   1              I2C_Write(SlaveAddr);
 297   1              if ( I2C_GetAck() )
 298   1              {
 299   2                      I2C_Stop();
C51 COMPILER V8.16   I2C                                                                   10/04/2008 14:53:01 PAGE 11  

 300   2                      return 1;
 301   2              }
 302   1      //发送子地址
 303   1              I2C_Write(SubAddr);
 304   1              if ( I2C_GetAck() )
 305   1              {
 306   2                      I2C_Stop();
 307   2                      return 1;
 308   2              }
 309   1      //发送重复起始条件
 310   1              I2C_Start();
 311   1      //发送从机地址
 312   1              SlaveAddr |= 0x01;
 313   1              I2C_Write(SlaveAddr);
 314   1              if ( I2C_GetAck() )
 315   1              {
 316   2                      I2C_Stop();
 317   2                      return 1;
 318   2              }
 319   1      //接收数据
 320   1              for (;;)
 321   1              {
 322   2                      *dat++ = I2C_Read();
 323   2                      if ( --Size == 0 )
 324   2                      {
 325   3                              I2C_PutAck(1);
 326   3                              break;
 327   3                      }
 328   2                      I2C_PutAck(0);
 329   2              }
 330   1      //接收完毕,停止I2C总线,并返回结果
 331   1              I2C_Stop();
 332   1              return 0;
 333   1      }
 334          
 335          
 336          /*
 337          函数:I2C_Get()
 338          功能:主机通过I2C总线从从机接收1个字节的数据
 339          参数:
 340                  SlaveAddr:从机地址(高7位是从机地址,最低位是读标志1)
 341                  SubAddr:从机的子地址
 342                  *dat:保存接收到的数据
 343          返回:
 344                  0:接收成功
 345                  1:在接收过程中出现异常
 346          */
 347          bit I2C_Get(unsigned char SlaveAddr, unsigned char SubAddr, char *dat)
 348          {
 349   1              return I2C_Gets(SlaveAddr,SubAddr,1,dat);
 350   1      }
 351          
C51 COMPILER V8.16   I2C                                                                   10/04/2008 14:53:01 PAGE 12  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION I2C_Init (BEGIN)
                                           ; SOURCE LINE # 30
                                           ; SOURCE LINE # 31
                                           ; SOURCE LINE # 32
0000 D2B4              SETB    I2C_SCL
                                           ; SOURCE LINE # 33
0002 750005      R     MOV     I2C_Delay_t,#05H
0005         ?C0001:
0005 D500FD      R     DJNZ    I2C_Delay_t,?C0001
0008         ?C0002:
                                           ; SOURCE LINE # 34
0008 D2B5              SETB    I2C_SDA
                                           ; SOURCE LINE # 35
000A 750005      R     MOV     I2C_Delay_t,#05H
000D         ?C0003:
000D D500FD      R     DJNZ    I2C_Delay_t,?C0003
                                           ; SOURCE LINE # 36
0010         ?C0005:
0010 22                RET     
             ; FUNCTION I2C_Init (END)

             ; FUNCTION I2C_Start (BEGIN)
                                           ; SOURCE LINE # 48
                                           ; SOURCE LINE # 49
                                           ; SOURCE LINE # 50
0000 D2B5              SETB    I2C_SDA
                                           ; SOURCE LINE # 51
0002 750005      R     MOV     I2C_Delay_t,#05H
0005         ?C0006:
0005 D500FD      R     DJNZ    I2C_Delay_t,?C0006
0008         ?C0007:
                                           ; SOURCE LINE # 52
0008 D2B4              SETB    I2C_SCL
                                           ; SOURCE LINE # 53
000A 750005      R     MOV     I2C_Delay_t,#05H
000D         ?C0008:
000D D500FD      R     DJNZ    I2C_Delay_t,?C0008
0010         ?C0009:
                                           ; SOURCE LINE # 54
0010 C2B5              CLR     I2C_SDA
                                           ; SOURCE LINE # 55
0012 750005      R     MOV     I2C_Delay_t,#05H
0015         ?C0010:
0015 D500FD      R     DJNZ    I2C_Delay_t,?C0010
0018         ?C0011:
                                           ; SOURCE LINE # 56
0018 C2B4              CLR     I2C_SCL
                                           ; SOURCE LINE # 57
001A 750005      R     MOV     I2C_Delay_t,#05H
001D         ?C0012:
001D D500FD      R     DJNZ    I2C_Delay_t,?C0012
                                           ; SOURCE LINE # 58
0020         ?C0014:
0020 22                RET     
             ; FUNCTION I2C_Start (END)

             ; FUNCTION _I2C_Write (BEGIN)
                                           ; SOURCE LINE # 67
;---- Variable 'dat' assigned to Register 'R7' ----
C51 COMPILER V8.16   I2C                                                                   10/04/2008 14:53:01 PAGE 13  

                                           ; SOURCE LINE # 68
                                           ; SOURCE LINE # 69
;---- Variable 't' assigned to Register 'R6' ----
0000 7E08              MOV     R6,#08H
0002         ?C0017:
                                           ; SOURCE LINE # 71
                                           ; SOURCE LINE # 72
0002 EF                MOV     A,R7
0003 33                RLC     A
0004 92B5              MOV     I2C_SDA,C
                                           ; SOURCE LINE # 73
0006 EF                MOV     A,R7
0007 25E0              ADD     A,ACC
0009 FF                MOV     R7,A
                                           ; SOURCE LINE # 74
000A D2B4              SETB    I2C_SCL
                                           ; SOURCE LINE # 75
000C 750005      R     MOV     I2C_Delay_t,#05H
000F         ?C0018:
000F D500FD      R     DJNZ    I2C_Delay_t,?C0018
0012         ?C0019:
                                           ; SOURCE LINE # 76
0012 C2B4              CLR     I2C_SCL
                                           ; SOURCE LINE # 77
0014 750005      R     MOV     I2C_Delay_t,#05H
0017         ?C0020:
0017 D500FD      R     DJNZ    I2C_Delay_t,?C0020
                                           ; SOURCE LINE # 78
001A         ?C0015:
001A DEE6              DJNZ    R6,?C0017
                                           ; SOURCE LINE # 79
001C 22                RET     
             ; FUNCTION _I2C_Write (END)

             ; FUNCTION I2C_Read (BEGIN)
                                           ; SOURCE LINE # 87
;---- Variable 'dat' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 88
                                           ; SOURCE LINE # 90
;---- Variable 't' assigned to Register 'R6' ----
0000 7E08              MOV     R6,#08H
                                           ; SOURCE LINE # 91
0002 D2B5              SETB    I2C_SDA
0004         ?C0025:
                                           ; SOURCE LINE # 93
                                           ; SOURCE LINE # 94
0004 D2B4              SETB    I2C_SCL
                                           ; SOURCE LINE # 95
0006 750005      R     MOV     I2C_Delay_t,#05H
0009         ?C0026:
0009 D500FD      R     DJNZ    I2C_Delay_t,?C0026
000C         ?C0027:
                                           ; SOURCE LINE # 96
000C EF                MOV     A,R7
000D 25E0              ADD     A,ACC
000F FF                MOV     R7,A
                                           ; SOURCE LINE # 97
0010 30B503            JNB     I2C_SDA,?C0028
0013 430701            ORL     AR7,#01H
0016         ?C0028:
                                           ; SOURCE LINE # 98
0016 C2B4              CLR     I2C_SCL
C51 COMPILER V8.16   I2C                                                                   10/04/2008 14:53:01 PAGE 14  

                                           ; SOURCE LINE # 99
0018 750005      R     MOV     I2C_Delay_t,#05H
001B         ?C0029:
001B D500FD      R     DJNZ    I2C_Delay_t,?C0029
                                           ; SOURCE LINE # 100
001E         ?C0023:
001E DEE4              DJNZ    R6,?C0025
                                           ; SOURCE LINE # 101
                                           ; SOURCE LINE # 102
0020         ?C0031:
0020 22                RET     
             ; FUNCTION I2C_Read (END)

             ; FUNCTION L?0084 (BEGIN)
0000 5306FE            ANL     AR6,#0FEH
0003 120000      R     LCALL   I2C_Start
0006 AF06              MOV     R7,AR6
0008 120000      R     LCALL   _I2C_Write
             ; FUNCTION I2C_GetAck (BEGIN)
                                           ; SOURCE LINE # 115
                                           ; SOURCE LINE # 116
                                           ; SOURCE LINE # 118
000B D2B5              SETB    I2C_SDA
                                           ; SOURCE LINE # 119
000D 750005      R     MOV     I2C_Delay_t,#05H
0010         ?C0032:
0010 D500FD      R     DJNZ    I2C_Delay_t,?C0032
0013         ?C0033:
                                           ; SOURCE LINE # 120
0013 D2B4              SETB    I2C_SCL
                                           ; SOURCE LINE # 121
0015 750005      R     MOV     I2C_Delay_t,#05H
0018         ?C0034:
0018 D500FD      R     DJNZ    I2C_Delay_t,?C0034
001B         ?C0035:
                                           ; SOURCE LINE # 122
001B A2B5              MOV     C,I2C_SDA
001D 9200        R     MOV     ack,C
                                           ; SOURCE LINE # 123
001F C2B4              CLR     I2C_SCL
                                           ; SOURCE LINE # 124
0021 750005      R     MOV     I2C_Delay_t,#05H
0024         ?C0036:
0024 D500FD      R     DJNZ    I2C_Delay_t,?C0036
0027         ?C0037:
                                           ; SOURCE LINE # 125
0027 A200        R     MOV     C,ack
                                           ; SOURCE LINE # 126
0029         ?C0038:
0029 22                RET     
             ; FUNCTION I2C_GetAck (END)

             ; FUNCTION I2C_PutAck (BEGIN)
                                           ; SOURCE LINE # 139
                                           ; SOURCE LINE # 140
                                           ; SOURCE LINE # 141
0000 A200        R     MOV     C,ack
0002 92B5              MOV     I2C_SDA,C
                                           ; SOURCE LINE # 142
0004 750005      R     MOV     I2C_Delay_t,#05H
0007         ?C0039:
0007 D500FD      R     DJNZ    I2C_Delay_t,?C0039
C51 COMPILER V8.16   I2C                                                                   10/04/2008 14:53:01 PAGE 15  

000A         ?C0040:
                                           ; SOURCE LINE # 143
000A D2B4              SETB    I2C_SCL
                                           ; SOURCE LINE # 144
000C 750005      R     MOV     I2C_Delay_t,#05H
000F         ?C0041:
000F D500FD      R     DJNZ    I2C_Delay_t,?C0041
0012         ?C0042:
                                           ; SOURCE LINE # 145
0012 C2B4              CLR     I2C_SCL
                                           ; SOURCE LINE # 146
0014 750005      R     MOV     I2C_Delay_t,#05H
0017         ?C0043:
0017 D500FD      R     DJNZ    I2C_Delay_t,?C0043
                                           ; SOURCE LINE # 147
001A         ?C0045:
001A 22                RET     
             ; FUNCTION I2C_PutAck (END)

             ; FUNCTION I2C_Stop (BEGIN)
                                           ; SOURCE LINE # 158
                                           ; SOURCE LINE # 159
                                           ; SOURCE LINE # 160
;---- Variable 't' assigned to Register 'R6/R7' ----
0000 7F01              MOV     R7,#01H
0002 7E00              MOV     R6,#00H
                                           ; SOURCE LINE # 161
0004 C2B5              CLR     I2C_SDA
                                           ; SOURCE LINE # 162
0006 750005      R     MOV     I2C_Delay_t,#05H
0009         ?C0046:
0009 D500FD      R     DJNZ    I2C_Delay_t,?C0046
000C         ?C0047:
                                           ; SOURCE LINE # 163
000C D2B4              SETB    I2C_SCL
                                           ; SOURCE LINE # 164
000E 750005      R     MOV     I2C_Delay_t,#05H
0011         ?C0048:
0011 D500FD      R     DJNZ    I2C_Delay_t,?C0048
0014         ?C0049:
                                           ; SOURCE LINE # 165
0014 D2B5              SETB    I2C_SDA
                                           ; SOURCE LINE # 166
0016 750005      R     MOV     I2C_Delay_t,#05H
0019         ?C0050:
0019 D500FD      R     DJNZ    I2C_Delay_t,?C0050
001C         ?C0052:
                                           ; SOURCE LINE # 167
001C EF                MOV     A,R7
001D 1F                DEC     R7
001E 7001              JNZ     ?C0076
0020 1E                DEC     R6
0021         ?C0076:
0021 14                DEC     A
0022 4E                ORL     A,R6
0023 70F7              JNZ     ?C0052
                                           ; SOURCE LINE # 168
0025         ?C0054:
0025 22                RET     
             ; FUNCTION I2C_Stop (END)

             ; FUNCTION _I2C_Puts (BEGIN)
C51 COMPILER V8.16   I2C                                                                   10/04/2008 14:53:01 PAGE 16  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -