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

📄 iic(ok).lst

📁 IIC 的驱动程序 很完整。通过KEIL C 编译在ROTUES 上用AT89C51仿真通过。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 197          /*******************************************************************
 198                           向无子地址器件发送字节数据函数               
 199          函数原型: bit  ISendByte(uchar sla,ucahr c);  
 200          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 201                    如果返回1表示操作成功,否则操作有误。
 202          注意:    使用前必须已结束总线。
 203          ********************************************************************/
 204          bit ISendByte(uchar sla,uchar c)
 205          {
 206   1         Start_I2c();               /*启动总线*/
 207   1         SendByte(sla);             /*发送器件地址*/
 208   1         if(ack==0)return(0);
 209   1         SendByte(c);               /*发送数据*/
 210   1         if(ack==0)return(0);
 211   1         Stop_I2c();                /*结束总线*/ 
 212   1         return(1);
 213   1      }
 214          
 215           
 216          
 217          
 218          /*******************************************************************
 219                              向有子地址器件发送多字节数据函数               
 220          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
 221          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 222                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 223                    如果返回1表示操作成功,否则操作有误。
 224          注意:    使用前必须已结束总线。
 225          ********************************************************************/
 226          bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
 227          {
 228   1         uchar i;
 229   1      
 230   1         Start_I2c();               /*启动总线*/
 231   1         SendByte(sla);             /*发送器件地址*/
 232   1         if(ack==0)return(0);
 233   1         SendByte(suba);            /*发送器件子地址*/
 234   1         if(ack==0)return(0);
 235   1      
 236   1         for(i=0;i<no;i++)
 237   1         {   
 238   2           SendByte(*s);            /*发送数据*/
 239   2           if(ack==0)return(0);
 240   2           s++;
C51 COMPILER V7.20   IIC_OK_                                                               06/07/2006 17:13:03 PAGE 5   

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

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

 365   1              display();}
 366          void display()
 367          {
 368   1              uchar i,j=0x20;
 369   1              for(;i<6;i++){
 370   2              P0=tab[R[i]];
 371   2              P2=j;
 372   2              j>>=1;
 373   2              delay(5);
 374   2              }       
 375   1              i=0;
 376   1              delay(5);
 377   1      }
 378          void delay(uchar x)
 379          {
 380   1              uchar i,j;
 381   1              for(j=0;j<x;j++)
 382   1              for(i=0;i<120;i++)
 383   1              {;}
 384   1      }
 385          
 386          


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


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

⌨️ 快捷键说明

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