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

📄 i2c.lst

📁 51实例大全
💻 LST
📖 第 1 页 / 共 2 页
字号:
 169   1        SCL=0;    
 170   1        _Nop();
 171   1        _Nop();
 172   1        return(retc);
 173   1      }
 174          
 175          
 176          
 177          /*----------------------------------------------------------------
 178                               应答子函数
 179          原型:  void Ack_I2c(void);
C51 COMPILER V7.06   I2C                                                                   06/02/2010 10:03:45 PAGE 4   

 180           
 181          ----------------------------------------------------------------*/
 182          void Ack_I2c(void)
 183          {
 184   1        
 185   1        SDA=0;     
 186   1        _Nop();
 187   1        _Nop();
 188   1        _Nop();      
 189   1        SCL=1;
 190   1        _Nop();
 191   1        _Nop();              //时钟低电平周期大于4μ
 192   1        _Nop();
 193   1        _Nop();
 194   1        _Nop();  
 195   1        SCL=0;               //清时钟线,钳住I2C总线以便继续接收
 196   1        _Nop();
 197   1        _Nop();    
 198   1      }
 199          /*----------------------------------------------------------------
 200                               非应答子函数
 201          原型:  void NoAck_I2c(void);
 202           
 203          ----------------------------------------------------------------*/
 204          void NoAck_I2c(void)
 205          {
 206   1        
 207   1        SDA=1;
 208   1        _Nop();
 209   1        _Nop();
 210   1        _Nop();      
 211   1        SCL=1;
 212   1        _Nop();
 213   1        _Nop();              //时钟低电平周期大于4μ
 214   1        _Nop();
 215   1        _Nop();
 216   1        _Nop();  
 217   1        SCL=0;                //清时钟线,钳住I2C总线以便继续接收
 218   1        _Nop();
 219   1        _Nop();    
 220   1      }
 221          
 222          
 223          
 224          
 225          
 226          
 227          /*----------------------------------------------------------------
 228                              向无子地址器件发送字节数据函数               
 229          函数原型: bit  ISendByte(unsigned char sla,ucahr c);  
 230          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 231                     如果返回1表示操作成功,否则操作有误。
 232          注意:    使用前必须已结束总线。
 233          ----------------------------------------------------------------*/
 234          /*bit ISendByte(unsigned char sla,unsigned char c)
 235          {
 236             Start_I2c();               //启动总线
 237             SendByte(sla);             //发送器件地址
 238               if(ack==0)return(0);
 239             SendByte(c);               //发送数据
 240               if(ack==0)return(0);
 241            Stop_I2c();                 //结束总线
C51 COMPILER V7.06   I2C                                                                   06/02/2010 10:03:45 PAGE 5   

 242            return(1);
 243          }
 244          */
 245          
 246          /*----------------------------------------------------------------
 247                              向有子地址器件发送多字节数据函数               
 248          函数原型: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  
 249          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 250                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 251                     如果返回1表示操作成功,否则操作有误。
 252          注意:    使用前必须已结束总线。
 253          ----------------------------------------------------------------*/
 254          bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
 255          {
 256   1         unsigned char i;
 257   1       for(i=0;i<no;i++)
 258   1          { 
 259   2         Start_I2c();               //启动总线
 260   2         SendByte(sla);             //发送器件地址
 261   2           if(ack==0)return(0);
 262   2         SendByte(suba);            //发送器件子地址
 263   2           if(ack==0)return(0); 
 264   2       
 265   2           SendByte(*s);            //发送数据
 266   2             if(ack==0)return(0);
 267   2           Stop_I2c();                  //结束总线
 268   2           DelayMs(1);
 269   2               s++;
 270   2               suba++;
 271   2          } 
 272   1        return(1);
 273   1      }
 274          
 275          /*----------------------------------------------------------------
 276                              向无子地址器件读字节数据函数               
 277          函数原型: bit  IRcvByte(unsigned char sla,ucahr *c);  
 278          功能:     从启动总线到发送地址,读数据,结束总线的全过程,从器件地
 279                    址sla,返回值在c.
 280                     如果返回1表示操作成功,否则操作有误。
 281          注意:    使用前必须已结束总线。
 282          ----------------------------------------------------------------*/
 283          /*bit IRcvByte(unsigned char sla,unsigned char *c)
 284          {
 285             Start_I2c();                //启动总线
 286             SendByte(sla+1);            //发送器件地址
 287               if(ack==0)return(0);
 288             *c=RcvByte();               //读取数据
 289               NoAck_I2c();              //发送非就答位
 290               Stop_I2c();               //结束总线
 291            return(1);
 292          }
 293          
 294          */
 295          /*----------------------------------------------------------------
 296                              向有子地址器件读取多字节数据函数               
 297          函数原型: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  
 298          功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 299                    地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
 300                     如果返回1表示操作成功,否则操作有误。
 301          注意:    使用前必须已结束总线。
 302          ----------------------------------------------------------------*/
 303          bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
C51 COMPILER V7.06   I2C                                                                   06/02/2010 10:03:45 PAGE 6   

 304          {
 305   1         unsigned char i;
 306   1      
 307   1         Start_I2c();               //启动总线
 308   1         SendByte(sla);             //发送器件地址
 309   1           if(ack==0)return(0);
 310   1         SendByte(suba);            //发送器件子地址
 311   1           if(ack==0)return(0);
 312   1      
 313   1         Start_I2c();
 314   1         SendByte(sla+1);
 315   1            if(ack==0)return(0);
 316   1      
 317   1        for(i=0;i<no-1;i++)
 318   1          { 
 319   2           *s=RcvByte();              //发送数据
 320   2            Ack_I2c();                //发送就答位 
 321   2           s++;
 322   2          } 
 323   1         *s=RcvByte();
 324   1          NoAck_I2c();                 //发送非应位
 325   1          Stop_I2c();                    //结束总线
 326   1        return(1);
 327   1      }
 328          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    342    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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