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

📄 iic.lst

📁 mcp3221 ad转换。通过iic串口读取ad转换数值
💻 LST
📖 第 1 页 / 共 2 页
字号:
 164   1              SCL=0;    
 165   1              _Nop();
 166   1              _Nop();
 167   1              
 168   1              return (retc);
 169   1      }
 170          
 171          
 172          
 173          
 174          /********************************************************************
 175                               应答子函数
 176          函数原型:  void ack_i2c(bit a);
 177          功能:      主控器进行应答信号,(可以是应答或非应答信号)
 178          
 179          ********************************************************************/
C51 COMPILER V8.02   IIC                                                                   03/30/2009 08:19:12 PAGE 4   

 180          void ack_i2c(bit a)
 181          {
 182   1        
 183   1              if(a==0)        SDA=0;          /*在此发出应答或非应答信号 */
 184   1          else                SDA=1;
 185   1              _Nop();
 186   1              _Nop();
 187   1              _Nop(); 
 188   1           
 189   1              SCL=1;
 190   1          _Nop();
 191   1              _Nop();
 192   1              _Nop();
 193   1          _Nop();                     /*时钟低电平周期大于4μs*/
 194   1       
 195   1              SCL=0;                  /*清时钟线,钳住I2C总线以便继续接收*/
 196   1          _Nop();
 197   1              _Nop();
 198   1         
 199   1      }
 200          
 201          
 202          
 203          
 204          
 205          
 206          /*******************************************************************
 207                              向无子地址器件发送字节数据函数               
 208          函数原型: bit send_data(uchar sla,uchar c);  
 209          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 210                    如果返回1表示操作成功,否则操作有误。
 211          注意:    使用前必须已结束总线。
 212          ********************************************************************/
 213          bit send_data(uchar sla,uchar c)
 214          {
 215   1              start_i2c();                    /*启动总线*/
 216   1              send_byte(sla);                 /*发送器件地址*/
 217   1          if(ack==0)  
 218   1              return(0);
 219   1              send_byte(c);               /*发送数据*/
 220   1          if(ack==0)  
 221   1              return(0);
 222   1              stop_i2c();                 /*结束总线*/ 
 223   1              return(1);
 224   1      }
 225          
 226          
 227          
 228          
 229          /*******************************************************************
 230                              向有子地址器件发送多字节数据函数               
 231          函数原型: bit send_string(uchar sla,uchar suba,uchar *s,uchar num);  
 232          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 233                    地址sla,子地址suba,发送内容是s指向的内容,发送num个字节。
 234                     如果返回1表示操作成功,否则操作有误。
 235          注意:    使用前必须已结束总线。
 236          ********************************************************************/
 237          bit send_string(uchar sla,uchar suba,uchar *s,uchar num)
 238          {
 239   1              uchar i;
 240   1              start_i2c();                    /*启动总线*/
 241   1              send_byte(sla);                 /*发送器件地址*/
C51 COMPILER V8.02   IIC                                                                   03/30/2009 08:19:12 PAGE 5   

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

 304   1              //send_byte(sla+1);
 305   1          //if(ack==0)        
 306   1              //return(0);
 307   1              for(i=0;i<num-1;i++)
 308   1          {   
 309   2              *s=receive_byte();      /*发送数据*/
 310   2              ack_i2c(0);             /*发送就答位*/  
 311   2              s++;
 312   2          } 
 313   1              *s=receive_byte();
 314   1              ack_i2c(1);                 /*发送非应位*/
 315   1              stop_i2c();                     /*结束总线*/ 
 316   1              return(1);
 317   1      }


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


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

⌨️ 快捷键说明

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