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

📄 viic_c51.lst

📁 用电键控制步进电机朝各个方向做曲线
💻 LST
📖 第 1 页 / 共 2 页
字号:
 173          
 174          
 175          
 176          
 177          /********************************************************************
 178                               应答子函数
 179          原型:  void Ack_I2c(bit a);
C51 COMPILER V7.06   VIIC_C51                                                              09/01/2006 15:13:00 PAGE 4   

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

 242   1         Start_I2c();               //启动总线 
 243   1         SendByte(sla);            //发送器件地址 
 244   1           if(ack==0)return(0);
 245   1         SendByte(suba);            //发送器件子地址 
 246   1           if(ack==0)return(0);
 247   1      
 248   1         for(i=0;i<no;i++)
 249   1          {   
 250   2           SendByte(*s);               //发送数据 
 251   2             if(ack==0)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          /*
 272          bit IRcvByte(uchar sla,uchar *c)
 273          {
 274             Start_I2c();                //启动总线 
 275             SendByte(sla+1);           //发送器件地址 
 276               if(ack==0)return(0);
 277             *c=RcvByte();               //读取数据 
 278               Ack_I2c(1);               //发送非就答位 
 279            Stop_I2c();                  //结束总线  
 280            return(1);
 281          }
 282          //*/
 283          
 284          
 285          
 286          /*******************************************************************
 287                              向有子地址器件读取多字节数据函数               
 288          函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
 289          功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 290                    地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
 291                     如果返回1表示操作成功,否则操作有误。
 292          注意:    使用前必须已结束总线。
 293          ********************************************************************/
 294          bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
 295          {
 296   1         uchar i;
 297   1      
 298   1         Start_I2c();               /*启动总线*/
 299   1         SendByte(sla);            /*发送器件地址*/
 300   1           if(ack==0)return(0);
 301   1         SendByte(suba);            /*发送器件子地址*/
 302   1           if(ack==0)return(0);
 303   1      
C51 COMPILER V7.06   VIIC_C51                                                              09/01/2006 15:13:00 PAGE 6   

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    310    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      12
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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