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

📄 twowire.lst

📁 t112 参考文件
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   TWOWIRE                                                               01/12/2006 13:31:12 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TWOWIRE
OBJECT MODULE PLACED IN .\Obj\TWOWIRE.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Source\Comm\TWOWIRE.C BROWSE INCDIR(.\Include\;.\Source\;.\Include\Panel\;.
                    -\Include\GammaTable\) DEFINE(T106) DEBUG OBJECTEXTEND PRINT(.\TWOWIRE.lst) OBJECT(.\Obj\TWOWIRE.obj)

line level    source

   1          //---------------------------------------------------------------------------
   2          // Terawins Inc. Company Confidential Strictly Private
   3          //
   4          // $Archive: $
   5          // $Revision: 1.9 $
   6          // $Author: jwang $
   7          // $Date: 2002/07/08 22:34:39 $
   8          //
   9          // --------------------------------------------------------------------------
  10          // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  11          // --------------------------------------------------------------------------
  12          // Copyright 2002 (c) Terawins Inc.
  13          // --------------------------------------------------------------------------
  14          
  15          #include "reg51.h"
  16          #include "common.h"
  17          #include "System.h"
  18          #include "TW10xReg.h"
  19          #include "TwoWire.h"
  20          #include "Tuner.h"
  21          #define TW_SLOW_SPEED
  22          //----------------------------------------
  23          // S_Condition for TWD protocol
  24          //----------------------------------------
  25          #if defined(TW_SLOW_SPEED)
  26          void StartCondition(void)
  27          {
  28   1          uCHAR ix;
  29   1          uCHAR cTWtrytime=0;
  30   1          EA=0;
  31   1          while(++cTWtrytime)
  32   1          {
  33   2              Set_SDA_High;
  34   2              Set_SCL_High;        /* make sure two line is release */
  35   2              for(ix = 0; ix < TWD_LONG_TIME; ix++)
  36   2              { };  /* Delay 12us */
  37   2      
  38   2              Set_SDA_Low;
  39   2              for(ix = 0; ix < TWD_LONG_TIME; ix++)
  40   2              { };  /* Delay 12us */
  41   2      
  42   2              if((SCL_High)&&(SDA_Low))
  43   2                  break;
  44   2          }
  45   1      
  46   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
  47   1          { };  /* Delay 12us */
  48   1      }
  49          
  50          //----------------------------------------
  51          // P_Condition for TWD protocol
  52          //----------------------------------------
  53          void StopCondition(void)
  54          {
C51 COMPILER V7.50   TWOWIRE                                                               01/12/2006 13:31:12 PAGE 2   

  55   1          uCHAR ix;
  56   1          uCHAR cTWtrytime=0;
  57   1      
  58   1          Set_SDA_Low;
  59   1          Set_SCL_High;
  60   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
  61   1          { };  /* delay 12us */
  62   1      
  63   1          while(SCL_Low && ++cTWtrytime)
  64   1          { };
  65   1      
  66   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
  67   1          { };  /* delay 12us */
  68   1      
  69   1          Set_SDA_High;
  70   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
  71   1          { };  /* delay 12us */
  72   1              EA=1;
  73   1      }
  74          
  75          //--------------------------------------------------
  76          // Send_Byte
  77          //    Send a byte to master with a acknowledge bit
  78          //--------------------------------------------------
  79          uCHAR Send_Byte(uCHAR cData)
  80          {
  81   1          uCHAR ix, j, cAcknowledge;
  82   1          uCHAR cTWtrytime=0;
  83   1      
  84   1          cAcknowledge = 0;
  85   1      
  86   1          for(ix = 0; ix < 8; ix++)
  87   1          {
  88   2              Set_SCL_Low;
  89   2              for(j = 0; j < TWD_SHORT_TIME; j++)
  90   2              { };
  91   2      
  92   2              if(cData&0x80)Set_SDA_High;
  93   2                      else Set_SDA_Low;
  94   2                      cData<<=1;
  95   2      
  96   2              for(j = 0; j < TWD_SHORT_TIME; j++)
  97   2              { };
  98   2      
  99   2              Set_SCL_High;
 100   2              while(SCL_Low && ++cTWtrytime)
 101   2              { };
 102   2      
 103   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 104   2              { };
 105   2          }
 106   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 107   1          { };
 108   1      
 109   1          Set_SCL_Low;
 110   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 111   1          { };
 112   1      
 113   1          Set_SDA_High;                /* release data line for acknowledge */
 114   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 115   1          { };
 116   1      
C51 COMPILER V7.50   TWOWIRE                                                               01/12/2006 13:31:12 PAGE 3   

 117   1          Set_SCL_High;                /* Send a clock for Acknowledge */
 118   1          while(SCL_Low)
 119   1          { };
 120   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 121   1          { };
 122   1      
 123   1          if(SDA_High) 
 124   1             cAcknowledge = 1; /* No Acknowledge */
 125   1          Set_SCL_Low;                   /* Finish Acknoledge */
 126   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 127   1          { };
 128   1      
 129   1          return(cAcknowledge);
 130   1      }
 131          
 132          
 133          uCHAR Send_Byte1(uCHAR cData)
 134          {
 135   1          uCHAR ix, j, cAcknowledge;
 136   1          uCHAR cTWtrytime=0;
 137   1      
 138   1          cAcknowledge = 0;
 139   1      
 140   1          for(ix = 0; ix < 8; ix++)
 141   1          {
 142   2       
 143   2      
 144   2                if(cData&0x80)Set_SDA_High;
 145   2                      else Set_SDA_Low;
 146   2                      cData<<=1;
 147   2           Set_SCL_High;   
 148   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 149   2              { };
 150   2      
 151   2              Set_SCL_Low;
 152   2        
 153   2      
 154   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 155   2              { };
 156   2          }
 157   1       
 158   1      
 159   1       
 160   1          return(1);
 161   1      }
 162          //--------------------------------------------------
 163          // Read_Byte
 164          //    Read a byte from master with a acknowledge bit
 165          //--------------------------------------------------
 166          uCHAR Read_Byte(uCHAR cNum)
 167          {
 168   1          uCHAR ix, j;
 169   1          uCHAR cRetval=0;
 170   1      
 171   1          for(ix=0;ix<8;ix++){
 172   2                Set_SCL_High;
 173   2                while(SCL_Low){};
 174   2                for(j=0;j<TWD_SHORT_TIME;j++){};
 175   2                cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ;  /* MSB First */
 176   2                Set_SCL_Low;
 177   2           }
 178   1      
C51 COMPILER V7.50   TWOWIRE                                                               01/12/2006 13:31:12 PAGE 4   

 179   1           if(cNum==1)
 180   1              Set_SDA_High;
 181   1           else
 182   1                      Set_SDA_Low;
 183   1           //SDA = (cNum==1) 1:0;
 184   1           Set_SCL_High;
 185   1           while(SCL_Low){};
 186   1           for(j = 0; j < TWD_SHORT_TIME; j++)
 187   1           { };
 188   1      
 189   1          Set_SCL_Low;
 190   1      
 191   1          Set_SDA_High;
 192   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 193   1          { };
 194   1      
 195   1          return cRetval;
 196   1      }
 197          
 198          #else
              // for fast Two Wire Bus Speed
              
              void StartCondition(void)
              {
              //    uCHAR ix;
                  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 ix;
                  uCHAR cTWtrytime=0;
              
                  Set_SDA_Low;
                  Set_SCL_High;
              
                  Set_SDA_High;
              }
              
              //--------------------------------------------------
              // Send_Byte
              //    Send a byte to master with a acknowledge bit
              //--------------------------------------------------
              uCHAR Send_Byte(uCHAR cData)
              {
                  uCHAR ix;
                  uCHAR cAcknowledge;
                  uCHAR cTWtrytime=0;
C51 COMPILER V7.50   TWOWIRE                                                               01/12/2006 13:31:12 PAGE 5   

              
                  cAcknowledge = 0;
              
                  for(ix = 0; ix < 8; ix++)
                  {
                      Set_SCL_Low;
                      //        (cData&(1<<(7-ix)))?(Set_SDA_High):(Set_SDA_Low);  /* MSB First */
                      if(cData&0x80)Set_SDA_High;
                              else Set_SDA_Low;
                              cData<<=1;
              
              
                      Set_SCL_High;
                  }
              
                  Set_SCL_Low;
                  Set_SDA_High;                /* release data line for acknowledge */
                  Set_SCL_High;                /* Send a clock for Acknowledge */
              
                  if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
                  Set_SCL_Low;                   /* Finish Acknoledge */
              
                  return(cAcknowledge);
              }
              
              
              
              
              //--------------------------------------------------
              // Read_Byte
              //    Read a byte from master with a acknowledge bit
              //--------------------------------------------------
              uCHAR Read_Byte(void)
              {
                  uCHAR ix, j;
                  uCHAR cRetval;
                  uCHAR cTWtrytime=0;
              
              //    cRetval = 0;
                  Set_SDA_High;
              
                  for(ix = 0; ix < 8; ix++)
                  {
                      Set_SCL_Low;
                      for(j = 0; j < TWD_SHORT_TIME; j++)
                      { };
              
                      Set_SCL_High;
                      while(SCL_Low)
                      { };
              
                      for(j = 0; j < TWD_SHORT_TIME; j++)
                      { };
              
                              cRetval<<=1;
                              if(SDA_High) cRetval++;
                      }
              
                  for(j = 0; j < TWD_SHORT_TIME; j++)
                  { };
              
                  Set_SCL_Low;
C51 COMPILER V7.50   TWOWIRE                                                               01/12/2006 13:31:12 PAGE 6   

                  for(j = 0; j < TWD_SHORT_TIME; j++)
                  { };
              
                  return cRetval;
              }
              
              
              #endif
 311          
 312          //--------------------------------------------------
 313          // Write Byte to Device
 314          //--------------------------------------------------
 315          
 316          //--------------------------------------------------
 317          // Read Byte to Device
 318          //--------------------------------------------------
 319          uCHAR I2CReadByte(uCHAR cDevAddr, uCHAR cReg)
 320          {
 321   1          uCHAR cResult = 0;
 322   1      
 323   1      
 324   1          /* write reg offset */
 325   1          StartCondition();
 326   1          if(Send_Byte(cDevAddr))
 327   1              return 0;  // Write address
 328   1          if(Send_Byte(cReg))
 329   1              return 0;

⌨️ 快捷键说明

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