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

📄 eeprom.lst

📁 基于c8051f020的应用
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   EEPROM                                                                06/25/2008 15:44:08 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN EEPROM.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe EEPROM.C DB OE

stmt level    source

   1          //********************************************************************************************************
             -******************
   2          #include <c8051F020.h>
   3          #include <stdio.h>
   4          #include <string.h>
   5          #include "HEAD.H"
   6          //********************************************************************************************************
             -******************
   7          void EEPROM_Init(void)
   8          {
   9   1              xdata unsigned char i;
  10   1      
  11   1              NowWellNum=0x00;
  12   1      
  13   1              for(i=0;i<MaxWellSaveNum;i++)
  14   1              {
  15   2                      if( (Read_Eeprom(0x400*i+HollDateLong)==0xA5) && (Read_Eeprom(0x400*i+HollDateLong+1)==0x5A) )
  16   2                      {
  17   3                              WellSaveStation[i]=0xAA;
  18   3                              NowWellNum++;
  19   3                      }
  20   2                      else
  21   2                      {
  22   3                              NowSaveWellAddr=i;
  23   3                      }
  24   2              }
  25   1              if(NowWellNum==MaxWellSaveNum)
  26   1              {
  27   2                      NowSaveWellAddr=0x00;
  28   2              }
  29   1              LCD_SHOW_WellSaveStation();
  30   1      
  31   1      }
  32          //********************************************************************************************************
             -******************
  33          void Start_I2C(void)
  34          {
  35   1              EE_SDA=1;       Some_nop(5);
  36   1              EE_SCL=1;       Some_nop(5);
  37   1              EE_SDA=0;       Some_nop(5);
  38   1              EE_SCL=0;       Some_nop(5);
  39   1      }
  40          //********************************************************************************************************
             -******************
  41          void Stop_I2C(void)
  42          {
  43   1              EE_SDA=0;       Some_nop(5);
  44   1              EE_SCL=1;       Some_nop(5);
  45   1              EE_SDA=1;       Some_nop(5);
  46   1      }
  47          //********************************************************************************************************
             -******************
  48          bit WriteEepromByet(unsigned char date)
  49          {
  50   1              bit  Ack_f;
C51 COMPILER V7.06   EEPROM                                                                06/25/2008 15:44:08 PAGE 2   

  51   1              xdata unsigned char i;
  52   1      
  53   1              for(i=0;i<8;i++)
  54   1              {
  55   2                      if((date<<i)&0x80)
  56   2                              EE_SDA=1;
  57   2                      else 
  58   2                              EE_SDA=0;
  59   2                      EE_SCL=1;       Some_nop(5);
  60   2                      EE_SCL=0;       Some_nop(5);
  61   2              }
  62   1              EE_SDA=1;       Some_nop(5);
  63   1              EE_SCL=1;       Some_nop(5);
  64   1              if(EE_SDA==1)
  65   1                      Ack_f=0;
  66   1          else
  67   1                      Ack_f=1;
  68   1              EE_SCL=0;       Some_nop(5);
  69   1      
  70   1              return Ack_f;
  71   1      }
  72          //********************************************************************************************************
             -******************
  73          unsigned char ReadEepromBaye(void)
  74          {
  75   1              xdata unsigned char date;
  76   1              xdata unsigned char i;
  77   1      
  78   1              date=0;
  79   1              EE_SDA=1;       Some_nop(5);
  80   1              for(i=0;i<8;i++)
  81   1              {
  82   2                      EE_SCL=0;       Some_nop(5);
  83   2                      EE_SCL=1;       Some_nop(5);
  84   2                      date<<=1;
  85   2                      if(EE_SDA==1)
  86   2                              date++;
  87   2              }
  88   1              EE_SCL=0;       Some_nop(5);
  89   1              
  90   1              return(date);
  91   1      }
  92          //********************************************************************************************************
             -******************
  93          void Ack_I2C(bit a)
  94          {
  95   1              EE_SDA=a;   Some_nop(5);
  96   1              EE_SCL=1;       Some_nop(5);
  97   1              EE_SCL=0;       Some_nop(5);
  98   1      }
  99          //********************************************************************************************************
             -******************
 100          bit Write_Eeprom(unsigned int add,unsigned char date)
 101          {
 102   1              xdata unsigned char addh,addl;
 103   1              
 104   1              if(add >= EEPROM_CAP)
 105   1                      add-=EEPROM_CAP;
 106   1              addh=add>>8;
 107   1              addl=add;       
 108   1      
 109   1              Start_I2C();
C51 COMPILER V7.06   EEPROM                                                                06/25/2008 15:44:08 PAGE 3   

 110   1              if(!WriteEepromByet(0xA0))return(0);
 111   1              if(!WriteEepromByet(addh))return(0);
 112   1              if(!WriteEepromByet(addl))return(0);
 113   1              if(!WriteEepromByet(date))return(0);
 114   1              Stop_I2C();
 115   1              Delay_ms(100);
 116   1      
 117   1              return 1;
 118   1      }
 119          //********************************************************************************************************
             -******************
 120          unsigned char Read_Eeprom(unsigned int add)
 121          {
 122   1              xdata unsigned char addh,addl;
 123   1              xdata unsigned char date;
 124   1              
 125   1              if(add >= EEPROM_CAP)
 126   1                      add-=EEPROM_CAP;
 127   1              addh=add>>8;
 128   1              addl=add;       
 129   1      
 130   1              Start_I2C();
 131   1              if(!WriteEepromByet(0xA0))return(0);
 132   1              if(!WriteEepromByet(addh))return(0);
 133   1              if(!WriteEepromByet(addl))return(0);
 134   1              Start_I2C();
 135   1              if(!WriteEepromByet(0xA1))return(0);
 136   1              date=ReadEepromBaye();
 137   1              Ack_I2C(1);
 138   1              Stop_I2C();
 139   1      
 140   1              return(date);
 141   1      }
 142          //********************************************************************************************************
             -******************
 143          void Some_nop(unsigned char num)
 144          {
 145   1              xdata unsigned char i;
 146   1      
 147   1              for(i=0;i<num;i++);
 148   1      }
 149          //********************************************************************************************************
             -******************
 150          bit Write_Well_date(unsigned int add,unsigned char * date,unsigned int D_Long)
 151          {
 152   1              xdata unsigned char addh,addl;
 153   1              xdata unsigned int  i,j;
 154   1              
 155   1              if(add >= EEPROM_CAP)
 156   1                      add-=EEPROM_CAP;
 157   1              
 158   1              for(j=0;j<D_Long/64+1;j++)
 159   1              {
 160   2                      addh=(add+j*64)>>8;
 161   2                      addl=add+j*64;
 162   2                      Start_I2C();
 163   2                      if(!WriteEepromByet(0xA0))return(0);
 164   2                      if(!WriteEepromByet(addh))return(0);
 165   2                      if(!WriteEepromByet(addl))return(0);
 166   2                      for(i=0;i<64;i++)
 167   2                      {
 168   3                              if( (j*64+i) >= D_Long)break;
C51 COMPILER V7.06   EEPROM                                                                06/25/2008 15:44:08 PAGE 4   

 169   3                              if(!WriteEepromByet(date[j*64+i]))return(0);
 170   3                              if(i%10==0x00)
 171   3                              {
 172   4                                      sprintf(Str_Buffer,":%3.0f/100    ",(float)((float)(j*64+i)*100/HollDateLong));
 173   4                                      //LCD_DispStr(Str_Buffer,32,5);
 174   4                                      LCD_DispStr(Str_Buffer,40,34);
 175   4                                      disp_chn_str("比值",38,10,12,1);
 176   4                                      Display_Data();
 177   4                              }
 178   3                      }
 179   2                      Stop_I2C();

⌨️ 快捷键说明

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