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

📄 wr_flash.lst

📁 此源码为商用的电力抄表系统的从机端源程序。通过电力载波模块
💻 LST
字号:
C51 COMPILER V7.09   WR_FLASH                                                              01/12/2007 09:29:50 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE WR_FLASH
OBJECT MODULE PLACED IN wr_flash.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wr_flash.c ROM(COMPACT) OPTIMIZE(9,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND P
                    -REPRINT

line level    source

   1          /******************************************************************
   2          * 文件名:WR_FLASH.C
   3          * 功能:实现FLASH读写功能
   4          * 日期:2005.6.16
   5          * 说明:
   6          ******************************************************************/ 
   7          #include <REG922.H>
   8          
   9          #define uint  unsigned int
  10          #define uchar unsigned char 
  11          
  12          
  13          /* 定义页宽度屏蔽字(16字节时为0x0F,64字节时为0x3F) */
  14          #define  PAGE_SIZE      0x3F
  15          
  16          /* 定义FLASH控制命令字 */
  17          #define  LOAD           0x00            /* 加载数据     */
  18          #define  PROG           0x48            /* 编程             */
  19          #define  ERS_PROG       0x68            /* 擦除编程     */
  20          #define  ERS_P          0x70            /* 擦除页               */
  21          
  22          
  23          /******************************************************************
  24          * 名称:FLASH_ReadNByte
  25          * 功能:指定FLASH起始地址,读多字节数据
  26          * 入口参数:addr                指定的起始地址
  27          *          dat_buf      保存数据的缓冲区指针
  28          *                  no           要写入数据个数
  29          * 出口参数:无
  30          ******************************************************************/
  31          
  32          void  FLASH_ReadNByte(uint addr, uchar *dat_buf, uchar no)
  33          {  uchar code *readp;
  34   1         if(0==no) return;
  35   1         readp = addr;                                // 设置读取的地址
  36   1         for(; no>0; no--)
  37   1         {  *dat_buf = *readp;                // 读取数据
  38   2                dat_buf++;                    
  39   2                readp++;                              // 指向下一地址
  40   2         }  
  41   1      }
  42          
  43          
  44          
  45          /******************************************************************
  46          * 名称:FLASH_ErasePage
  47          * 功能:页擦除
  48          * 入口参数:addr                指定待擦除页内的地址
  49          * 出口参数:返回0时表示操作错误
  50          ******************************************************************/
  51          /*
  52          bit  FLASH_ErasePage(uint addr)
  53          {  FMADRH = addr>>8;
  54             FMADRL = addr&0xFF;
C51 COMPILER V7.09   WR_FLASH                                                              01/12/2007 09:29:50 PAGE 2   

  55             FMCON = ERS_P;
  56             
  57             if( (FMCON&0x0F)!=0x00 ) return(0);
  58                   else return(1);
  59          }
  60          */
  61          /******************************************************************
  62          * 名称:FLASH_WriteNByte
  63          * 功能:指定FLASH起始地址,写多字节数据
  64          * 入口参数:addr                指定的起始地址
  65          *          dat_buf      待写入的数据缓冲区指针
  66          *                  no           要写入数据个数
  67          * 出口参数:返回0时表示操作错误
  68          ******************************************************************/
  69          bit  FLASH_WriteNByte(uint addr, uchar  *dat_buf, uchar no)
  70          { 
  71   1         if(0==no) return(0);
  72   1         
  73   1         FMCON = LOAD;                        // 设置加载数据命令  
  74   1         FMADRH = addr>>8;                    // 设置写入地址
  75   1         FMADRL = addr&0xFF;
  76   1         while(1)
  77   1         {  FMDATA = *dat_buf;                // 写入数据
  78   2                dat_buf++;                    // 指向下一个待写入的数据
  79   2                addr++;                               
  80   2                no--;
  81   2                if(0==no) break;                      // 判断是否写完所有数据,若是则退出
  82   2                
  83   2              }
  84   1         FMCON = ERS_PROG;                    // 擦除编程
  85   1         if( (FMCON&0x0F)!=0x00 ) return(0);          
  86   1               else  return(1);
  87   1      }
  88          
  89          /******************************************************************
  90          * 名称:FLASH_WriteByte
  91          * 功能:指定FLASH地址,写单字节数据
  92          * 入口参数:addr                指定的地址
  93          *          dat          待写入的数据
  94          * 出口参数:返回0时表示操作错误
  95          ******************************************************************/
  96          /******************************************************************
  97          * 名称:FLASH_WriteByte
  98          * 功能:指定FLASH地址,写单字节数据
  99          * 入口参数:addr                指定的地址
 100          *          dat          待写入的数据
 101          * 出口参数:返回0时表示操作错误
 102          ****************************************************************** / 
 103          bit  FLASH_WriteByte(uint addr, uchar dat)
 104          {  FMCON = LOAD;                // 设置加载数据命令  
 105             FMADRH = addr>>8;            // 设置写入地址
 106             FMADRL = addr&0xFF;          
 107             FMDATA = dat;                // 写入数据
 108             FMCON = ERS_PROG;            // 擦除编程
 109             
 110             if( (FMCON&0x0F)!=0x00 ) return(0);
 111               else return(1);
 112          }
 113          
 114          /******************************************************************
 115          * 名称:FLASH_ReadByte
 116          * 功能:指定FLASH地址,读单字节数据
C51 COMPILER V7.09   WR_FLASH                                                              01/12/2007 09:29:50 PAGE 3   

 117          * 入口参数:addr                指定的地址
 118          * 出口参数:返回值即是读出的数据
 119          ****************************************************************** /
 120          uint  FLASH_ReadByte(uint addr)
 121          {  uint  code *readp;
 122          
 123             readp = addr;
 124             return(*readp);
 125          }
 126          
 127          
 128          
 129          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* /
 130          
 131          
 132          !!!!!!重复特别注意:写表的地址必须从串口写入才有效!!!!!
 133                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 134          
 135          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
 136          
 137          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     88    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   IDATA SIZE       =   ----    ----
   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 + -