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

📄 stc_flash.lst

📁 一个电子灸疗器的源码。 一个电子灸疗器的源码。
💻 LST
字号:
C51 COMPILER V7.07   STC_FLASH                                                             09/27/2007 07:17:46 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE STC_FLASH
OBJECT MODULE PLACED IN stc_flash.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE EromLIB\stc_flash.c BROWSE DEBUG OBJECTEXTEND PRINT(.\stc_flash.lst) OBJECT
                    -(stc_flash.obj)

stmt level    source

   1          /****************************************************************
   2          //MCS-51单片机底层EEPROM操作库。
   3          //只在STC89C52单片机上实验过
   4          
   5          //create by changshengwuji 
   6          //email: netspider@163.com
   7          //qq:    450353168
   8          //2006.05.03
   9          ****************************************************************/
  10          //#include "define_stc_flash.h"
  11          #include "../EromINC/MCS_X51.H"
  12          #include<intrins.h>
  13          bit gint;
  14          /*************************************************
  15          //-----使能IAP----------------
  16          *************************************************/
  17          void flsh_en()
  18          {
  19   1              gint = EA;
  20   1              INT_GLOBAL(0);  //DISABLE INTERUPT
  21   1      
  22   1              set_flsh_wait;  //set wait time
  23   1              set_flsh_en;    //enable flash operate
  24   1      }
  25          /**************************************************
  26          //停止IAP
  27          **************************************************/
  28          void flsh_ds()
  29          {
  30   1              set_flsh_ds;            //disable flash operate
  31   1              set_flsh_trig(0);       //dis trig
  32   1              INT_GLOBAL(gint);       //return global int
  33   1      }
  34          
  35          /*从flash中读出一个字节返回*/   
  36          UINT8 flsh_rd_byte(UINT16 addx)
  37          {
  38   1              set_flsh_addr(addx);
  39   1              flsh_wr_cmd(CMD_READ);
  40   1          set_flsh_trig(TRIG1);
  41   1              set_flsh_trig(TRIG2);
  42   1              _nop_();
  43   1              return(flsh_rd_data);
  44   1      }
  45          /******************************************
  46          //从一个扇区内读出一串数据。
  47          //传送参数:扇区内地址,读出个数,读出地址
  48          ********************************************/
  49          bit flsh_sector_rd(UINT16 addx,UINT8 num,UINT8 *p)
  50          {
  51   1      UINT8 i;
  52   1              if(num > USED_SPACE)
  53   1                      return(0);                      //超出扇区范围,退出
  54   1              flsh_en();
C51 COMPILER V7.07   STC_FLASH                                                             09/27/2007 07:17:46 PAGE 2   

  55   1              for(i = 0;i < num;i++)
  56   1              {
  57   2                      *p=flsh_rd_byte(addx + i);      
  58   2                      p++;
  59   2              }
  60   1              flsh_ds();              //禁止iap操作
  61   1              return(1);
  62   1      }
  63          
  64          /***********************************************
  65          //扇区擦除
  66          ***********************************************/
  67          void flsh_sector_earse(UINT16 addx)
  68          {
  69   1      UINT16 sec_addr = 0xfe00;
  70   1              sec_addr &= addx;        //取得扇区首地址
  71   1              
  72   1              set_flsh_addr(sec_addr);
  73   1              flsh_en();
  74   1              flsh_wr_cmd(CMD_SES);   //扇区擦除命令
  75   1              set_flsh_trig(TRIG1);
  76   1              set_flsh_trig(TRIG2);
  77   1              _nop_();
  78   1              flsh_ds();
  79   1      }
  80          /***********************************************************
  81          // 写一个字节并校验,如果写正确,返回1,否则返回0 
  82          ***********************************************************/
  83          bit flsh_wr_verify(UINT16 addx,UINT8 dax)
  84          {
  85   1              set_flsh_addr(addx);
  86   1              flsh_wr_cmd(CMD_PGM);
  87   1              flsh_wr_data(dax);                       //写数据到iap的数据寄存器。
  88   1              set_flsh_trig(TRIG1);
  89   1              set_flsh_trig(TRIG2);
  90   1              _nop_();
  91   1              flsh_wr_data(0);                        //使iap的数据寄存器改变,以便回读。
  92   1              flsh_wr_cmd(CMD_READ);
  93   1              set_flsh_trig(TRIG1);
  94   1              set_flsh_trig(TRIG2);
  95   1              _nop_();
  96   1              if(flsh_rd_data == dax)
  97   1                      return(1);
  98   1              else
  99   1                      return(0);
 100   1      }
 101          /**************************************************************************
 102          //写一个扇区    
 103          //传送16位的目的地址,最好从扇区首地址开始,8位的数据长度,源数据的指针
 104          **************************************************************************/
 105          bit flsh_sector_wr(UINT16 addx,UINT8 num,UINT8 * pdax)
 106          {
 107   1      UINT8 i;
 108   1      UINT16 addr;
 109   1              if(num > USED_SPACE)
 110   1                      return(0);                              //超出扇区范围退出
 111   1              addr = addx;
 112   1              flsh_sector_earse(addx);        //擦除目的扇区
 113   1              flsh_en();
 114   1              for(i=0;i<num;i++)
 115   1              {
 116   2                      if(!flsh_wr_verify(addr,*pdax))
C51 COMPILER V7.07   STC_FLASH                                                             09/27/2007 07:17:46 PAGE 3   

 117   2                      {
 118   3                              flsh_ds();      //操作出错,返回前禁止flash操作
 119   3                              return(0);
 120   3                      }
 121   2                      addr++;
 122   2                      pdax++;
 123   2              }
 124   1              flsh_ds();              //写完毕禁止FLASH 操作
 125   1              return(1);
 126   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    260    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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