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

📄 i2c_control.lst

📁 一个LCD TV的源程序, 用的是realtek的IC
💻 LST
📖 第 1 页 / 共 2 页
字号:
 198   3             }
 199   2                 if(iAck)
 200   2             {
 201   3               iAck = Write(c2);
 202   3             }
 203   2          }
 204   1          Stop();
 205   1          return iAck;
 206   1      }
 207          
 208          /* ================================================================
 209              Name    : I2CReadByte
 210              Purpose : Read i2c device one byte
 211              Passed  : Pass Device Addr, subaddress, then read one byte
 212              Notes   :
 213             ================================================================ */
 214          
 215          Byte I2CReadByte(Byte device, Byte subaddress)
 216          {
 217   1          Bool iAck;
 218   1          Byte c;
 219   1          Start();
 220   1          iAck = Write(device | I2C_W);
 221   1          if(iAck)
 222   1          {
 223   2                              iAck = Write(subaddress);
 224   2                              if(iAck)
 225   2                              {
 226   3                              Start();
 227   3                iAck = Write(device | I2C_R);
 228   3                  }
 229   2                if(iAck)
 230   2                      c = Read();
 231   2                  Stop();
 232   2                return c;
 233   2          }
 234   1      }
 235          
 236          /* ================================================================
 237              Name    : I2CWrtCNByte
 238              Purpose : Write Command Array to I2C Device
 239              Passed  : Pass Device Addr, code-array, start reg address, length
 240              Notes   :
 241             ================================================================ */
C51 COMPILER V7.07   I2C_CONTROL                                                           09/26/2006 08:56:41 PAGE 5   

 242          
 243          Bool I2CWrtCNByte(Byte byDEV, Byte code *ptr, Byte byStartReg, Byte byLen)
 244          {
 245   1          Byte i;
 246   1          Bool iAck;
 247   1      
 248   1              EX0     = 0;
 249   1              Start();
 250   1              iAck = Write(byDEV);
 251   1              if (iAck)
 252   1              {
 253   2                       iAck = Write(byStartReg);
 254   2                   if (iAck)
 255   2                   {
 256   3                              for (i = 0; i < byLen; i++)
 257   3                  {
 258   4                                  if(!Write(*ptr++))
 259   4                                  {
 260   5                                    Stop();
 261   5                        EX0 = 1;
 262   5                                    return FALSE;
 263   5                              }
 264   4                      }
 265   3                   }
 266   2          }
 267   1          Stop();
 268   1              EX0 = 1;
 269   1          return iAck;
 270   1      }
 271          
 272          /* ================================================================
 273              Name    : I2CWrite3Byte
 274              Purpose : Write I2C Device three bytes
 275              Passed  : Pass Device Addr, code-array, start reg address, length
 276              Notes   :
 277             ================================================================ */
 278          
 279          Bool I2CWrite3Byte(Byte device, Byte subadr0, Byte c1, Byte c2, Byte c3 )
 280          {
 281   1          Bool iAck;
 282   1          Start();
 283   1          iAck = Write(device | I2C_W);
 284   1          if(iAck)
 285   1          {
 286   2                 iAck = Write(subadr0);
 287   2                 if(iAck) iAck = Write(c1);
 288   2                 if(iAck) iAck = Write(c2);
 289   2                 if(iAck) iAck = Write(c3);
 290   2          }
 291   1          Stop();
 292   1          return iAck;
 293   1      }
 294          
 295          /* ----------------------------------------------------------
 296              Name    : I2CWrtHead -
 297              Purpose :
 298              Passed  : device : device slave address
 299                                                  subadr : register address
 300              Returns : return TRUE if success, otherwise return FALSE.
 301              Notes   :
 302             ----------------------------------------------------------*/
 303          
C51 COMPILER V7.07   I2C_CONTROL                                                           09/26/2006 08:56:41 PAGE 6   

 304          Bool I2CWrtHead(Byte device, Byte subadr)
 305          {
 306   1        Bool iAck;
 307   1      
 308   1        Start();
 309   1        iAck = Write(device | I2C_W);
 310   1        if (iAck)
 311   1              iAck = Write(subadr);
 312   1        return iAck;
 313   1      
 314   1      }
 315          
 316          /* ----------------------------------------------------------
 317              Name    : I2CReadWord -
 318              Purpose :
 319              Passed  : device : device slave address
 320                                                  subadr : register address
 321              Returns : return TRUE if success, otherwise return FALSE.
 322              Notes   :
 323             ----------------------------------------------------------*/
 324          /*
 325          Bool I2CReadWord( Byte device , Byte subaddress, Word  idata *c)
 326          {
 327                  if (I2CReadByte(device, subaddress,(Byte idata *)c+1) && I2CReadByte(device, subaddress+1,(Byte idata *)c
             -))
 328                          return 1;
 329                  else
 330                          return 0;
 331          }
 332          */
 333          /* ----------------------------------------------------------
 334              Name    : ReadWord
 335              Purpose : Only Used for VPC3230
 336              Passed  :
 337              Returns :
 338              Notes   :
 339             ----------------------------------------------------------*/
 340          
 341          Word ReadWord(void)
 342          {
 343   1              Byte byBitPos;
 344   1              Byte c,d;
 345   1      
 346   1              byBitPos = 0x80;
 347   1              c = 0;
 348   1              while(byBitPos)
 349   1              {
 350   2                      ioI2cScl=BIT1;
 351   2                      while(ioI2cScl == BIT0);
 352   2                      _nop_();
 353   2                      if(ioI2cSda) c |= byBitPos;
 354   2                      ioI2cScl=BIT0;
 355   2                      _nop_();
 356   2                      byBitPos >>= 1;
 357   2              }
 358   1              ioI2cSda = BIT0;
 359   1              _nop_();
 360   1              ioI2cScl = BIT1;
 361   1              _nop_();
 362   1              ioI2cScl = BIT0;
 363   1              _nop_();
 364   1              ioI2cSda = BIT1;
C51 COMPILER V7.07   I2C_CONTROL                                                           09/26/2006 08:56:41 PAGE 7   

 365   1              _nop_();
 366   1      
 367   1              d = 0;
 368   1              byBitPos = 0x80;
 369   1              while(byBitPos)
 370   1              {
 371   2                      ioI2cScl=BIT1;
 372   2                      while(ioI2cScl == BIT0);
 373   2                      _nop_();
 374   2                      if(ioI2cSda)
 375   2                              d |= byBitPos;
 376   2                      ioI2cScl=BIT0;
 377   2                      _nop_();
 378   2                      byBitPos >>= 1;
 379   2              }
 380   1              ioI2cSda=BIT1;
 381   1              _nop_();
 382   1              ioI2cScl=BIT1;
 383   1              _nop_();
 384   1              ioI2cScl=BIT0;
 385   1              _nop_();
 386   1              return c*0x0100 + d;
 387   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    502    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       7
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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