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

📄 twowire.lst

📁 宏芯T102芯片驱动(51单片机作主控)
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   TWOWIRE                                                               12/28/2004 10:14:02 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TWOWIRE
OBJECT MODULE PLACED IN .\obj\TWOWIRE.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\TWOWIRE.C BROWSE INCDIR(.\include\;.\source\) DEBUG OBJECTEXTEND PRI
                    -NT(.\TWOWIRE.lst) OBJECT(.\obj\TWOWIRE.obj)

stmt 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 "TW101Reg.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.06   TWOWIRE                                                               12/28/2004 10:14:02 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.06   TWOWIRE                                                               12/28/2004 10:14:02 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) cAcknowledge = 1; /* No Acknowledge */
 124   1          Set_SCL_Low;                   /* Finish Acknoledge */
 125   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 126   1          { };
 127   1      
 128   1          return(cAcknowledge);
 129   1      }
 130          
 131          //--------------------------------------------------
 132          // Read_Byte
 133          //    Read a byte from master with a acknowledge bit
 134          //--------------------------------------------------
 135          uCHAR Read_Byte(uCHAR cNum)
 136          {
 137   1          uCHAR ix, j;
 138   1          uCHAR cRetval=0;
 139   1      
 140   1          for(ix=0;ix<8;ix++){
 141   2                Set_SCL_High;
 142   2                while(SCL_Low){};
 143   2                for(j=0;j<TWD_SHORT_TIME;j++){};
 144   2                cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ;  /* MSB First */
 145   2                Set_SCL_Low;
 146   2           }
 147   1      
 148   1           if(cNum==1)
 149   1              Set_SDA_High;
 150   1           else
 151   1                      Set_SDA_Low;
 152   1           //SDA = (cNum==1) 1:0;
 153   1           Set_SCL_High;
 154   1           while(SCL_Low){};
 155   1           for(j = 0; j < TWD_SHORT_TIME; j++)
 156   1           { };
 157   1      
 158   1          Set_SCL_Low;
 159   1      
 160   1          Set_SDA_High;
 161   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 162   1          { };
 163   1      
 164   1          return cRetval;
 165   1      }
 166          
 167          #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 */
C51 COMPILER V7.06   TWOWIRE                                                               12/28/2004 10:14:02 PAGE 4   

              
                      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;
              
                  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)
              {
C51 COMPILER V7.06   TWOWIRE                                                               12/28/2004 10:14:02 PAGE 5   

                  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;
                  for(j = 0; j < TWD_SHORT_TIME; j++)
                  { };
              
                  return cRetval;
              }
              
              
              #endif
 277          
 278          //--------------------------------------------------
 279          // Write Byte to Device
 280          //--------------------------------------------------
 281          
 282          //--------------------------------------------------
 283          // Read Byte to Device
 284          //--------------------------------------------------
 285          uCHAR I2CReadByte(uCHAR cDevAddr, uCHAR cReg)
 286          {
 287   1          uCHAR cResult = 0;
 288   1      
 289   1      
 290   1          /* write reg offset */
 291   1          StartCondition();
 292   1          if(Send_Byte(cDevAddr))
 293   1              return 0;  // Write address
 294   1          if(Send_Byte(cReg))
 295   1              return 0;
 296   1      
 297   1          /* read data */
 298   1          StartCondition();

⌨️ 快捷键说明

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