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

📄 i2c.lst

📁 Bitek 公司 bit1611b模拟屏驱动芯片外接MCU驱动DEMO源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 226   1          I2C_SET_CLK(LOW);
 227   1          I2C_LOW;
 228   1      
 229   1          return( fResult );
 230   1      } /* I2C_GetACK */
 231          
 232          
 233          /* -------------------------------------------------------------------
C51 COMPILER V7.50   I2C                                                                   02/05/2007 16:33:25 PAGE 5   

 234              Name: I2C_Init -
 235              Purpose: .
 236              Passed: None.
 237              Returns: None.
 238              Notes:
 239            ------------------------------------------------------------------- */
 240          void I2C_Init (void)
 241          {
 242   1          I2C_SET_DAT(HIGH);
 243   1          I2C_SET_CLK(HIGH);
 244   1      } /* I2C_Init */
 245          
 246          
 247          #if (I2C_RX_BURST)
              /* -------------------------------------------------------------------
                  Name: I2C_RxBurst -
                  Purpose: To receive bulk data from I2C slave device.
                  Passed:
                      bIdx: 1..255. (Excludes slave address and sub-address)
                  Returns: None.
                  Notes:
                      The bSLA should be the slave device's 'WRITE' module addres,
                      not 'READ' one.
                 ------------------------------------------------------------------- */
              void I2C_RxBurst (
              UB8  bSLA,          /* I2C slave address */
              UB8  bREG,          /* I2C sub-address */
              UB8  bCNT,          /* The number of data which will be transmitted */
              UB8  *pbDATA        /* Point to the first DATA item */
              )
              {
                  UB8     bIdx;
              
              
                  I2C_Start();
              
                  /* --------------------------------
                      Write
                     -------------------------------- */
                  I2C_TxData(bSLA);                 
                  I2C_GetACK();                     
              
                  I2C_TxData(bREG);                 
                  I2C_GetACK();
              
              
                  /* --------------------------------
                      Read
                     -------------------------------- */
                  I2C_Start();                       
                  I2C_TxData(bSLA | 0x01);
                  I2C_GetACK();
              
              
                  for (bIdx = 0; bIdx < (bCNT - 1); bIdx++)
                  {
                      *pbDATA++ = I2C_RxData();
              
                      I2C_SetACK();
                  } /* for */
              
              
C51 COMPILER V7.50   I2C                                                                   02/05/2007 16:33:25 PAGE 6   

                  /* --------------------------------
                      Last Read
                     -------------------------------- */
                  *pbDATA = I2C_RxData();
                  I2C_SetNAK();
              
                  I2C_Stop();
              } /* I2C_RxBurst */
              #endif
 305          
 306          
 307          #if (I2C_RX_BYTE)
              /* -------------------------------------------------------------------
                  Name: I2C_RxByte -
                  Purpose: To receive one byte data from I2C slave device.
                  Passed:
                      UB8 bSLA,          I2C slave address
                      UB8 bREG           I2C sub-address
              
                  Returns:
                      One byte received data.
                  Notes:
                      The bSLA should be the slave device's 'WRITE' mode address,
                      not 'READ' one.
                 ------------------------------------------------------------------- */
              UB8 I2C_RxByte (
              UB8 bSLA,          /* I2C slave address */
              UB8 bREG           /* I2C sub-address */
              )
              {
                  UB8    bDATA;
              
              
                  I2C_Start();
              
                  /* --------------------------------
                      Write
                     -------------------------------- */
                  I2C_TxData(bSLA);                   
                  I2C_GetACK();                       
              
                  I2C_TxData(bREG);
                  I2C_GetACK();
              
              
                  /* --------------------------------
                      Read
                     -------------------------------- */
                  I2C_Start();
                  I2C_TxData(bSLA | 0x01);            
                  I2C_GetACK();
              
              
                  /* --------------------------------
                      Last Read
                     -------------------------------- */
                  bDATA = I2C_RxData();
                  I2C_SetNAK();                     
              
                  I2C_Stop();
              
                  return( bDATA );
C51 COMPILER V7.50   I2C                                                                   02/05/2007 16:33:25 PAGE 7   

              } /* I2C_RxByte */
              #endif
 360          
 361          
 362          /* -------------------------------------------------------------------
 363              Name: I2C_RxData -
 364              Purpose:
 365                  To do I2C parallel serial conversion for reception.
 366              Passed: None.
 367              Returns:
 368              Notes:
 369            ------------------------------------------------------------------- */
 370          UB8 I2C_RxData (void)
 371          {
 372   1          UB8     bResult;
 373   1          UB8     bMask;
 374   1      
 375   1      
 376   1          bResult = 0x00;                 /* Clear value */
 377   1      
 378   1          I2C_SET_DAT(HIGH);
 379   1      
 380   1          /* MSB is read first */
 381   1          for (bMask = 0x80; bMask; bMask >>= 1)
 382   1          {
 383   2              I2C_SET_CLK(HIGH);
 384   2              I2C_HIGH;                   
 385   2      
 386   2              if ( I2C_GET_DAT_HIGH )
 387   2                  bResult |= bMask;
 388   2      
 389   2              I2C_SET_CLK(LOW);
 390   2          } /* for */
 391   1      
 392   1          return( bResult );
 393   1      } /* I2C_RxData */
 394          
 395          
 396          #if (I2C_RX_WORD)
              /* -------------------------------------------------------------------
                  Name: I2C_RxWord -
                  Purpose: To receive one WORD data from I2C slave device.
                  Passed:
                  Returns: one WORD data.
                  Notes:
                      1) Only for little-endian storage format devices !!!
                      2) Keil C51 uses *big-endian* storage format. [1]144
              
                 ------------------------------------------------------------------- */
              UW16 I2C_RxWord (
              UB8 bSLA,                       /* I2C slave address */
              UB8 bREG                        /* I2C sub-address */
              )
              {
                  UW16    wDATA;
              
              
                  I2C_Start();
              
                  /* --------------------------------
                      Write
                     -------------------------------- */
C51 COMPILER V7.50   I2C                                                                   02/05/2007 16:33:25 PAGE 8   

                  I2C_TxData(bSLA);                  
                  I2C_GetACK();                      
              
                  I2C_TxData(bREG);                  
                  I2C_GetACK();                      
              
              
                  /* --------------------------------
                      Read
                     -------------------------------- */
                  I2C_Start();
                  I2C_TxData(bSLA | 0x01);
                  I2C_GetACK();
              
              
                  /* --------------------------------
                      Last Read
                     -------------------------------- */
                  wDATA = I2C_RxData();               
                  I2C_SetACK();
              
                  wDATA = (I2C_RxData() << 8) + wDATA;
                  I2C_SetNAK();                       
              
                  I2C_Stop();                         
              
                  return( wDATA );
              } /* I2C_RxWord */
              #endif
 449          
 450          
 451          /* -------------------------------------------------------------------
 452              Name: I2C_SetACK -
 453              Purpose: .
 454              Passed: None.
 455              Returns: None.
 456              Notes:
 457             ------------------------------------------------------------------- */
 458          void I2C_SetACK (void)
 459          {
 460   1          I2C_SET_DAT(LOW);
 461   1          I2C_SU_DAT;             // Added by JC 01:53PM  2005/11/23
 462   1      
 463   1          I2C_SET_CLK(HIGH);
 464   1          I2C_HIGH;
 465   1      

⌨️ 快捷键说明

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