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

📄 i2c_bus.lst

📁 T112 MCU源程码,用于T112外接MCU篇程,用来驱动模拟屏
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   I2C_BUS                                                               01/05/2007 16:54:14 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE I2C_BUS
OBJECT MODULE PLACED IN .\I2C_BUS.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\..\新建文件夹\I2C_BUS.c BROWSE INCDIR(Z:\cb\T112项目\T112_AV1.8编写文
                    -件\1.8\include\) DEBUG OBJECTEXTEND PRINT(.\I2C_BUS.lst) OBJECT(.\I2C_BUS.obj)

stmt level    source

   1          //---------------------------------------------------------------------------
   2          // $Author:     Write by ChenBing at ShenZheng 
   3          // $Date:       2007/01/05 14:32:00
   4          // $function:   for any projects witch use I2C_bus(TOWWIER_bus)
   5          // --------------------------------------------------------------------------
   6          // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   7          // --------------------------------------------------------------------------
   8          // Copyright 2002 (c) Terawins Inc.
   9          // --------------------------------------------------------------------------
  10          
  11          #include "reg51.h"
  12          #include "I2C_BUS.h"
  13          
  14          
  15          
  16          /*****************************************
  17          *        S_Condition for TWD protocol    *
  18          *****************************************/
  19          
  20          #ifdef  COPY
  21          
  22          #if defined(TW_SLOW_SPEED)
  23          /*****************************************
  24          *       SDA _________                                            *
  25          *                        \________                       *
  26          *                                        *
  27          *       SCL____________                          *
  28          *                          \________             *
  29          *****************************************/
  30          void StartCondition(void)
  31          {
  32   1          uCHAR ix;
  33   1          uCHAR cTWtrytime=0;
  34   1          
  35   1          EA=0;               
  36   1                      
  37   1          while(++cTWtrytime)
  38   1          {
  39   2              /* make sure two line is release */
  40   2              Set_SDA_High;                                   //      SDA=1;
  41   2              Set_SCL_High;                                   //      SCL=1;
  42   2              
  43   2              for(ix = 0; ix < TWD_LONG_TIME; ix++)
  44   2              { };                                            //      Delay 12us 
  45   2              
  46   2              Set_SDA_Low;                                    //      SDA=0;
  47   2              
  48   2              for(ix = 0; ix < TWD_LONG_TIME; ix++)
  49   2              { };                                            //      Delay 12us      
  50   2      
  51   2              if((SCL_High)&&(SDA_Low))                       //      SDA=0&&SCL=1;
  52   2                  break;
  53   2          }
  54   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
C51 COMPILER V7.06   I2C_BUS                                                               01/05/2007 16:54:14 PAGE 2   

  55   1          { };                                                //      Delay 12us 
  56   1      }
  57          
  58          /*****************************************
  59          *        P_Condition for TWD protocol    *
  60          *****************************************/
  61          
  62          /*****************************************
  63          *       SDA                      ______                          *
  64          *           ____________/                                *
  65          *                                        *
  66          *       SCL           _________                  *
  67          *           _________/                                   *
  68          *****************************************/
  69          void StopCondition(void)
  70          {
  71   1          uCHAR ix;
  72   1          uCHAR cTWtrytime=0;
  73   1      
  74   1          Set_SDA_Low;
  75   1          Set_SCL_High;
  76   1          
  77   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
  78   1          { };  /* delay 12us */
  79   1          
  80   1          while(SCL_Low && ++cTWtrytime)                      //      确保SCL为高
  81   1          { };
  82   1          
  83   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
  84   1          { };  /* delay 12us */
  85   1          
  86   1          Set_SDA_High;
  87   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
  88   1          { };  /* delay 12us */
  89   1          
  90   1          EA=1;
  91   1      }
  92          
  93          /**********************************************
  94          *Send a byte to master with a acknowledge bit *
  95          **********************************************/
  96          
  97          /*****************************************
  98          *       SDA  _______ ___ ______                          *
  99          *            _______X___X______                  *
 100          *                                        *
 101          *       SCL           __                                 *
 102          *           _________/  \________                        *
 103          *****************************************/
 104          
 105          uCHAR Send_Byte(uCHAR cData)
 106          {
 107   1          uCHAR ix, j, cAcknowledge;
 108   1          uCHAR cTWtrytime=0;
 109   1          cAcknowledge = 0;
 110   1      
 111   1          for(ix = 0; ix < 8; ix++)
 112   1          {
 113   2              Set_SCL_Low;                                    //      _____/
 114   2              
 115   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 116   2              { };
C51 COMPILER V7.06   I2C_BUS                                                               01/05/2007 16:54:14 PAGE 3   

 117   2              if(cData&0x80)
 118   2                      Set_SDA_High;
 119   2              else 
 120   2                      Set_SDA_Low;
 121   2              cData<<=1;
 122   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 123   2              { };
 124   2                                                              //       ______
 125   2              Set_SCL_High;                                   //      /       
 126   2              
 127   2              while(SCL_Low && ++cTWtrytime)                  //      确保SCL为高
 128   2              { };
 129   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 130   2              { };
 131   2          }
 132   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 133   1          { };
 134   1          Set_SCL_Low;
 135   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 136   1          { };
 137   1          Set_SDA_High;                                       //       release data line for acknowledge (释放总线,读从应答位)
 138   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 139   1          { };
 140   1          Set_SCL_High;                                       //       Send a clock for Acknowledge 
 141   1          while(SCL_Low)
 142   1          { };
 143   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 144   1          { };
 145   1          if(SDA_High) 
 146   1             cAcknowledge = 1;                                //       No Acknowledge 
 147   1          Set_SCL_Low;                                        //       Finish Acknoledge 
 148   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 149   1          { };
 150   1          return(cAcknowledge);
 151   1      }
 152          
 153          uCHAR Send_Byte1(uCHAR cData)
 154          {
 155   1          uCHAR ix, j, cAcknowledge;
 156   1          uCHAR cTWtrytime=0;
 157   1      
 158   1          cAcknowledge = 0;
 159   1      
 160   1          for(ix = 0; ix < 8; ix++)
 161   1          {
 162   2              if(cData&0x80)
 163   2                      Set_SDA_High;
 164   2              else 
 165   2                      Set_SDA_Low;
 166   2              cData<<=1;
 167   2              Set_SCL_High;   
 168   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 169   2              { };
 170   2              Set_SCL_Low;
 171   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 172   2              { };
 173   2          } 
 174   1          return(1);
 175   1      }
 176          
 177          /************************************************
 178          *Read a byte from master with a acknowledge bit *
C51 COMPILER V7.06   I2C_BUS                                                               01/05/2007 16:54:14 PAGE 4   

 179          ************************************************/
 180          
 181          uCHAR Read_Byte(uCHAR cNum)
 182          {
 183   1          uCHAR ix, j;
 184   1          uCHAR cRetval=0;
 185   1      
 186   1          for(ix=0;ix<8;ix++)
 187   1          {
 188   2              Set_SCL_Low;
 189   2              
 190   2              while(SCL_High){};
 191   2              for(j=0;j<TWD_SHORT_TIME;j++){};
 192   2              cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ;           //       MSB First 
 193   2              
 194   2              Set_SCL_High;
 195   2           }
 196   1           if(cNum==1)                                                        //      SDA = (cNum==1) 1:0;
 197   1              Set_SDA_High;
 198   1           else
 199   1              Set_SDA_Low;     
 200   1           Set_SCL_High;
 201   1           while(SCL_Low){};
 202   1           for(j = 0; j < TWD_SHORT_TIME; j++)
 203   1           { };
 204   1           Set_SCL_Low;
 205   1           Set_SDA_High;
 206   1           for(j = 0; j < TWD_SHORT_TIME; j++)
 207   1           { };
 208   1           return cRetval;
 209   1      }
 210          
 211          #else
              // for fast Two Wire Bus Speed
              /*****************************************
              *        S_Condition for TWD protocol    *
              *****************************************/
              
              void StartCondition(void)
              {
                  uCHAR cTWtrytime=0;
                  while(++cTWtrytime)
                  {
                      Set_SDA_High;
                      Set_SCL_High;        /* make sure two line is release */
                      Set_SDA_Low;
                      if((SCL_High)&&(SDA_Low))
                      break;
                  }
              }
              
              /*****************************************
              *        P_Condition for TWD protocol    *
              *****************************************/
              
              void StopCondition(void)
              {
                  uCHAR cTWtrytime=0;
                  Set_SDA_Low;
                  Set_SCL_High;
                  Set_SDA_High;
              }

⌨️ 快捷键说明

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