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

📄 vi2c_c51.lst

📁 keil c open
💻 LST
📖 第 1 页 / 共 2 页
字号:
 177   2            }
 178   1        SCL=0;    
C51 COMPILER V7.06   VI2C_C51                                                              01/06/2005 14:37:28 PAGE 4   

 179   1        _Nop();
 180   1        _Nop();
 181   1      
 182   1        return(retc);
 183   1      }
 184          
 185          
 186          
 187          
 188          /********************************************************************
 189                               应答子函数
 190          原型:  void Ack_I2c(bit a);
 191           
 192          功能:主控器进行应答信号,(可以是应答或非应答信号)
 193          ********************************************************************/
 194          void Ack_I2c(bit a)
 195          {
 196   1        
 197   1        if(a==0)SDA=0;     /*在此发出应答或非应答信号 */
 198   1              else SDA=1;
 199   1        _Nop();
 200   1        _Nop();
 201   1        _Nop();      
 202   1        SCL=1;
 203   1          _Nop();
 204   1          _Nop();              /*时钟低电平周期大于4μs*/
 205   1          _Nop();
 206   1          _Nop();
 207   1         _Nop();
 208   1         _Nop();
 209   1              _Nop();
 210   1              _Nop(); _Nop();
 211   1         _Nop();
 212   1              _Nop();
 213   1              _Nop();
 214   1          _Nop();  
 215   1       SCL=0;                /*清时钟线,钳住I2C总线以便继续接收*/
 216   1          _Nop();
 217   1          _Nop();    
 218   1      }
 219          
 220          
 221          
 222          
 223          
 224          
 225          /*******************************************************************
 226                              向无子地址器件发送字节数据函数               
 227          函数原型: bit  ISendByte(uchar sla,ucahr c);  
 228          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 229                     如果返回1表示操作成功,否则操作有误。
 230          注意:    使用前必须已结束总线。
 231          ********************************************************************/
 232          bit ISendByte(uchar sla,uchar c)
 233          {
 234   1         Start_I2c();               /*启动总线*/
 235   1         SendByte(sla);            /*发送器件地址*/
 236   1           if(ack==0)return(0);
 237   1         SendByte(c);               /*发送数据*/
 238   1           if(ack==0)return(0);
 239   1        Stop_I2c();                 /*结束总线*/ 
 240   1        return(1);
C51 COMPILER V7.06   VI2C_C51                                                              01/06/2005 14:37:28 PAGE 5   

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

 303          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
 304          功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 305                    地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
 306                     如果返回1表示操作成功,否则操作有误。
 307          注意:    使用前必须已结束总线。
 308          ********************************************************************/
 309          bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
 310          {
 311   1         uchar i;
 312   1      
 313   1         Start_I2c();               /*启动总线*/
 314   1         SendByte(sla);            /*发送器件地址*/
 315   1           if(ack==0)return(0);
 316   1         SendByte(suba);            /*发送器件子地址*/
 317   1           if(ack==0)return(0);
 318   1      
 319   1         Start_I2c();
 320   1         SendByte(sla+1);
 321   1            if(ack==0)return(0);
 322   1      
 323   1         for(i=0;i<no-1;i++)
 324   1          {   
 325   2           *s=RcvByte();               /*发送数据*/
 326   2            Ack_I2c(0);                /*发送就答位*/  
 327   2           s++;
 328   2          } 
 329   1         *s=RcvByte();
 330   1          Ack_I2c(1);                 /*发送非应位*/
 331   1       Stop_I2c();                    /*结束总线*/ 
 332   1        return(1);
 333   1      }
 334          
 335          
 336          
 337          
 338          
 339          
 340                                  /*    完毕      */
 341          
 342          
 343          
 344          


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