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

📄 vi2c_c51.lst

📁 IIC 的驱动程序 很完整。通过KEIL C 编译在ROTUES 上用AT89C51仿真通过。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 187   1        _Nop();                    /*时钟低电平周期大于4μs*/
 188   1        _Nop();
 189   1        _Nop();
 190   1        _Nop();  
 191   1        SCL=0;                     /*清时钟线,钳住I2C总线以便继续接收*/
 192   1        _Nop();
 193   1        _Nop();    
 194   1      }
 195          
 196           
 197          
 198          /*******************************************************************
 199                           用户接口函数                                   
 200          *******************************************************************/
 201          
 202          
 203          /*******************************************************************
 204                           向无子地址器件发送字节数据函数               
 205          函数原型: bit  ISendByte(uchar sla,ucahr c);  
 206          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 207                    如果返回1表示操作成功,否则操作有误。
 208          注意:    使用前必须已结束总线。
 209          ********************************************************************/
 210          bit ISendByte(uchar sla,uchar c)
 211          {
 212   1         Start_I2c();               /*启动总线*/
 213   1         SendByte(sla);             /*发送器件地址*/
 214   1         if(ack==0)return(0);
 215   1         SendByte(c);               /*发送数据*/
 216   1         if(ack==0)return(0);
 217   1         Stop_I2c();                /*结束总线*/ 
 218   1         return(1);
 219   1      }
 220          
 221           
 222          
 223          
 224          /*******************************************************************
 225                              向有子地址器件发送多字节数据函数               
 226          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
 227          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 228                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 229                    如果返回1表示操作成功,否则操作有误。
 230          注意:    使用前必须已结束总线。
 231          ********************************************************************/
 232          bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
 233          {
 234   1         uchar i;
 235   1      
 236   1         Start_I2c();               /*启动总线*/
 237   1         SendByte(sla);             /*发送器件地址*/
 238   1         if(ack==0)return(0);
 239   1         SendByte(suba);            /*发送器件子地址*/
 240   1         if(ack==0)return(0);
C51 COMPILER V7.20   VI2C_C51                                                              05/30/2006 19:25:31 PAGE 5   

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

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

 365           
 366          


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


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

⌨️ 快捷键说明

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