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

📄 i2c.lst

📁 解码2272模拟程序,调试通过,需要者也可和我联系
💻 LST
字号:
C51 COMPILER V7.08   I2C                                                                   09/20/2007 18:03:20 PAGE 1   


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

line level    source

   1          #include "my_89x51.h"
   2          
   3          extern void d1ms(unsigned int);
   4          #define READMODE 0xa1
   5          #define WRITEMODE 0xa0
   6          
   7          
   8          /**--------------------------------------------------------------------------------
   9          调用方式:void I2CStart(void) ﹫200 /07/0 4
  10          函数说明:I2C启始位
  11          ---------------------------------------------------------------------------------*/
  12          void I2CStart()
  13          {
  14   1              EA = 0;
  15   1              SCL = 0;
  16   1              SDA = 1;
  17   1              SCL = 1;
  18   1              _nop_();
  19   1              SDA = 0;
  20   1              _nop_();
  21   1              SCL = 0;
  22   1      }
  23          
  24          /**--------------------------------------------------------------------------------
  25           调用方式:void I2CStop(void) ﹫200 /07/0 4
  26           函数说明:I2C结束位
  27          ---------------------------------------------------------------------------------*/
  28          void I2CStop()
  29          {
  30   1              SDA = 0;
  31   1              SCL = 1;
  32   1              _nop_();
  33   1              SDA = 1;
  34   1              EA = 1;
  35   1      }
  36          
  37          /**--------------------------------------------------------------------------------
  38          调用方式:bit I2CAck(void) ﹫200 /07/0 4
  39          函数说明:I2C用,等待从器件接收方的应答
  40          返回1--正确
  41          返回0--错误
  42          ---------------------------------------------------------------------------------*/
  43          unsigned char WaitAck()
  44          {
  45   1              unsigned char data errtime = 255;//因故障接收方无ACK 超时值为255
  46   1              while (SDA){
  47   2                      errtime--;
  48   2                      if (!errtime){
  49   3                              SCL = 0;
  50   3                              I2CStop();
  51   3                              return (0);
  52   3                      }
  53   2              }
  54   1              SCL = 0;
  55   1              return (1);
C51 COMPILER V7.08   I2C                                                                   09/20/2007 18:03:20 PAGE 2   

  56   1      }
  57          
  58          /**--------------------------------------------------------------------------------
  59          调用方式:void SendAck(void) ﹫200 /07/0 4
  60          函数说明:I2C用,主器件为接收方,从器件为发送方时,应答信号。
  61          ---------------------------------------------------------------------------------*/
  62          void SendAck()
  63          {
  64   1              SDA = 0;
  65   1              SCL = 1;
  66   1              SCL = 0;
  67   1              SDA = 1;
  68   1      }
  69          
  70          /**--------------------------------------------------------------------------------
  71          调用方式:void SendAck(void) ﹫200 /07/0 4
  72          函数说明:I2C用,主器件为接收方,从器件为发送方时,非应答信号。
  73          --------------------------------------------------------------------------------*/
  74          void SendNotAck()
  75          {
  76   1              SDA = 1;
  77   1              SCL = 1;
  78   1              SCL = 0;
  79   1      }
  80          
  81          /**--------------------------------------------------------------------------------
  82          调用方式:void I2CSend(unsigned char ch) ﹫200 /07/0 5
  83          函数说明:I2C用,发送BYTE
  84          ---------------------------------------------------------------------------------*/
  85          void I2CSendByte(unsigned char ch)
  86          {
  87   1              unsigned char data i;
  88   1              for (i = 0; i < 8; i++){
  89   2                      ch <<= 1;
  90   2                      SDA = CY;
  91   2                      SCL=1;
  92   2                      somenop;
  93   2                      SCL = 0;
  94   2                      somenop;
  95   2              }
  96   1              SDA = 1;
  97   1              SCL = 1;
  98   1      }
  99          
 100          /**--------------------------------------------------------------------------------
 101          调用方式:unsigned char I2CReceive(void) ﹫200 /07/0 5
 102          函数说明:I2C用,接收BYTE
 103          ---------------------------------------------------------------------------------*/
 104          unsigned char I2CReceiveByte()
 105          {
 106   1              unsigned char data i = 8;
 107   1              unsigned char data ddata = 0;
 108   1              SDA = 1;
 109   1              while (i--){
 110   2                      SCL = 1;
 111   2                      ddata <<= 1;
 112   2                      if (SDA)
 113   2                              ddata++;
 114   2                      SCL = 0;
 115   2              }
 116   1              return (ddata);
 117   1      }
C51 COMPILER V7.08   I2C                                                                   09/20/2007 18:03:20 PAGE 3   

 118          
 119          /******************
 120          函数说明:读取E2ROM
 121          ******************/
 122          
 123          void i2c_read(unsigned char nadd, unsigned char nlen, unsigned char data *pdt)
 124          {
 125   1              I2CStart();
 126   1              I2CSendByte(WRITEMODE);
 127   1              _nop_();
 128   1              WaitAck();
 129   1              _nop_();
 130   1              I2CSendByte(nadd);
 131   1              WaitAck();
 132   1              _nop_();
 133   1              I2CStart();
 134   1              I2CSendByte(READMODE);
 135   1              WaitAck();
 136   1              _nop_();
 137   1              while(nlen > 0){
 138   2                      *pdt = I2CReceiveByte();
 139   2                      somenop;
 140   2                      if (nlen != 1)
 141   2                              SendAck();
 142   2                      nlen--;
 143   2                      pdt++;
 144   2              }
 145   1              SendNotAck();
 146   1              I2CStop();
 147   1      }
 148          
 149          /******************
 150          函数说明:写E2ROM
 151          ******************/
 152          void i2c_write(unsigned char nadd, unsigned char nlen, unsigned char data *pdt)
 153          {
 154   1              I2CStart();
 155   1              I2CSendByte(WRITEMODE);
 156   1              WaitAck();
 157   1              I2CSendByte(nadd);
 158   1              WaitAck();
 159   1              while(nlen > 0){
 160   2                      I2CSendByte(*pdt);
 161   2                      WaitAck();
 162   2                      pdt++;
 163   2                      nlen--;
 164   2                      d1ms(50);
 165   2              }
 166   1              I2CStop();
 167   1              d1ms(200);
 168   1      }


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

C51 COMPILER V7.08   I2C                                                                   09/20/2007 18:03:20 PAGE 4   


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

⌨️ 快捷键说明

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