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

📄 viic_c51.lst

📁 基于KEIL51的一款高性能的数字功放的完整代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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          bit ISendByte(uchar sla,uchar c)
 215          {
 216   1         Start_I2c();               /*启动总线*/
 217   1         SendByte(sla);            /*发送器件地址*/
 218   1         if(ack==0)  {Stop_I2c();return(0);}
 219   1         SendByte(c);               /*发送数据*/
 220   1         if(ack==0)  {Stop_I2c();return(0);}
 221   1         Stop_I2c();                 /*结束总线*/ 
 222   1         return(1);
 223   1      }
 224          
 225          /*******************************************************************
 226                              向无子地址器件发送多字节数据函数               
 227          函数原型: bit  PSendStr(uchar sla,ucahr *s,uchar no);  
 228          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件
 229                    地址sla,发送内容是s指向的内容,发送no个字节。
 230                     如果返回1表示操作成功,否则操作有误。
 231          注意:    使用前必须已结束总线。
 232          ********************************************************************/
 233          bit PSendStr(uchar sla,uchar *s,uchar no)
 234          {
 235   1         uchar i;
 236   1      
 237   1         Start_I2c();               /*启动总线*/
 238   1         SendByte(sla);            /*发送器件地址*/
 239   1         if(ack==0)       {Stop_I2c();return(0);}
 240   1         for(i=0;i<no;i++)
 241   1          {   
C51 COMPILER V8.05a   VIIC_C51                                                             10/25/2006 17:36:33 PAGE 5   

 242   2           SendByte(*s);               /*发送数据*/
 243   2           if(ack==0)     {Stop_I2c();return(0);}
 244   2           s++;
 245   2          } 
 246   1        Stop_I2c();                 /*结束总线*/ 
 247   1        return(1);
 248   1      }
 249          
 250          
 251          
 252          #if 0
              /*******************************************************************
                                  向有子地址器件发送多字节数据函数               
              函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
              功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
                        地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
                         如果返回1表示操作成功,否则操作有误。
              注意:    使用前必须已结束总线。
              ********************************************************************/
              bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
              {
                 uchar i;
              
                 Start_I2c();               /*启动总线*/
                 SendByte(sla);            /*发送器件地址*/
                   if(ack==0)    {Stop_I2c();return(0);}
                 SendByte(suba);            /*发送器件子地址*/
                   if(ack==0)    {Stop_I2c();return(0);}
              
                 for(i=0;i<no;i++)
                  {   
                   SendByte(*s);               /*发送数据*/
                     if(ack==0)  {Stop_I2c();return(0);}
                   s++;
                  } 
               Stop_I2c();                 /*结束总线*/ 
                return(1);
              }
              
              
              #endif
 283          
 284          
 285          #if 0
              /*******************************************************************
                                  向无子地址器件读字节数据函数               
              函数原型: bit  IRcvByte(uchar sla,ucahr *c);  
              功能:     从启动总线到发送地址,读数据,结束总线的全过程,从器件地
                        址sla,返回值在c.
                         如果返回1表示操作成功,否则操作有误。
              注意:    使用前必须已结束总线。
              ********************************************************************/
              bit IRcvByte(uchar sla,uchar *c)
              {
                 Start_I2c();                /*启动总线*/
                 SendByte(sla+1);           /*发送器件地址*/
                   if(ack==0)     {Stop_I2c();return(0);}
                 *c=RcvByte();               /*读取数据*/
                   Ack_I2c(1);               /*发送非就答位*/
                Stop_I2c();                  /*结束总线*/ 
                return(1);
              }
C51 COMPILER V8.05a   VIIC_C51                                                             10/25/2006 17:36:33 PAGE 6   

              
              
              
              /*******************************************************************
                                  向有子地址器件读取多字节数据函数               
              函数原型: bit  ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);  
              功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
                        地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
                         如果返回1表示操作成功,否则操作有误。
              注意:    使用前必须已结束总线。
              ********************************************************************/
              bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
              {
                 uchar i;
              
                 Start_I2c();               /*启动总线*/
                 SendByte(sla);            /*发送器件地址*/
                   if(ack==0)   {Stop_I2c();return(0);}
                 SendByte(suba);            /*发送器件子地址*/
                   if(ack==0)   {Stop_I2c();return(0);}
              
                 Start_I2c();
                 SendByte(sla+1);
                    if(ack==0)  {Stop_I2c();return(0);}
              
                 for(i=0;i<no-1;i++)
                  {   
                   *s=RcvByte();               /*发送数据*/
                    Ack_I2c(0);                /*发送就答位*/  
                   s++;
                  } 
                 *s=RcvByte();
                  Ack_I2c(1);                 /*发送非应位*/
               Stop_I2c();                    /*结束总线*/ 
                return(1);
              }
              
              
              #endif
 343          
 344          
 345          
 346                                  /*    完毕      */
 347          
 348          
 349          
 350          


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

C51 COMPILER V8.05a   VIIC_C51                                                             10/25/2006 17:36:33 PAGE 7   


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

⌨️ 快捷键说明

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