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

📄 iap_lite.lst

📁 矿工定位系统单端
💻 LST
字号:
C51 COMPILER V7.05   IAP_LITE                                                              04/08/2005 13:54:34 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE IAP_LITE
OBJECT MODULE PLACED IN Iap_lite.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Iap_lite.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /******************************************************************
   2          * 文件名:IAP_LITE.C
   3          * 功能:实现IAP_Lite功能,进行字节擦除编程操作
   4          * 日期:2003.11.10
   5          * 说明:
   6          ******************************************************************/  
   7          #define  uint8   unsigned  char
   8          #define  uint16  unsigned  int
   9          
  10          /* 定义页宽度屏蔽字(16字节时为0x0F,64字节时为0x3F) */
  11          #define  PAGE_SIZE  0x3F
  12          
  13          /* IAP_Lite相关寄存器定义 */
  14          sfr     FMADRH  = 0xE7;
  15          sfr     FMADRL  = 0xE6;
  16          sfr     FMCON   = 0xE4;
  17          sfr     FMDATA  = 0xE5;
  18          
  19          /* 定义FLASH控制命令字 */
  20          #define  LOAD       0x00        /* 加载数据     */
  21          #define  PROG       0x48        /* 编程         */
  22          #define  ERS_PROG   0x68        /* 擦除编程     */
  23          #define  ERS_S      0x71        /* 擦除扇区     */
  24          #define  ERS_P      0x70        /* 擦除页       */
  25          
  26          
  27          /******************************************************************
  28          * 名称:FLASH_WriteByte
  29          * 功能:指定FLASH地址,写单字节数据
  30          * 入口参数:addr                指定的地址
  31          *          dat          待写入的数据
  32          * 出口参数:返回0时表示操作错误
  33          ******************************************************************/
  34          bit  FLASH_WriteByte(uint16 addr, uint8 dat)
  35          {  
  36   1         FMCON = LOAD;                // 设置加载数据命令  
  37   1         FMADRH = addr>>8;            // 设置写入地址
  38   1         FMADRL = addr&0xFF;          
  39   1         FMDATA = dat;                // 写入数据
  40   1         FMCON = ERS_PROG;            // 擦除编程
  41   1         
  42   1         if( (FMCON&0x0F)!=0x00 )
  43   1           { 
  44   2                FMCON = LOAD;         // 设置加载数据命令  
  45   2                FMADRH = addr>>8;             // 设置写入地址
  46   2                FMADRL = addr&0xFF;           
  47   2                FMDATA = dat;         // 写入数据
  48   2                FMCON = ERS_PROG;             // 擦除编程
  49   2                if( (FMCON&0x0F)!=0x00 )
  50   2                        { 
  51   3                          FMCON = LOAD;               // 设置加载数据命令  
  52   3                  FMADRH = addr>>8;           // 设置写入地址
  53   3                  FMADRL = addr&0xFF;         
  54   3                  FMDATA = dat;               // 写入数据
  55   3                  FMCON = ERS_PROG;           // 擦除编程
C51 COMPILER V7.05   IAP_LITE                                                              04/08/2005 13:54:34 PAGE 2   

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

 118          * 出口参数:无
 119          ******************************************************************
 120          void  FLASH_ReadNByte(uint16 addr, uint8 *dat_buf, uint8 no)
 121          {  uint8 code *readp;
 122                  
 123             if(0==no) return;
 124             readp = addr;                                // 设置读取的地址
 125             for(; no>0; no--)
 126             {  *dat_buf = *readp;                // 读取数据
 127                dat_buf++;                        
 128                readp++;                          // 指向下一地址
 129             }  
 130          }
 131          
 132          
 133          /******************************************************************
 134          * 名称:FLASH_EraseSector
 135          * 功能:扇区擦除
 136          * 入口参数:addr                指定待擦除扇区内的地址
 137          * 出口参数:返回0时表示操作错误
 138          ******************************************************************
 139          bit  FLASH_EraseSector(uint16 addr)
 140          {  FMADRH = addr>>8;
 141             FMADRL = addr&0xFF;
 142             FMCON = ERS_S;
 143             
 144             if( (FMCON&0x0F)!=0x00 ) return(0);
 145               else return(1);
 146          }
 147          
 148          
 149          /******************************************************************
 150          * 名称:FLASH_ErasePage
 151          * 功能:页擦除
 152          * 入口参数:addr                指定待擦除页内的地址
 153          * 出口参数:返回0时表示操作错误
 154          ******************************************************************/
 155          bit  FLASH_ErasePage(uint16 addr)
 156          {  FMADRH = addr>>8;
 157   1         FMADRL = addr&0xFF;
 158   1         FMCON = ERS_P;
 159   1         
 160   1         if( (FMCON&0x0F)!=0x00 ) return(0);
 161   1           else return(1);
 162   1      }
 163          
 164          
 165          /******************************************************************
 166          * 名称:FLASH_FillPage
 167          * 功能:页填充
 168          * 入口参数:addr                指定待填充页内的地址
 169          *          dat          待填充的数据
 170          * 出口参数:返回0时表示操作错误
 171          * 说明:函数会先调用FLASH_ErasePage擦除扇区
 172          ******************************************************************
 173          bit  FLASH_FillPage(uint16 addr, uint8  dat)
 174          {  uint8  i;
 175                  
 176             // 擦除扇区
 177             if( FLASH_ErasePage(addr)==0 ) return(0);
 178             // 填充数据
 179             FMADRH = addr>>8;                    // 设置页起始地址
C51 COMPILER V7.05   IAP_LITE                                                              04/08/2005 13:54:34 PAGE 4   

 180             FMADRL = addr&(~PAGE_SIZE);
 181             FMCON = LOAD;                        // 设置加载数据命令
 182             for(i=0; i<=PAGE_SIZE; i++)
 183             {  FMDATA = dat;                     // 加载数据
 184             }
 185             FMCON = PROG;                        // 开始编程
 186             
 187             if( (FMCON&0x0F)!=0x00 ) return(0);
 188               else return(1);
 189          }
 190          
 191                  */      
 192          
 193          
 194          
 195          
 196          
 197          
 198          
 199          
 200          
 201          
 202          
 203          
 204          
 205          
 206          
 207          
 208          
 209          
 210          
 211          
 212          
 213          
 214          
 215          
 216          


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