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

📄 viic.lst

📁 ds1307 driver by c clock chip
💻 LST
📖 第 1 页 / 共 2 页
字号:
 162   1      }
 163          
 164          
 165          
 166          
 167          /********************************************************************
 168                               应答子函数
 169          原型:  void I2c_Ack(bit a);
 170           
 171          功能:主控器进行应答信号,(可以是应答或非应答信号)
 172          ********************************************************************/
 173          void I2c_Ack(bit a)
 174          {
 175   1        
 176   1              if(a==0)SDA=0;          //在此发出应答或非应答信号 
 177   1              else SDA=1;
 178   1        
 179   1              SomeNopForIic();      
C51 COMPILER V7.04   VIIC                                                                  03/04/2006 08:52:55 PAGE 4   

 180   1              SCL=0;
 181   1        
 182   1          SomeNopForIic();    //时钟低电平周期大于4μs    
 183   1              SCL=1;              //清时钟线,钳住I2C总线以便继续接收
 184   1          SomeNopForIic();
 185   1          if(SDA==1)SDA=1;
 186   1              SomeNopForIic();      
 187   1              SCL=0;
 188   1              SomeNopForIic();      
 189   1              SDA=1;
 190   1              SomeNopForIic();      
 191   1              
 192   1      
 193   1      }
 194          
 195          
 196          /*******************************************************************
 197                              向无子地址器件发送字节数据函数               
 198          函数原型: bit  ISendByte(uchar sla,ucahr c);  
 199          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 200                     如果返回1表示操作成功,否则操作有误。
 201          注意:    使用前必须已结束总线。
 202          ********************************************************************/
 203          /*
 204          bit ISendByte(uchar sla,uchar c)
 205          {
 206                  I2c_Start();                            //启动总线
 207                  I2c_SendByte(sla);              //发送器件地址
 208               if(b_AckForIIC==0)return(0);
 209                  I2c_SendByte(c);                //发送数据
 210               if(b_AckForIIC==0)return(0);
 211                  I2c_Stop();                     //结束总线 
 212                  return(1);
 213          }
 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         I2c_Start();                         //启动总线
 231   1         I2c_SendByte(sla);                   //发送器件地址
 232   1      
 233   1              if(b_AckForIIC==0)return(0);
 234   1         I2c_SendByte(suba);                  //发送器件子地址
 235   1          if(b_AckForIIC==0)return(0);
 236   1      
 237   1         for(i=0;i<no;i++)
 238   1         {   
 239   2           I2c_SendByte(*s);              //发送数据
 240   2           if(b_AckForIIC==0)return(0);
 241   2           s++;
C51 COMPILER V7.04   VIIC                                                                  03/04/2006 08:52:55 PAGE 5   

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

 304   1         
 305   1         *s=I2c_RcvByte();
 306   1         I2c_Ack(1);                          //发送非应位
 307   1              
 308   1         I2c_Stop();                          //结束总线 
 309   1         return(1);
 310   1      }
 311          
 312          
 313          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    351    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   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 + -