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

📄 i2c_control.lst

📁 一个LCD TV的源程序, 用的是realtek的IC
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.07   I2C_CONTROL                                                           09/26/2006 08:56:41 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE I2C_CONTROL
OBJECT MODULE PLACED IN i2c_control.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE i2c_control.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*********************************************************************
   2          
   3                COPYRIGHT  (C)  Himax Technologies, Inc.
   4          
   5                File name     : i2c_control.c
   6          
   7                Description   : Implement i2c relative control function
   8          
   9                Author        : Taylor
  10          
  11                Create date   :
  12          
  13                Modifications :
  14          
  15          *********************************************************************/
  16          
  17          #define _I2C_CONTROL_C
  18          
  19          /********************** Include Section *****************************/
  20          
  21          #include "i2c_control.h"
  22          
  23          /**************** Function Implement Section ************************/
  24          
  25          /* ================================================================
  26              Name    : Init_I2C
  27              Purpose : Initial I2C Bus
  28              Passed  : None
  29              Notes   : None
  30             ================================================================ */
  31          
  32          void Init_I2C(void)
  33          {
  34   1              ioI2cScl = 1;
  35   1              ioI2cSda = 1;
  36   1      
  37   1      }
  38          
  39          /* ================================================================
  40              Name    : Start
  41              Purpose : Start I2C Bus Protocol
  42              Passed  : None
  43              Notes   : None
  44             ================================================================ */
  45          
  46          void Start(void)
  47          {
  48   1              ioI2cSda = BIT1;
  49   1              _nop_();
  50   1              ioI2cScl = BIT1;
  51   1              _nop_();
  52   1              ioI2cSda = BIT0;
  53   1              _nop_();
  54   1              ioI2cScl = BIT0;
  55   1      }
C51 COMPILER V7.07   I2C_CONTROL                                                           09/26/2006 08:56:41 PAGE 2   

  56          
  57          
  58          /* ================================================================
  59              Name    : Stop
  60              Purpose : Stop I2C Bus Protocol
  61              Passed  : None
  62              Notes   : None
  63             ================================================================ */
  64          
  65          void Stop(void)
  66          {
  67   1              ioI2cSda = BIT0;
  68   1              _nop_();
  69   1              ioI2cScl = BIT1;
  70   1              _nop_();
  71   1              ioI2cSda = BIT1;
  72   1              _nop_();
  73   1      }
  74          
  75          
  76          /* ================================================================
  77              Name    : Write
  78              Purpose : I2C Write one byte
  79              Passed  : One Byte Data or Command
  80              Notes   : Compare with other code, it's size is smallest !!
  81                        Compare Time at 0910
  82             ================================================================ */
  83          
  84          Bool Write(Byte byData)
  85          {
  86   1        Byte byBitPos;
  87   1              Bool bAck;
  88   1      
  89   1              byBitPos = 0x80;
  90   1              while(byBitPos)
  91   1              {
  92   2                      ioI2cScl = BIT0;
  93   2                      _nop_();
  94   2                      ioI2cSda  = (byData & byBitPos) ? BIT1 : BIT0;
  95   2                      _nop_();
  96   2                      _nop_();
  97   2                      _nop_();
  98   2                      _nop_();
  99   2                      _nop_();
 100   2                      _nop_();
 101   2                      _nop_();
 102   2                      _nop_();
 103   2                      ioI2cScl = BIT1;
 104   2                      _nop_();
 105   2                      ioI2cScl = BIT0;
 106   2                      byBitPos >>= 1;
 107   2                      _nop_();
 108   2              }
 109   1              ioI2cSda = BIT1;
 110   1              _nop_();
 111   1              ioI2cScl = BIT1;
 112   1              bAck = (ioI2cSda == BIT0) ? BIT1 :BIT0;
 113   1              ioI2cScl = BIT0;
 114   1              _nop_();
 115   1              ioI2cSda = BIT0;
 116   1        return bAck;
 117   1      }
C51 COMPILER V7.07   I2C_CONTROL                                                           09/26/2006 08:56:41 PAGE 3   

 118          
 119          /* ================================================================
 120              Name    : Read
 121              Purpose : I2C Read One Byte
 122              Passed  : None
 123              Notes   :
 124             ================================================================ */
 125          
 126          Byte Read(void)
 127          {
 128   1              Byte byBitPos = 0x80;
 129   1              Byte c = 0;
 130   1      
 131   1              ioI2cSda = BIT1;
 132   1              while(byBitPos)
 133   1              {
 134   2                      ioI2cScl = BIT1;
 135   2                      while(ioI2cScl == BIT0);
 136   2                      _nop_();
 137   2                      if(ioI2cSda) c |= byBitPos;
 138   2                      ioI2cScl = BIT0;
 139   2                      _nop_();
 140   2                      byBitPos >>= 1;
 141   2              }
 142   1              ioI2cSda=BIT1;
 143   1              _nop_();
 144   1              ioI2cScl=BIT1;
 145   1              _nop_();
 146   1              ioI2cScl=BIT0;
 147   1              _nop_();
 148   1              return c;
 149   1      }
 150          
 151          /* ================================================================
 152              Name    : I2CWriteByte
 153              Purpose : Write i2c device one byte
 154              Passed  : Pass I2C Device Address, subaddr & wanted-write data
 155              Notes   :
 156             ================================================================ */
 157          
 158          Bool I2CWriteByte(Byte device, Byte subadr0, Byte c)
 159          {
 160   1          Bool iAck;
 161   1          Again:
 162   1          Start();
 163   1          iAck = Write(device | I2C_W);
 164   1          if(iAck)      // Iack == 1 means ack
 165   1          {
 166   2                              iAck = Write(subadr0);
 167   2                              if(iAck)
 168   2              {
 169   3                                              iAck = Write(c);
 170   3              }
 171   2             else
 172   2              goto Again;
 173   2          }
 174   1          else
 175   1              goto Again;
 176   1          Stop();
 177   1          return iAck;
 178   1      }
 179          
C51 COMPILER V7.07   I2C_CONTROL                                                           09/26/2006 08:56:41 PAGE 4   

 180          /* ================================================================
 181              Name    : I2CWrite2Byte
 182              Purpose : Write i2c Device 2 bytes command
 183              Passed  : Pass I2C Device Address, subaddr & wanted-write 2data
 184              Notes   :
 185             ================================================================ */
 186          
 187          Bool I2CWrite2Byte(Byte device, Byte subadr0, Byte c1, Byte c2)
 188          {
 189   1          Bool iAck;
 190   1          Start();
 191   1          iAck = Write(device | I2C_W);
 192   1          if(iAck)
 193   1          {
 194   2                 iAck = Write(subadr0);
 195   2                 if(iAck)
 196   2             {
 197   3               iAck = Write(c1);

⌨️ 快捷键说明

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