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

📄 i2c.lst

📁 基于i2c总线控制的24c32C程序读写
💻 LST
📖 第 1 页 / 共 2 页
字号:
 159              SDA=0;
 160            else SDA=1;
 161              _Nop();
 162              _Nop();
 163              _Nop();
 164              _Nop();
 165                 SCL=1;
 166              _Nop();
 167              _Nop();
 168              _Nop();
 169              _Nop();
 170              _Nop();
 171              _Nop();
 172                 SCL=0; // 清除时钟线,以便继续接收
 173              _Nop();
 174              _Nop();
 175              _Nop();
 176              _Nop();
 177           }
C51 COMPILER V8.02   I2C                                                                   04/18/2008 11:57:43 PAGE 4   

 178          
 179           /**********************************************************************************
 180           向无子地址器件发送字节数据函数
 181           函数原形:
 182           bit  sendbytedata(BYTE slave,BYTE data);
 183           功能:
 184           从启动总线到发送地址、数据,结束总线的过程
 185           参数:
 186           Slave:从器件地址
 187           Data:要发送的数据
 188           返回值: 
 189           如果返回1,表示操作成功;否则操作有误
 190           注意:使用前必须已结束总线
 191           **********************************************************************************/
 192           bit  sendbytedate(BYTE slave,BYTE Data)
 193           {
 194             start_I2C();                          //启动总线
 195             sendbyte(slave);                      //发送器件地址
 196             if(ack==0)
 197             return(0);
 198             sendbyte(Data);                       //发送数据
 199             if(ack==0)
 200             return(0);
 201             stop_I2C();                           //结束总线
 202             return(1);
 203           }
 204          /**********************************************************************************
 205           向有子地址器件发送多字节数据函数
 206           函数原形:
 207           bit  sendstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num);
 208           功能:
 209           从启动总线到发送地址,子地址,结束总线的过程
 210           参数:
 211           Slave:从器件地址
 212           subaddress:子地址
 213           source:发送内容的指针
 214           num:发送字节个数
 215           返回值: 
 216           如果返回1,表示操作成功;否则操作有误
 217           注意:使用前必须已结束总线
 218           **********************************************************************************/
 219          /* bit  sendstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num)
 220           { 
 221             BYTE i;
 222             start_I2C();                              //启动总线
 223             sendbyte(slave);                          //发送器件地址
 224             if(ack==0)
 225             return(0);
 226             sendbyte(subaddress);                     //发送器件子地址    
 227             if(ack==0)
 228             return(0);
 229             for(i=0;i<num;i++)
 230             {
 231               sendbyte(*source);                       //发送数据
 232               if(ack==0)
 233               return(0);
 234               source++;
 235                   }
 236             stop_I2C();                                //结束总线
 237             return(1);                         
 238           }
 239           */
C51 COMPILER V8.02   I2C                                                                   04/18/2008 11:57:43 PAGE 5   

 240          /**********************************************************************************
 241           向有子地址器件发送多字节数据函数
 242           函数原形:
 243           bit  sendstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num);
 244           功能:
 245           从启动总线到发送地址,子地址,结束总线的过程
 246           参数:
 247           Slave:从器件地址
 248           subaddress:子地址
 249           source:发送内容的指针
 250           num:发送字节个数
 251           返回值: 
 252           如果返回1,表示操作成功;否则操作有误
 253           注意:使用前必须已结束总线
 254           **********************************************************************************/
 255           bit  sendstr(BYTE slave,BYTE subaddress,BYTE zuzhi)
 256           { 
 257             BYTE i;
 258             start_I2C();                              //启动总线
 259             sendbyte(slave);                          //发送器件地址
 260             if(ack==0)
 261             return(0);
 262             sendbyte(subaddress);                     //发送器件子地址    
 263             if(ack==0)
 264             return(0);
 265             sendbyte(zuzhi);                       //发送数据
 266             stop_I2C();                                //结束总线
 267             return(1);                         
 268           }
 269            /**********************************************************************************
 270           向无子地址器件读字节数据函数
 271           函数原形:
 272           bit  recbytedata(BYTE slave,BYTE *Data);
 273           功能:
 274           从启动总线到发送地址,读数据,结束总线的过程
 275           参数:
 276           Slave:从器件地址,返回值在Data
 277           返回值: 
 278           如果返回1,表示操作成功;否则操作有误
 279           注意:使用前必须已结束总线
 280           **********************************************************************************/
 281          
 282            bit recbytedata(BYTE slave,BYTE *Data)
 283            { start_I2C();                                 // 启动总线
 284              sendbyte(slave);             //发送器件地址
 285                  if(ack==0)return(0);
 286                   *Data=recbyte();            //读取数据
 287                   ack_i2c(1)      ;               //发非应答位
 288                   stop_I2C();                 //结束总线
 289               return(1);
 290            }
 291           /**********************************************************************************
 292           向有子地址器件读多字节数据函数
 293           函数原形:
 294           bit  recstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num);
 295           功能:
 296           从启动总线到发送地址,子地址,读数据,结束总线的过程
 297           参数:
 298           Slave:从器件地址,subaddress:子地址,source:指向读出的内容放入的存储区的指针,num:读字节个数
 299           返回值: 
 300           如果返回1,表示操作成功;否则操作有误
 301           注意:使用前必须已结束总线
C51 COMPILER V8.02   I2C                                                                   04/18/2008 11:57:43 PAGE 6   

 302           **********************************************************************************/
 303          bit  recstr(BYTE slave,BYTE subaddress,BYTE *source,BYTE num)
 304          』{BYTE i;
 305                  start_I2C();                // 启动总线
 306                  sendbyte(slave);             //发送器件地址
 307                  if(ack==0)return(0);
 308                    sendbyte(subaddress);             //发送器件子地址
 309                  if(ack==0)return(0); 
 310                  for(i=0;i<num-1;num++)  
 311                    {  source=recbyte();               //发送数据
 312                     ack_i2c(0);               //发应答位
 313                     source++;
 314                     stop_I2C();                 //结束总线
 315                 return(1);
 316                }
 317            }
 318          void main()
 319          {start_I2C();
 320           sendstr(50H,90H,BYTE *source,BYTE num);
 321          }
 322             

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

⌨️ 快捷键说明

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