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

📄 eeprom.lst

📁 pdh控制程序
💻 LST
字号:
C51 COMPILER V7.20   EEPROM                                                                02/20/2006 10:14:06 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN .\output\eeprom.obj
COMPILER INVOKED BY: D:\keil c51 v7.09\C51\BIN\C51.EXE eeprom.c BROWSE DEBUG OBJECTEXTEND PRINT(.\list\eeprom.lst) OBJEC
                    -T(.\output\eeprom.obj)

line level    source

   1          #ifndef _EEPROM_C_
   2          #define _EEPROM_C_
   3          
   4          #include "api.h"
   5          
   6          #if _LCD_MENU_
   7          
   8          /*E2PROM的读写操作*/
   9          void _delay(void)
  10          {
  11   1              _nop_();_nop_();
  12   1      }
  13          
  14          
  15          void E2PROM_Delay()
  16          {
  17   1              BYTE delaytime;
  18   1      
  19   1              for(delaytime=0x00;delaytime<0xf0;delaytime++)
  20   1                      _nop_();
  21   1              for(delaytime=0x00;delaytime<0xf0;delaytime++)
  22   1                      _nop_();
  23   1              for(delaytime=0x00;delaytime<0xf0;delaytime++)
  24   1                      _nop_();
  25   1              for(delaytime=0x00;delaytime<0x80;delaytime++)
  26   1                      _nop_();
  27   1      }
  28          
  29          void I2C_start(void)
  30          {
  31   1              SDA=HIGH;       _delay();
  32   1              SCL=HIGH;       _delay();       _nop_();
  33   1              SDA=LOW;        _delay();
  34   1              SCL=LOW;        _delay();
  35   1      }
  36          
  37          void I2C_stop(void)
  38          {
  39   1              SDA=LOW;        _delay();
  40   1              SCL=HIGH;       _delay();       _nop_();
  41   1              SDA=HIGH;       _delay();
  42   1              SCL=LOW;        _delay();
  43   1      }
  44          
  45          BYTE I2C_clock(void)
  46          {
  47   1              BYTE sample;
  48   1              SCL     = HIGH; _delay();       _nop_();
  49   1              sample = SDA;
  50   1              SCL     = LOW;  _delay();
  51   1              return sample;
  52   1      }
  53          
  54          BYTE I2C_send(BYTE I2C_data)
C51 COMPILER V7.20   EEPROM                                                                02/20/2006 10:14:06 PAGE 2   

  55          {
  56   1              register BYTE i;
  57   1              for(i=0; i<8; i++)
  58   1              {
  59   2                      SDA     = (I2C_data&0x80) ? HIGH : LOW;
  60   2                      I2C_data <<= 1;
  61   2                      I2C_clock();
  62   2              }
  63   1              SDA     = HIGH;
  64   1              return ~I2C_clock();
  65   1      }
  66          
  67          BYTE I2C_receive(void)
  68          {
  69   1              register BYTE i;
  70   1              BYTE I2C_data = 0;
  71   1      
  72   1              for(i=0; i<8; i++)
  73   1              {
  74   2                      I2C_data <<= 1;
  75   2                      if(I2C_clock())
  76   2                              I2C_data++;
  77   2              }
  78   1              return I2C_data;
  79   1      }
  80          
  81          void I2C_Ack(void)
  82          {
  83   1              SDA     = LOW;
  84   1              I2C_clock();
  85   1              SDA     = HIGH;
  86   1      }
  87          
  88          BYTE I2C_ReadData(WORD MemAddr, WORD DatLen, BYTE* DatBuf)
  89          {
  90   1              BYTE idata I2C_DevAddr = 0, res = 0,temp;
  91   1              WORD idata i;
  92   1      
  93   1              I2C_start();
  94   1              I2C_DevAddr = 0xa0;
  95   1              I2C_DevAddr |= ((MemAddr/0x100)&0x07)<<1;
  96   1              if(I2C_send(I2C_DevAddr) && I2C_send((BYTE)(MemAddr&0xff)))
  97   1              {
  98   2                      I2C_start();
  99   2                      I2C_DevAddr |= 0x01;
 100   2                      if(I2C_send(I2C_DevAddr))
 101   2                      {
 102   3                              for(i=0; i<DatLen; i++)
 103   3                              {
 104   4                                      DatBuf[i] = I2C_receive();
 105   4                                      temp= DatBuf[i] ;
 106   4                                      if(i==DatLen-1)
 107   4                                      {
 108   5                                              SDA     = HIGH;
 109   5                                              I2C_clock();
 110   5                                              I2C_stop();
 111   5                                      }
 112   4                                      else
 113   4                                              I2C_Ack();
 114   4                              }
 115   3                              res     = 1;
 116   3                      }
C51 COMPILER V7.20   EEPROM                                                                02/20/2006 10:14:06 PAGE 3   

 117   2                      else    res     = 0;
 118   2              }
 119   1              else    res     = 0;
 120   1              if(res==0)      I2C_stop();
 121   1              return res;
 122   1      }
 123          
 124          BYTE I2C_Write16BData(WORD MemAddr, BYTE DatLen, BYTE* DatBuf)
 125          {
 126   1              BYTE idata I2C_DevAddr = 0, res = 0, i = 0;
 127   1      
 128   1              I2C_start();
 129   1              I2C_DevAddr     = 0xa0;
 130   1              I2C_DevAddr |= ((MemAddr/0x100)&0x07)<<1;
 131   1              if(I2C_send(I2C_DevAddr) && I2C_send((BYTE)(MemAddr&0xff)))
 132   1              {
 133   2                      do      res     = I2C_send(DatBuf[i++]);
 134   2                      while(res && i<DatLen);
 135   2                      I2C_stop();
 136   2              }
 137   1              else    res     = 0;
 138   1              if(res==0)      I2C_stop();
 139   1              return res;
 140   1      }
 141          
 142          void I2C_WriteData(WORD MemAddr, WORD DatLen, BYTE* DatBuf)
 143          {
 144   1              WORD idata bMemAddr = 0;
 145   1          BYTE idata i = 0 , Temp;
 146   1              BYTE idata iCnt, DataCnt, DataiCnt, jCnt;
 147   1              BYTE idata DataBuff[0x10];
 148   1      
 149   1              DataCnt = (BYTE)(DatLen/0x10);
 150   1              DataiCnt = (BYTE)(DatLen%0x10);
 151   1              jCnt = 0;
 152   1              for(iCnt=0; iCnt<(DataCnt+1); iCnt++,jCnt++)
 153   1              {
 154   2                      bMemAddr = MemAddr+iCnt*0x10;
 155   2                      if(jCnt < DataCnt)
 156   2                              Temp = 0x10;
 157   2                      else    Temp = DataiCnt;
 158   2      
 159   2                      for(i=0; i<Temp; i++)
 160   2                              DataBuff[i] = DatBuf[i+iCnt*0x10];
 161   2                      I2C_Write16BData(bMemAddr, Temp, DataBuff);
 162   2                      E2PROM_Delay();//16字节需要一个10ms延时
 163   2                      E2PROM_Delay();//16字节需要一个10ms延时
 164   2              }
 165   1      }
 166          
 167          /*E2PROM读写操作*/
 168          
 169          #endif
 170          
 171          #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    621    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.20   EEPROM                                                                02/20/2006 10:14:06 PAGE 4   

   DATA SIZE        =   ----      17
   IDATA SIZE       =   ----      32
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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