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

📄 i2c_c51.lst

📁 点焊机控制器C51源码+SCH & DDB
💻 LST
📖 第 1 页 / 共 2 页
字号:
 172   2            }
 173   1        I2C_SCL=0;    
 174   1        _Nop();
 175   1        _Nop();
 176   1        return(retc);
 177   1      }
 178          
 179          
C51 COMPILER V7.50   I2C_C51                                                               11/07/2005 02:10:45 PAGE 4   

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

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

 304   1           if(ack==0)return(0);
 305   1         SendByte(suba);            /*发送器件子地址*/
 306   1           if(ack==0)return(0);
 307   1      
 308   1         Start_I2c();
 309   1         SendByte(sla+1);
 310   1            if(ack==0)return(0);
 311   1      
 312   1         for(i=0;i<no-1;i++)
 313   1          {   
 314   2           *s=RcvByte();               /*发送数据*/
 315   2            Ack_I2c(0);                /*发送就答位*/  
 316   2           s++;
 317   2          } 
 318   1         *s=RcvByte();
 319   1          Ack_I2c(1);                 /*发送非应位*/
 320   1       Stop_I2c();                    /*结束总线*/ 
 321   1        return(1);
 322   1      }
 323          
 324          
 325          
 326          
 327          
 328          
 329                                  /*    完毕      */
 330          
 331          
 332          
 333          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    310    ----
   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 + -