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

📄 eeprom.lst

📁 stc-isp开发板驱动程序
💻 LST
字号:
C51 COMPILER V7.06   EEPROM                                                                09/13/2005 20:39:38 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 OMF2 BROWSE DEBUG

stmt level    source

   1          #include <config.h>
   2          
   3          #define IN_EEPROM
   4          
   5          #if  EEPROM_USING
   6          
   7          #define  ISP_IAP_BYTE_READ     0x01;//字节读
   8          #define  ISP_IAP_BYTE_PROGRAM  0x02;//字节编程, 前提是该字节是空,0FFh
   9          #define  ISP_IAP_SECTOR_ERASE  0x03;//扇区擦除, 要某字节为空,要擦一扇区
  10          #define  WAIT_TIME             0x01;//设置等待时间,30MHz 以下0,24M 以下1,
  11          #define  ENABLE_ISP            0x81;// <24MHz
  12          
  13          #define   EEPROM_MAX_BUFFER    10
  14          unsigned char xdata  eeprom_buffer[EEPROM_MAX_BUFFER];
  15          //-----------------------------------------------------------------------------
  16          // ----eeprom的读,需要指定地址,每次固定读入一定
  17          void eeprom_read(void)
  18          {
  19   1      //MOV ISP_ADDRH, #BYTE_ADDR_HIGH ;送地址高字节
  20   1      //MOV ISP_ADDRL, #BYTE_ADDR_LOW ;送地址低字节
  21   1      //MOV ISP_CONTR, #WAIT_TIME ;设置等待时间
  22   1      //ORL ISP_CONTR, #10000000B ;允许ISP/IAP 操作
  23   1      //MOV ISP_CMD, #ISP_IAP_BYTE_READ ;送字节读命令,命令不需改变时,不需重新送命令
  24   1      //MOV ISP_TRIG, #46h ;先送46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此
  25   1      //MOV ISP_TRIG, #0B9h ;送完B9h 后,ISP/IAP 命令立即被触发起动
  26   1       unsigned char idata   i=0x00;
  27   1      
  28   1       for(i=0x00;i<EEPROM_MAX_BUFFER;i++)
  29   1          { ISP_ADDRH  = 0x28;                //选择第二扇区
  30   2                ISP_ADDRL  = i;
  31   2                ISP_CONTR  = WAIT_TIME;
  32   2                ISP_CONTR |= 0x80;
  33   2            ISP_CMD    = ISP_IAP_BYTE_READ;
  34   2                EA = 0x00;
  35   2                ISP_TRIG   = 0x46;
  36   2                ISP_TRIG   = 0xb9;
  37   2                EA = 0x01;
  38   2      
  39   2                eeprom_buffer[i]=ISP_DATA; 
  40   2               }       
  41   1      // -----------关闭ISP/IAP功能---------------
  42   1        ISP_CONTR = 0x00;
  43   1        ISP_CMD   = 0x00;
  44   1        ISP_TRIG  = 0x00;
  45   1        ISP_ADDRH = 0x00;
  46   1        ISP_ADDRL = 0x00;
  47   1      }
  48          
  49          void eeprom_write(void)  //eeprom写入
  50          {
  51   1      //MOV ISP_DATA, #ONE_DATA ;送字节编程数据到ISP_DATA
  52   1      //MOV ISP_ADDRH, #BYTE_ADDR_HIGH ;送地址高字节
  53   1      //MOV ISP_ADDRL, #BYTE_ADDR_LOW ;送地址低字节
  54   1      //MOV ISP_CONTR, #WAIT_TIME ;设置等待时间
  55   1      //ORL ISP_CONTR, #10000000B ;允许ISP/IAP 操作
C51 COMPILER V7.06   EEPROM                                                                09/13/2005 20:39:38 PAGE 2   

  56   1      //MOV ISP_CMD, #ISP_IAP_BYTE_PROGRAM ;送字节编程命令
  57   1      //MOV ISP_TRIG, #46h ;先送46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此
  58   1      //MOV ISP_TRIG, #0B9h ;送完B9h 后,ISP/IAP 命令立即被触发起动
  59   1      
  60   1       unsigned char idata   i=0x00;
  61   1      
  62   1       for(i=0x00;i<EEPROM_MAX_BUFFER;i++)
  63   1          { ISP_DATA=eeprom_buffer[i];
  64   2                ISP_ADDRH  = 0x28;                       //选择第二扇区
  65   2                ISP_ADDRL  = i;
  66   2                ISP_CONTR  = WAIT_TIME;
  67   2                ISP_CONTR |= 0x80;
  68   2            ISP_CMD    = ISP_IAP_BYTE_PROGRAM;
  69   2                EA = 0x00;
  70   2                ISP_TRIG   = 0x46;
  71   2                ISP_TRIG   = 0xb9;
  72   2                EA = 0x01;
  73   2               }       
  74   1      // -----------关闭ISP/IAP功能---------------
  75   1        ISP_CONTR = 0x00;
  76   1        ISP_CMD   = 0x00;
  77   1        ISP_TRIG  = 0x00;
  78   1        ISP_ADDRH = 0x00;
  79   1        ISP_ADDRL = 0x00;
  80   1      }
  81          
  82          void eeprom_earse(void)
  83          {
  84   1      //MOV ISP_ADDRH, #SECTOR_FIRST_BYTE_ADDR_HIGH ;送扇区起始地址高字节
  85   1      //MOV ISP_ADDRL, #SECTOR_FIRST_BYTE_ADDR_LOW ;送扇区起始地址低字节
  86   1      //MOV ISP_CONTR, #WAIT_TIME ;设置等待时间
  87   1      //ORL ISP_CONTR, #10000000B ;允许ISP/IAP
  88   1      //MOV ISP_CMD, #ISP_IAP_SECTOR_ERASE ;送扇区擦除命令,命令不需改变时,不需重新送命令
  89   1      //MOV ISP_TRIG, #46h ;先送46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此
  90   1      //MOV ISP_TRIG, #0B9h ;送完B9h 后,ISP/IAP 命令立即被触发起动
  91   1        unsigned char idata   i=0x00;
  92   1      
  93   1        ISP_ADDRH  = 0x28;
  94   1        ISP_ADDRL  = 0x80;    //指定该扇区的任何一个地址即可
  95   1        ISP_CONTR  = WAIT_TIME;
  96   1        ISP_CONTR |= 0x80;
  97   1        ISP_CMD    = ISP_IAP_SECTOR_ERASE;
  98   1        EA = 0x00;
  99   1        ISP_TRIG   = 0x46;
 100   1        ISP_TRIG   = 0xb9;
 101   1        EA = 0x01;    
 102   1          
 103   1      // -----------关闭ISP/IAP功能---------------
 104   1        ISP_CONTR = 0x00;
 105   1        ISP_CMD   = 0x00;
 106   1        ISP_TRIG  = 0x00;
 107   1        ISP_ADDRH = 0x00;
 108   1        ISP_ADDRL = 0x00;
 109   1      
 110   1      }
 111          
 112          // -----------------------------------------------------------------------------
 113          // ----- EEPROM的数据处理 ----------------------------------------------------
 114          unsigned char xdata eeprom_operatemode=0x01;
 115          void eeprom_process(void)
 116          {if(eeprom_operatemode==0x01)   //读出
 117   1         {eeprom_read();
C51 COMPILER V7.06   EEPROM                                                                09/13/2005 20:39:38 PAGE 3   

 118   2              if((eeprom_buffer[8]==0x55)&&(eeprom_buffer[9]==0xaa))
 119   2                {exhaust_number=eeprom_buffer[3]*1000+eeprom_buffer[2]*100+eeprom_buffer[1]*10+eeprom_buffer[0];
 120   3                 authorize_number=eeprom_buffer[7]*1000+eeprom_buffer[6]*100+eeprom_buffer[5]*10+eeprom_buffer[4];
 121   3                 eeprom_operatemode=0x00;
 122   3                 }
 123   2              else                                                                    //否则初始化
 124   2                 {exhaust_number=0x00;
 125   3                  authorize_number=1000;
 126   3                      eeprom_operatemode=0x00;
 127   3              }
 128   2         }
 129   1       else if(eeprom_operatemode==0x02)      //写入
 130   1               {eeprom_earse();
 131   2                        eeprom_buffer[0]=exhaust_number%10;
 132   2                eeprom_buffer[1]=(exhaust_number%100)/10;
 133   2                eeprom_buffer[2]=(exhaust_number%1000)/100;
 134   2                    eeprom_buffer[3]=exhaust_number/1000;
 135   2                    eeprom_buffer[4]=authorize_number%10;
 136   2                    eeprom_buffer[5]=(authorize_number%100)/10;
 137   2                    eeprom_buffer[6]=(authorize_number%1000)/100;
 138   2                    eeprom_buffer[7]=authorize_number/1000;
 139   2                        eeprom_buffer[8]=0x55;
 140   2                eeprom_buffer[9]=0xaa;
 141   2                eeprom_write();
 142   2                        eeprom_operatemode=0x00;
 143   2                   }
 144   1       }
 145          
 146          
 147          #endif
 148          
 149          
 150          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    569    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     11    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----       3
   BIT SIZE         =   ----    ----
   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 + -