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

📄 vi2c_c51.lst

📁 USB code using I2C bus to communicate with other node
💻 LST
📖 第 1 页 / 共 2 页
字号:
 211          函数原型: bit  ISendByte(uchar sla,ucahr c);  
 212          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 213                     如果返回1表示操作成功,否则操作有误。
 214          注意:    使用前必须已结束总线。
 215          ********************************************************************/
 216          bit ISendByte(uchar sla,uchar c)
 217          {
 218   1         Start_I2c();               /*启动总线*/
 219   1         SendByte(sla);            /*发送器件地址*/
 220   1           if(ack==0)return(0);
 221   1         SendByte(c);               /*发送数据*/
 222   1           if(ack==0)return(0);
 223   1        Stop_I2c();                 /*结束总线*/ 
 224   1        return(1);
 225   1      }
 226          
 227          
 228          
 229          
 230          /*******************************************************************
 231                              向有子地址器件发送多字节数据函数               
 232          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
 233          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 234                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 235                     如果返回1表示操作成功,否则操作有误。
 236          注意:    使用前必须已结束总线。
 237          ********************************************************************/
 238          bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
 239          {
 240   1         uchar i;
 241   1      
C51 COMPILER V7.06   VI2C_C51                                                              09/06/2003 16:55:52 PAGE 5   

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

 304   1            if(ack==0)return(0);
 305   1      
 306   1         for(i=0;i<no-1;i++)
 307   1          {   
 308   2           *s=RcvByte();               /*发送数据*/
 309   2            Ack_I2c(0);                /*发送就答位*/  
 310   2           s++;
 311   2          } 
 312   1         *s=RcvByte();
 313   1          Ack_I2c(1);                 /*发送非应位*/
 314   1       Stop_I2c();                    /*结束总线*/ 
 315   1        return(1);
 316   1      }
 317          
 318          
 319          
 320          
 321          /*******************************************************************
 322          ********************************************************************
 323          ********************************************************************
 324          *******************************************************************/
 325          
 326          
 327          
 328          /*******************************************************************
 329                           向有子地址器件发送多字节数据函数(2)
 330          函数原型: bit  ISendStr2(uchar sla,uchar *suba,ucahr *s,uchar no);  
 331          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 332                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 333                     如果返回1表示操作成功,否则操作有误。
 334          注意:    16位子地址
 335          ********************************************************************/
 336          bit ISendStr2(uchar sla,uchar *suba,uchar *s,uchar no)
 337          {
 338   1         uchar i;
 339   1         Start_I2c();               //启动总线
 340   1         SendByte(sla);             //发送器件地址
 341   1           if(ack==0)return(0);
 342   1         SendByte(*suba);            //发送器件子地址
 343   1           if(ack==0)return(0);
 344   1         SendByte(*(suba+1));        //发送器件子地址
 345   1           if(ack==0)return(0);
 346   1      
 347   1         for(i=0;i<no;i++)
 348   1          {   
 349   2           SendByte(*s);             //发送数据
 350   2             if(ack==0)return(0);
 351   2           s++;
 352   2          } 
 353   1         Stop_I2c();                 //结束总线
 354   1         return(1);
 355   1      }
 356          
 357          
 358          
 359          
 360          /*******************************************************************
 361                              向有子地址器件读取多字节数据函数(2)            
 362          函数原型: bit  ISendStr2(uchar sla,uchar suba,ucahr *s,uchar no);  
 363          功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 364                    地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
 365                     如果返回1表示操作成功,否则操作有误。
C51 COMPILER V7.06   VI2C_C51                                                              09/06/2003 16:55:52 PAGE 7   

 366          注意:    16位子地址
 367          ********************************************************************/
 368          bit IRcvStr2(uchar sla,uchar *suba,uchar *s,uchar no)
 369          {
 370   1         uchar i;
 371   1      
 372   1         Start_I2c();               //启动总线
 373   1         SendByte(sla);             //发送器件地址
 374   1           if(ack==0)return(0);
 375   1         SendByte(*suba);            //发送器件子地址
 376   1           if(ack==0)return(0);
 377   1         SendByte(*(suba+1));        //发送器件子地址
 378   1           if(ack==0)return(0);
 379   1      
 380   1         Start_I2c();
 381   1         SendByte(sla+1);
 382   1            if(ack==0)return(0);
 383   1      
 384   1         for(i=0;i<no-1;i++)
 385   1          {   
 386   2           *s=RcvByte();               //发送数据
 387   2            Ack_I2c(0);                //发送就答位 
 388   2           s++;
 389   2          } 
 390   1         *s=RcvByte();
 391   1         Ack_I2c(1);                   //发送非应位
 392   1         Stop_I2c();                   //结束总线 
 393   1         return(1);
 394   1      }
 395          
 396          
 397          
 398          /*******************************************************************
 399                              向有子地址器件读取多字节数据函数(2)            
 400          函数原型: bit IwCheck(uchar sla) 
 401          功能:     检查是否有从机应答,用于检查从机写周期是否已经结束或检查从
 402                    机是否存在。
 403          ********************************************************************/
 404          bit IwCheck(uchar sla)
 405          {
 406   1        Start_I2c();              /*启动总线*/
 407   1        SendByte(sla);            /*发送器件地址*/
 408   1          if(ack==0)return(0);
 409   1        Stop_I2c();               /*结束总线*/ 
 410   1        return(1);
 411   1      }
 412          
 413          
 414          


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


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

⌨️ 快捷键说明

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