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

📄 i2c.lst

📁 DDS 单片机控制AD7008 产生正弦波
💻 LST
字号:
C51 COMPILER V7.50   I2C                                                                   08/08/2007 21:14:38 PAGE 1   


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

line level    source

   1          #include "I2C.h"
   2          
   3          unsigned char data I2C_Delay_t;
   4          #define I2C_Delay()\
   5          {\
   6                  I2C_Delay_t = (I2C_DELAY_VALUE);\
   7                  while ( --I2C_Delay_t != 0 );\
   8          }
   9          void I2C_Init()
  10          {
  11   1              I2C_SCL = 1;
  12   1              I2C_Delay();
  13   1              I2C_SDA = 1;
  14   1              I2C_Delay();
  15   1      }
  16          void I2C_Start()
  17          {
  18   1              I2C_SDA = 1;
  19   1              I2C_Delay();
  20   1              I2C_SCL = 1;
  21   1              I2C_Delay();
  22   1              I2C_SDA = 0;
  23   1              I2C_Delay();
  24   1              I2C_SCL = 0;
  25   1              I2C_Delay();
  26   1      }
  27          char I2C_Read()
  28          {
  29   1              char dat;
  30   1              unsigned char t = 8;
  31   1              I2C_SDA = 1;    //在读取数据之前,要把SDA拉高
  32   1              do
  33   1              {
  34   2                      I2C_SCL = 1;
  35   2                      I2C_Delay();
  36   2                      dat <<= 1;
  37   2                      if ( I2C_SDA ) dat |= 0x01;
  38   2                      I2C_SCL = 0;
  39   2                      I2C_Delay();
  40   2              } while ( --t != 0 );
  41   1              return dat;
  42   1      }
  43          void I2C_Write(char dat)
  44          {
  45   1              unsigned char t = 8;
  46   1              do
  47   1              {
  48   2                      I2C_SDA = (bit)(dat & 0x80);
  49   2                      dat <<= 1;
  50   2                      I2C_SCL = 1;
  51   2                      I2C_Delay();
  52   2                      I2C_SCL = 0;
  53   2                      I2C_Delay();
  54   2              } while ( --t != 0 );
  55   1      }
C51 COMPILER V7.50   I2C                                                                   08/08/2007 21:14:38 PAGE 2   

  56          bit I2C_GetAck()
  57          {
  58   1              bit ack;
  59   1              I2C_SDA = 1;
  60   1              I2C_Delay();
  61   1              I2C_SCL = 1;
  62   1              I2C_Delay();
  63   1              ack = I2C_SDA;
  64   1              I2C_SCL = 0;
  65   1              I2C_Delay();
  66   1              return ack;
  67   1      }
  68          void I2C_PutAck(bit ack)
  69          {
  70   1              I2C_SDA = ack;
  71   1              I2C_Delay();
  72   1              I2C_SCL = 1;
  73   1              I2C_Delay();
  74   1              I2C_SCL = 0;
  75   1              I2C_Delay();
  76   1      }
  77          void I2C_Stop()
  78          {
  79   1              unsigned int t = I2C_STOP_WAIT_VALUE;
  80   1              I2C_SDA = 0;
  81   1              I2C_Delay();
  82   1              I2C_SCL = 1;
  83   1              I2C_Delay();
  84   1              I2C_SDA = 1;
  85   1              I2C_Delay();
  86   1              while ( --t != 0 );             //在下一次产生Start之前,要加一定的延时
  87   1      }
  88          
  89          bit I2C_Gets
  90          (
  91                  unsigned char SlaveAddr,
  92                  unsigned int SubAddr,
  93                  unsigned char SubMod,
  94                  char *dat,
  95                  unsigned int Size
  96          )
  97          {
  98   1              unsigned char i;
  99   1              char a[3];
 100   1              if ( Size == 0 ) return 0;
 101   1              a[0] = (SlaveAddr << 1);
 102   1              if ( SubMod > 2 ) SubMod = 2;
 103   1              if ( SubMod != 0 )
 104   1              {
 105   2                      if ( SubMod == 1 )
 106   2                      {
 107   3                              a[1] = (char)(SubAddr);
 108   3                      }
 109   2                      else
 110   2                      {
 111   3                              a[1] = (char)(SubAddr >> 8);
 112   3                              a[2] = (char)(SubAddr);
 113   3                      }
 114   2                      SubMod++;
 115   2                      I2C_Start();
 116   2                      for ( i=0; i<SubMod; i++ )
 117   2                      {
C51 COMPILER V7.50   I2C                                                                   08/08/2007 21:14:38 PAGE 3   

 118   3                              I2C_Write(a[i]);
 119   3                              if ( I2C_GetAck() )
 120   3                              {
 121   4                                      I2C_Stop();
 122   4                                      return 1;
 123   4                              }
 124   3                      }
 125   2              }
 126   1              I2C_Start();
 127   1              I2C_Write(a[0]+1);
 128   1              if ( I2C_GetAck() )
 129   1              {
 130   2                      I2C_Stop();
 131   2                      return 1;
 132   2              }
 133   1      
 134   1              for (;;)
 135   1              {
 136   2                      *dat++ = I2C_Read();
 137   2                      if ( --Size == 0 )
 138   2                      {
 139   3                              I2C_PutAck(1);
 140   3                              break;
 141   3                      }
 142   2                      I2C_PutAck(0);
 143   2              }
 144   1              I2C_Stop();
 145   1              return 0;
 146   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    344    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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