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

📄 eeprom.lst

📁 用51单片机实现IR解码
💻 LST
字号:
C51 COMPILER V8.02   EEPROM                                                                09/28/2006 13:57:54 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE eeprom.c OMF2 BROWSE DEBUG

line level    source

   1          /**********************************************************************
   2          *File           Name            :       eeprom.c
   3          *Creat          Time            :       2002/02/11
   4          *Program        Author          :       mqli
   5          *File           Discreption     :
   6          *        
   7          ************************************************************************/
   8          
   9          
  10          #include "common.h"
  11          #include "Var.h"
  12          #include "main.h"
  13          #include "eeprom.h"
  14          
  15          
  16          
  17          
  18          
  19          
  20          
  21          
  22          BOOL IICWriteWaitAcknowlodge(void);
  23          
  24          unsigned char IICrxbyte(void);
  25          
  26          void IICstart(void);
  27          void IICstop(void);
  28          void IICReadAcknowledge(void);
  29          void IICtxbyte(U8 DateByte);
  30          void Comfirm_Var_Validity(U8 *var_address,U8 Max_Value,U8 Min_Value, U8 Normal_Value);
  31          
  32          
  33          
  34          void IICstart(void)
  35          {
  36   1      
  37   1      #if 0
                    EEPROM_CLK_1;
                      EEPROM_DATA_1;
                      Delay_xuS(1);
                      EEPROM_DATA_0;
                      Delay_xuS(1);
                      
              #else
  45   1      
  46   1      
  47   1          EEPROM_CLK_0;
  48   1              Delay_xuS(1);
  49   1              EEPROM_DATA_1;
  50   1              Delay_xuS(1);
  51   1              EEPROM_CLK_1;
  52   1              Delay_xuS(1);
  53   1              EEPROM_DATA_0;
  54   1              Delay_xuS(1);
  55   1              EEPROM_CLK_0;
C51 COMPILER V8.02   EEPROM                                                                09/28/2006 13:57:54 PAGE 2   

  56   1              Delay_xuS(1);
  57   1      #endif
  58   1              
  59   1      }
  60          
  61          void IICstop(void)
  62          {
  63   1      #if 0
                     EEPROM_CLK_0;
                      EEPROM_DATA_0;
                      Delay_xuS(1);
                      EEPROM_CLK_1;
                      Delay_xuS(1);
                      EEPROM_DATA_1;
              
              #else
  72   1              Delay_xuS(1);
  73   1              EEPROM_CLK_0;
  74   1              Delay_xuS(1);
  75   1              EEPROM_DATA_0;
  76   1              Delay_xuS(1);
  77   1              EEPROM_CLK_1;
  78   1              Delay_xuS(1);
  79   1              EEPROM_DATA_1;
  80   1              Delay_xuS(1);
  81   1              #endif
  82   1      }
  83          void IICReadAcknowledge(void)
  84          {
  85   1              EEPROM_CLK_0;
  86   1              EEPROM_DATA_0;
  87   1              Delay_xuS(1);
  88   1              EEPROM_CLK_1;
  89   1              Delay_xuS(1);
  90   1              EEPROM_CLK_0;
  91   1              EEPROM_DATA_1;
  92   1      }
  93          
  94          BOOL IICWriteWaitAcknowlodge(void)
  95          {
  96   1      
  97   1              BOOL WriteSuccessFlag=FALSE;
  98   1      
  99   1              EEPROM_CLK_1;
 100   1              WriteSuccessFlag=(EEPROM_DATA)?FALSE:TRUE;
 101   1              EEPROM_CLK_0;
 102   1              if ( WriteSuccessFlag==FALSE )
 103   1              {
 104   2                      Delay_xuS(1);
 105   2              }
 106   1              return WriteSuccessFlag;
 107   1      
 108   1      }
 109          
 110          void IICtxbyte(U8 DataByte)
 111          {
 112   1      
 113   1         EX_DATA U8 BitMast;
 114   1      
 115   1              
 116   1             for(BitMast=0x80;BitMast>0;BitMast>>=1)
 117   1        
C51 COMPILER V8.02   EEPROM                                                                09/28/2006 13:57:54 PAGE 3   

 118   1             
 119   1                 {
 120   2              
 121   2                       if (DataByte&BitMast)
 122   2                              EEPROM_DATA_1;
 123   2                       else
 124   2                              EEPROM_DATA_0;
 125   2                      Delay_xuS(1);
 126   2                      Delay_xuS(1);
 127   2                      EEPROM_CLK_1;
 128   2                      Delay_xuS(1);
 129   2                      Delay_xuS(1);
 130   2                      EEPROM_CLK_0;
 131   2                 }
 132   1                      EEPROM_DATA_1;
 133   1      //      IIC_SDA=1;                              // data high, ask for acknowledge signal
 134   1      //      IIC_SCL=1;                              // clock high
 135   1      //      btmask=IIC_SDA;                 // btmask=0:ok,otherwise not ok.
 136   1      //      IIC_SCL=0;                              // clock low
 137   1      //      return btmask;
 138   1      
 139   1      
 140   1      }
 141          
 142          unsigned char IICrxbyte(void)
 143          {
 144   1      EX_DATA U8 ReceiveByte=0,i;
 145   1         EEPROM_DATA_1;       
 146   1         for(i=0;i<8;i++)
 147   1         {
 148   2                 EEPROM_CLK_1;
 149   2                      ReceiveByte<<=1;
 150   2            ReceiveByte|=EEPROM_DATA;
 151   2                EEPROM_CLK_0;
 152   2           Delay_xuS(1);
 153   2             
 154   2         }
 155   1              return ReceiveByte;
 156   1              
 157   1      
 158   1      }
 159           
 160          /* Read EEPROM content */
 161          void ReadXEEprom(U8 * bufptr, U16 eepadr, U8 cnt)
 162          {
 163   1      DE_DATA unsigned char errcnt;
 164   1      
 165   1              errcnt=0;
 166   1              while(1)
 167   1              {
 168   2                      IICstart();                                             //  IIC start condition
 169   2                      IICtxbyte(0xa0+((U8)(eepadr/128)&0x0e));        // transmit EEPROM IIC address  //the eeprom is below 512 bits
 170   2                      if (IICWriteWaitAcknowlodge()==TRUE) break;
 171   2                      errcnt++;
 172   2                      if (errcnt>5)
 173   2                      {
 174   3                              IICstop();
 175   3                              return;
 176   3                      }
 177   2              }
 178   1      
 179   1              IICtxbyte((U8)eepadr);
C51 COMPILER V8.02   EEPROM                                                                09/28/2006 13:57:54 PAGE 4   

 180   1              IICWriteWaitAcknowlodge();                                              // acknowledge
 181   1      
 182   1              IICstart();                                                     //  IIC start condition
 183   1              IICtxbyte(0xa1+((U8)(eepadr/128)&0x0e));        // transmit EEPROM IIC address
 184   1              IICWriteWaitAcknowlodge();                                              // acknowledge
 185   1      
 186   1              while (1)
 187   1              {
 188   2                      *bufptr=0;
 189   2                      *bufptr=IICrxbyte();
 190   2                      cnt--;
 191   2                      if (cnt==0) break;
 192   2                      IICReadAcknowledge();                                           // acknowledge
 193   2                      bufptr++;
 194   2              }
 195   1              Delay_xuS(1);
 196   1              IICstop();
 197   1      }
 198          
 199          void WriteEEprom(U16 eeaddr, U8 dat)
 200          {
 201   1      DE_DATA unsigned char errcnt;
 202   1      
 203   1              errcnt=0;
 204   1              while(1)
 205   1              {
 206   2                      IICstart();                                             //  IIC start condition
 207   2                      IICtxbyte(0xa0+((U8)(eeaddr/128)&0x0e));        // transmit EEPROM IIC address  //the eeprom is below 512 bits
 208   2                      if (IICWriteWaitAcknowlodge()==TRUE) break;
 209   2                      errcnt++;
 210   2                      if (errcnt>5)
 211   2                      {
 212   3                              IICstop();
 213   3                              return;
 214   3                      }
 215   2              }
 216   1      
 217   1      /*      IICtxbyte((U8)eepadr);
 218   1              IICstart();                                                                     //  IIC start condition
 219   1              IICtxbyte(0xa0+((U8)(eeaddr/128)&0x0e));                // transmit EEPROM IIC address
 220   1              IICWriteWaitAcknowlodge();*/                                    // acknowledge
 221   1              IICtxbyte((U8)eeaddr);                                          //write the address onchip
 222   1              IICWriteWaitAcknowlodge();                                      // acknowledge
 223   1              IICtxbyte(dat);                                                         // transmit EEPROM data
 224   1              IICWriteWaitAcknowlodge();                                      // acknowledge
 225   1              IICstop();                                                                      //  IIC stop condition
 226   1              Delay_xmS(10);
 227   1      }
 228          
 229          
 230          
 231          /*******************************************************
 232            for fast write fuction
 233            care that some chip limit the total bytes of one write cycle
 234            1K,2K=8   4K,8K,16K=16
 235          ************************************************************/
 236          
 237          
 238          void WriteXEEprom(U8 * bufptr, U16 eepadr, U8 cnt) 
 239          {
 240   1      DE_DATA unsigned char errcnt,temp;
 241   1      
C51 COMPILER V8.02   EEPROM                                                                09/28/2006 13:57:54 PAGE 5   

 242   1              errcnt=0;
 243   1              while(1)
 244   1              {
 245   2                      IICstart();                                             //  IIC start condition
 246   2                      IICtxbyte(0xa0+((U8)(eepadr/128)&0x0e));        // transmit EEPROM IIC address  //the eeprom is below 512 bits
 247   2                      if (IICWriteWaitAcknowlodge()==TRUE) break;
 248   2                      errcnt++;
 249   2                      if (errcnt>5)
 250   2                      {
 251   3                              IICstop();
 252   3                              return;
 253   3                      }
 254   2              }
 255   1              IICtxbyte((U8)eepadr);                                          //write the address onchip
 256   1              IICWriteWaitAcknowlodge();                                      // acknowledge
 257   1      
 258   1              while(cnt)
 259   1              {
 260   2             temp=*bufptr;
 261   2              IICtxbyte(temp);                                                                // transmit EEPROM data
 262   2              IICWriteWaitAcknowlodge();                                      // acknowledge
 263   2                      bufptr++;
 264   2                      cnt--;
 265   2              }       
 266   1              IICstop();                                                                      //  IIC stop condition
 267   1              Delay_xmS(10);
 268   1      }
 269          
 270          
 271          
 272          
 273          
 274          
 275          //save the preset var
 276          void Write_Preset_Channel_Information(U8 channel,U16 frequence,U8 radio_band,BOOL is_stereo)
 277          {
 278   1       WriteEEprom(EEPAddress_Preset_channal_Freq_Base+channel*2 ,(U8)(frequence) );
 279   1       WriteEEprom(EEPAddress_Preset_channal_Freq_Base+channel*2+1,(U8)(frequence>>8));
 280   1       WriteEEprom(EEPAddress_Preset_channal_Band_Base+channel,radio_band);
 281   1       WriteEEprom(EEPAddress_Preset_channal_Stereo_Base+channel,is_stereo);
 282   1       
 283   1      }
 284          
 285          
 286          
 287          void Check_EEProm_Var_Validity(void)
 288          {
 289   1      
 290   1      
 291   1      
 292   1      }
 293          
 294          
 295          void Comfirm_Var_Validity(U8 *var_address,U8 Max_Value,U8 Min_Value, U8 Normal_Value) 
 296          {
 297   1              if( (*var_address>Max_Value)||(*var_address<Min_Value) )
 298   1                *var_address=Normal_Value; 
 299   1      }
 300          
 301          
 302          
 303          
C51 COMPILER V8.02   EEPROM                                                                09/28/2006 13:57:54 PAGE 6   

 304          
 305          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    578    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       3
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      30
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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