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

📄 i2c.lst

📁 一个流量控制仪器的源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 113          /*******************************************************************
 114                                  向有子地址器件发送多字节数据函数
 115          函数原型: bit I2C_SendStr(uchar sla,uchar suba,ucahr *s,uchar no);
 116          功能:   从启动总线到发送地址、子地址、数据、结束总线的全过程。从器件
 117                  地址sla、子地址suba、发送内容是s、指向的内容发送no个字节。
 118                  如果返回1,表示操作成功,否则操作有误。
 119          ********************************************************************/
 120          bit I2C_SendStr(uchar sla,uchar suba,uchar *s,uchar no)
 121          {
 122   1              uchar i;
 123   1              
 124   1              
 125   1              I2C_GetBus();          /*启动总线*/
 126   1              
 127   1              I2C_Send(sla);         /*发送器件地址,若无应答则返回*/
 128   1              if(S1STA!=0X18)
 129   1              {
 130   2                      S1CON=0XD5;
 131   2                      return(0);
 132   2              }
 133   1              
 134   1              I2C_Send(suba);        /*发送器件子地址,若无应答则返回*/
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 6   

 135   1              if(S1STA!=0X28)
 136   1              {
 137   2                      S1CON=0XD5;
 138   2                      return(0);
 139   2              }
 140   1              
 141   1              for(i=0;i<no;i++)
 142   1              {
 143   2                      I2C_Send(*s);  /*发送数据,若无应答则返回*/
 144   2                      if(S1STA!=0X28)
 145   2                      {
 146   3                              S1CON=0XD5;
 147   3                              return(0);
 148   3                      }
 149   2                      s++;
 150   2              } 
 151   1              
 152   1              S1CON=0XD5; /*结束总线*/
 153   1              
 154   1              return(1);
 155   1      }
 156          
 157          
 158          /*******************************************************************
 159                                  向无子地址器件读字节数据函数
 160          函数原型: bit I2C_RcvByte(uchar sla,ucahr *c);
 161          功能:   从启动总线到发送地址,读数据,结束总线的全过程,从器件地
 162                  址sla、返回值在c。
 163                  如果返回1,表示操作成功,否则操作有误。
 164          ********************************************************************/
 165          bit I2C_RcvByte(uchar sla,uchar *c)
 166          {
 167   1              I2C_GetBus();           /*启动总线*/
 168   1      
 169   1              I2C_Send(sla+1);        /*发送器件地址,若无应答则返回*/
 170   1              if(S1STA!=0X40)
 171   1              {
 172   2                      S1CON=0XD5;
 173   2                      return(0);
 174   2              }
 175   1              
 176   1              S1CON=0XC1;             /*接收一字节数据即发送非应答位*/
 177   1              while(SI==0);           /*等待接收数据*/
 178   1              
 179   1              if(S1STA!=0X58)
 180   1              {
 181   2                      S1CON=0XD5;
 182   2                      return(0);
 183   2              }
 184   1              
 185   1              *c=S1DAT;               /*读取数据*/
 186   1              S1CON=0XD5;             /*结束总线*/
 187   1              
 188   1              return(1);
 189   1      }
 190          
 191          
 192          /*******************************************************************
 193                                  向有子地址器件读取多字节数据函数
 194          函数原型: bit I2C_SendStr(uchar sla,uchar suba,ucahr *s,uchar no);
 195          功能:   从启动总线到发送地址、子地址、读数据、结束总线的全过程,从器件
 196                  地址sla,子地址suba,读出的内容放入s指向的存储区读no个字节。
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 7   

 197                  如果返回1,表示操作成功,否则操作有误。
 198          ********************************************************************/
 199          bit I2C_RcvStr(uchar sla,uchar suba,uchar *s,uchar no)
 200          {
 201   1              uchar i;
 202   1              
 203   1              
 204   1              I2C_GetBus();           /*启动总线*/
 205   1      
 206   1              I2C_Send(sla);          /*发送器件地址,若无应答则返回*/
 207   1              if(S1STA!=0X18)
 208   1              {
 209   2                      S1CON=0XD5;
 210   2                      return(0);
 211   2              }
 212   1              
 213   1              I2C_Send(suba);         /*发送器件子地址,若无应答则返回*/
 214   1              if(S1STA!=0X28)
 215   1              {
 216   2                      S1CON=0XD5;
 217   2                      return(0);
 218   2              }
 219   1              
 220   1              S1CON=0XE5;             /*重新启动总线*/
 221   1              while(SI==0);
 222   1              
 223   1              I2C_Send(sla+1);       /*发送器件地址,若无应答则返回*/
 224   1              if(S1STA!=0X40)
 225   1              {
 226   2                      S1CON=0XD5;
 227   2                      return(0);
 228   2              }
 229   1              
 230   1              for(i=0;i<no-1;i++)
 231   1              {
 232   2                      S1CON=0XC5;     /*接收一字节数据并发送应答位*/
 233   2                      while(SI==0);   /*等待接收数据*/
 234   2                      if(S1STA!=0X50)
 235   2                      {
 236   3                              S1CON=0XD5;
 237   3                              return(0);
 238   3                      }
 239   2                      
 240   2                      *s=S1DAT;       /*读取数据*/
 241   2                      s++;
 242   2              }
 243   1              
 244   1              S1CON=0XC1;             /*接收最后一字节数据并发送非应答位*/
 245   1              while(SI==0);
 246   1              *s=S1DAT;
 247   1              
 248   1              S1CON=0XD5; /*结束总线*/
 249   1              
 250   1              return(1);
 251   1      }
 252          
 253          
 254          
 255          /*软件包大小  字节*/
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 8   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION I2C_CheckBus (BEGIN)
                                           ; SOURCE LINE # 32
                                           ; SOURCE LINE # 33
                                           ; SOURCE LINE # 34
0000 C296              CLR     SCL
                                           ; SOURCE LINE # 35
0002 D297              SETB    SDA
                                           ; SOURCE LINE # 36
0004 209702            JB      SDA,?C0001
                                           ; SOURCE LINE # 37
0007 C3                CLR     C
0008 22                RET     
0009         ?C0001:
                                           ; SOURCE LINE # 39
0009 D296              SETB    SCL
                                           ; SOURCE LINE # 40
000B 209602            JB      SCL,?C0003
                                           ; SOURCE LINE # 41
000E C3                CLR     C
000F 22                RET     
0010         ?C0003:
                                           ; SOURCE LINE # 43
0010 D3                SETB    C
                                           ; SOURCE LINE # 44
0011         ?C0002:
0011 22                RET     
             ; FUNCTION I2C_CheckBus (END)

             ; FUNCTION I2C_GetBus (BEGIN)
                                           ; SOURCE LINE # 52
                                           ; SOURCE LINE # 53
                                           ; SOURCE LINE # 54
0000 120000      R     LCALL   I2C_CheckBus
                                           ; SOURCE LINE # 55
0003 75D8C5            MOV     S1CON,#0C5H
                                           ; SOURCE LINE # 57
0006 D2DD              SETB    STA
0008         ?C0004:
                                           ; SOURCE LINE # 58
0008 30DBFD            JNB     SI,?C0004
                                           ; SOURCE LINE # 59
000B         ?C0006:
000B 22                RET     
             ; FUNCTION I2C_GetBus (END)

             ; FUNCTION I2C_Stop (BEGIN)
                                           ; SOURCE LINE # 65
                                           ; SOURCE LINE # 66
                                           ; SOURCE LINE # 67
0000 75D8D5            MOV     S1CON,#0D5H
                                           ; SOURCE LINE # 68
0003 22                RET     
             ; FUNCTION I2C_Stop (END)

             ; FUNCTION L?0047 (BEGIN)
0000 AE07              MOV     R6,AR7
0002 120000      R     LCALL   I2C_GetBus
             ; FUNCTION _I2C_Send (BEGIN)
                                           ; SOURCE LINE # 74
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 9   

;---- Variable 'c' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 75
                                           ; SOURCE LINE # 76
0005 8FDA              MOV     S1DAT,R7
                                           ; SOURCE LINE # 77
0007 75D8C5            MOV     S1CON,#0C5H
000A         ?C0008:
                                           ; SOURCE LINE # 78
000A 30DBFD            JNB     SI,?C0008
                                           ; SOURCE LINE # 79
000D         ?C0010:
000D 22                RET     
             ; FUNCTION _I2C_Send (END)

             ; FUNCTION _I2C_SendByte (BEGIN)
                                           ; SOURCE LINE # 89
;---- Variable 'c' assigned to Register 'R6' ----
0000 AE05              MOV     R6,AR5
;---- Variable 'sla' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 90
                                           ; SOURCE LINE # 91
0002 120000      R     LCALL   I2C_GetBus
                                           ; SOURCE LINE # 93
0005 120000      R     LCALL   _I2C_Send
                                           ; SOURCE LINE # 94
0008 E5D9              MOV     A,S1STA
000A 6418              XRL     A,#018H
000C 6002              JZ      ?C0011
                                           ; SOURCE LINE # 95
                                           ; SOURCE LINE # 96
                                           ; SOURCE LINE # 97
000E 800B              SJMP    ?C0040
                                           ; SOURCE LINE # 98
0010         ?C0011:
                                           ; SOURCE LINE # 100
0010 AF06              MOV     R7,AR6
0012 120000      R     LCALL   _I2C_Send
                                           ; SOURCE LINE # 101
0015 E5D9              MOV     A,S1STA
0017 6428              XRL     A,#028H
0019 6005              JZ      ?C0013
                                           ; SOURCE LINE # 102
                                           ; SOURCE LINE # 103
001B         ?C0040:
001B 75D8D5            MOV     S1CON,#0D5H
                                           ; SOURCE LINE # 104
001E C3                CLR     C
001F 22                RET     
                                           ; SOURCE LINE # 105
0020         ?C0013:
                                           ; SOURCE LINE # 107
0020 75D8D5            MOV     S1CON,#0D5H
                                           ; SOURCE LINE # 109
0023 D3                SETB    C
                                           ; SOURCE LINE # 110
0024         ?C0012:
0024 22                RET     
             ; FUNCTION _I2C_SendByte (END)

             ; FUNCTION _I2C_SendStr (BEGIN)
                                           ; SOURCE LINE # 120
;---- Variable 'sla' assigned to Register 'R6' ----
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 10  

;---- Variable 's' assigned to Register 'R1/R2/R3' ----
;---- Variable 'suba' assigned to Register 'R5' ----
                                           ; SOURCE LINE # 121
                                           ; SOURCE LINE # 125
                                           ; SOURCE LINE # 127
0000 120000      R     LCALL   L?0047
                                           ; SOURCE LINE # 128
0003 E5D9              MOV     A,S1STA
0005 6418              XRL     A,#018H
0007 6002              JZ      ?C0014
                                           ; SOURCE LINE # 129
                                           ; SOURCE LINE # 130
                                           ; SOURCE LINE # 131
0009 8022              SJMP    ?C0042
                                           ; SOURCE LINE # 132
000B         ?C0014:
                                           ; SOURCE LINE # 134
000B AF05              MOV     R7,AR5
000D 120000      R     LCALL   _I2C_Send
                                           ; SOURCE LINE # 135
0010 E5D9              MOV     A,S1STA

⌨️ 快捷键说明

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