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

📄 flash.lst

📁 C8051F120 _AD开发过程中的一些代码和文档
💻 LST
字号:
C51 COMPILER V7.06   FLASH                                                                 01/02/2000 11:14:25 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE FLASH
OBJECT MODULE PLACED IN Flash.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Flash.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<intrins.h>
   2          #include "C8051f.h"
   3          
   4          unsigned char bdata SPI_DUMP;
   5          
   6          sbit SPI_D7 = SPI_DUMP^7;
   7          sbit SPI_D0 = SPI_DUMP^0;
   8          
   9          void SPI_Init (void)
  10          {
  11   1         SPI0CFG = 0x07;                     // data sampled on 1st SCK rising edge
  12   1                                             // 8-bit data words
  13   1         SPI0CFG |= 0xC0;     //CKPOL =1;
  14   1      
  15   1         SPI0CN = 0x03;                      // Master mode; SPI enabled; flags
  16   1                                             // cleared
  17   1         SPI0CKR = SYSCLK/2/8000000-1;       // SPI clock <= 8MHz (limited by 
  18   1                                             // EEPROM spec.)
  19   1      }
  20          
  21          
  22          
  23          void SPI_Write(unsigned char dat)
  24          {
  25   1              unsigned char temp;
  26   1              SPI_DUMP = dat;
  27   1              for(temp = 0; temp<8; temp++)
  28   1              {
  29   2                      SSI = SPI_D7;
  30   2                      SSCK = 1;
  31   2                      SPI_DUMP = SPI_DUMP << 1;
  32   2                      SSCK = 0;
  33   2              }
  34   1      }
  35          
  36          unsigned char SPI_Read()
  37          {       
  38   1              unsigned char temp;
  39   1              for(temp = 0; temp<8; temp++)
  40   1              {
  41   2                              SSCK = 1;
  42   2                              SPI_DUMP = SPI_DUMP << 1;
  43   2                              SPI_D0 = SSO;
  44   2                              SSCK = 0;
  45   2              }
  46   1              return(SPI_DUMP);
  47   1      }
  48          
  49          unsigned char SA_RDSR() //读状态寄存器
  50          {       
  51   1              unsigned char temp;
  52   1              EA = 0;
  53   1              SCS = 0;
  54   1              SPI_Write(0x05);
  55   1              temp = SPI_Read();
C51 COMPILER V7.06   FLASH                                                                 01/02/2000 11:14:25 PAGE 2   

  56   1              temp = SPI_Read();
  57   1              SCS = 1;
  58   1              EA = 1;
  59   1              return(temp);
  60   1      }
  61          
  62          void SA_WREN()//允许写
  63          {
  64   1              do
  65   1              {
  66   2                      if((SA_RDSR()&0x01) == 0) 
  67   2                      break;
  68   2              }while(1);
  69   1              EA = 0;
  70   1              SCS = 0;
  71   1              SPI_Write(0x06);
  72   1              SCS = 1;
  73   1              EA = 1;
  74   1      }
  75          
  76          void SA_WRDI() //禁止写
  77          {       
  78   1              do
  79   1              {
  80   2                      if((SA_RDSR()&0x01) == 0) 
  81   2                      break;
  82   2              }while(1);
  83   1              EA = 0;
  84   1              SCS = 0;
  85   1              SPI_Write(0x04);
  86   1              SCS = 1;
  87   1              EA = 1;
  88   1      
  89   1      }
  90          void SA_WRSR(unsigned char da)//写状态寄存器
  91          {
  92   1              do
  93   1              {
  94   2                      if((SA_RDSR()&0x01)==0) 
  95   2                      break;
  96   2              }while(1);
  97   1              EA = 0;
  98   1              SCS = 0;
  99   1              SPI_Write(0x01);
 100   1              SPI_Write(da);
 101   1              SCS = 1;
 102   1              EA = 1;
 103   1      }
 104          
 105          void SA_Read(unsigned long addr,unsigned char *ptr,unsigned int size)//
 106          {
 107   1              unsigned char addr_hh;
 108   1              unsigned char addr_h;
 109   1              unsigned char addr_l;
 110   1              unsigned int si;
 111   1              addr_l = addr&0x0000ff;
 112   1              addr_h = (addr&0x00ff00) >> 8;
 113   1              addr_hh = (addr&0xff0000) >> 16;
 114   1              do
 115   1              {
 116   2                      if((SA_RDSR()&0x01) == 0)
 117   2                      break;
C51 COMPILER V7.06   FLASH                                                                 01/02/2000 11:14:25 PAGE 3   

 118   2              }while(1);
 119   1              EA = 0;
 120   1              SCS = 0;
 121   1              SPI_Write(0x03);
 122   1              SPI_Write(addr_hh);
 123   1              SPI_Write(addr_h);
 124   1              SPI_Write(addr_l);
 125   1              for(si = 0; si<size; si++)
 126   1              {
 127   2                      ptr[si] = SPI_Read();
 128   2              }
 129   1              SCS = 1;
 130   1              EA = 1;
 131   1      }
 132          
 133          
 134          unsigned char SA_ReadB(unsigned long addr)  //读一个字节
 135          {
 136   1              unsigned char addr_hh;
 137   1              unsigned char addr_h;
 138   1              unsigned char addr_l;
 139   1              unsigned char temp;
 140   1              addr_l = addr&0x0000ff;
 141   1              addr_h = (addr&0x00ff00) >> 8;
 142   1              addr_hh = (addr&0xff0000) >> 16;
 143   1              do
 144   1              {
 145   2                      if((SA_RDSR()&0x01) == 0)
 146   2                      break;
 147   2              }while(1);
 148   1              EA = 0;
 149   1              SCS = 0;
 150   1              SPI_Write(0x03);
 151   1              SPI_Write(addr_hh);
 152   1              SPI_Write(addr_h);
 153   1              SPI_Write(addr_l);
 154   1          temp = SPI_Read();
 155   1              SCS = 1;
 156   1              EA = 1;
 157   1          return(temp);
 158   1      }
 159          
 160          void SA_PP(unsigned long addr,unsigned char *ptr,unsigned int len)//页写
 161          {
 162   1              unsigned char addr_hh;
 163   1              unsigned char addr_h;
 164   1              unsigned char addr_l;
 165   1              unsigned int si;
 166   1      
 167   1              addr_l = addr&0x0000ff;
 168   1              addr_h = (addr&0x00ff00) >> 8;
 169   1              addr_hh = (addr&0xff0000) >> 16;
 170   1      
 171   1              do
 172   1              {
 173   2                      if((SA_RDSR()&0x01) == 0)
 174   2                      {
 175   3                              break;
 176   3                      }
 177   2              }while(1);
 178   1              SA_WREN();
 179   1              EA = 0;
C51 COMPILER V7.06   FLASH                                                                 01/02/2000 11:14:25 PAGE 4   

 180   1              SCS = 0;
 181   1              SPI_Write(0x02);
 182   1              SPI_Write(addr_hh);
 183   1              SPI_Write(addr_h);
 184   1              SPI_Write(addr_l);
 185   1              for(si = 0; si < len; si++)
 186   1              {
 187   2                      SPI_Write(ptr[si]);
 188   2              }
 189   1              SCS = 1;
 190   1              _nop_();
 191   1              _nop_();
 192   1              EA = 1;
 193   1              do
 194   1              {
 195   2                      if((SA_RDSR()&0x01) == 0x01)
 196   2                      {
 197   3                              _nop_();
 198   3                              _nop_();
 199   3                      }
 200   2                      else
 201   2                      { 
 202   3                              break;
 203   3                      }
 204   2              }while(1);
 205   1      }
 206          
 207          
 208          
 209          
 210          void SA_PE(unsigned long addr)   //页擦除
 211          {
 212   1              unsigned char addr_hh;
 213   1              unsigned char addr_h;
 214   1              unsigned char addr_l;
 215   1      
 216   1              addr_l = addr&0x0000ff;
 217   1              addr_h = (addr&0x00ff00) >> 8;
 218   1              addr_hh = (addr&0xff0000) >> 16;
 219   1              do
 220   1              {
 221   2                      if((SA_RDSR()&0x01) == 0)
 222   2                      {
 223   3                              break;
 224   3                      }
 225   2              }while(1);
 226   1              SA_WREN();
 227   1              EA = 0;
 228   1              SCS = 0;
 229   1              SPI_Write(0x81);
 230   1              SPI_Write(addr_hh);
 231   1              SPI_Write(addr_h);
 232   1              SPI_Write(addr_l);
 233   1              SCS = 1;
 234   1              EA = 1;
 235   1      }
 236          
 237          SA_Write(unsigned long addr,unsigned char dat)//写一个字节
 238          {
 239   1          unsigned char addr_l;
 240   1              unsigned long  num; 
 241   1              unsigned char ptr[256];
C51 COMPILER V7.06   FLASH                                                                 01/02/2000 11:14:25 PAGE 5   

 242   1              addr_l = addr&0x0000ff;
 243   1              num = addr >> 8;
 244   1      //      num=(addr/256)*256;//>>8;
 245   1      //      addr_l=(unsigned char)(addr-num);
 246   1              SA_Read(num,&ptr[0],256);       
 247   1          ptr[addr_l] = dat;
 248   1              SA_PE(num);    
 249   1          SA_PP(num,&ptr[0],256);//页写
 250   1      }
 251          
 252          
 253          
 254          void SA_SE(unsigned long addr)  //扇区擦除
 255          {
 256   1              unsigned char addr_hh;
 257   1              unsigned char addr_h;
 258   1              unsigned char addr_l;
 259   1              addr_l = addr&0x0000ff;
 260   1              addr_h = (addr&0x00ff00) >> 8;
 261   1              addr_hh = (addr&0xff0000) >> 16;
 262   1              do
 263   1              {
 264   2                      if((SA_RDSR()&0x01) == 0)
 265   2                      break;
 266   2              }while(1);
 267   1              SA_WREN();
 268   1              EA = 0;
 269   1              SCS = 0;
 270   1              SPI_Write(0xd8);
 271   1              SPI_Write(addr_hh);
 272   1              SPI_Write(addr_h);
 273   1              SPI_Write(addr_l);
 274   1              SCS = 1;
 275   1              EA = 1;
 276   1      }
 277          // bulk erase
 278          void SA_BE()
 279          {
 280   1              do
 281   1              {
 282   2                      if((SA_RDSR()&0x01) == 0) break;
 283   2              }while(1);
 284   1              SA_WREN();
 285   1              EA = 0;
 286   1              SCS = 0;
 287   1              SPI_Write(0xc7);
 288   1              SCS = 1;
 289   1              EA = 1;
 290   1      }
 291          
 292          //software protection
 293          
 294          void SA_SP()
 295          {
 296   1              do
 297   1              {
 298   2                      if((SA_RDSR()&0x01) == 0)
 299   2                      break;
 300   2              }while(1);
 301   1              EA = 0;
 302   1              SCS = 0;
 303   1              SPI_Write(0xb9);
C51 COMPILER V7.06   FLASH                                                                 01/02/2000 11:14:25 PAGE 6   

 304   1              SCS = 1;
 305   1              EA = 1;
 306   1      }
 307          // release from software protect and read ID
 308          
 309          unsigned char SA_RSP()
 310          {       
 311   1              unsigned char temp;
 312   1              do
 313   1              {
 314   2                      if((SA_RDSR()&0x01) == 0)
 315   2                      break;
 316   2              }while(1);
 317   1              EA = 0;
 318   1              SCS = 0;
 319   1              SPI_Write(0xab);
 320   1              SPI_Write(0x00);
 321   1              SPI_Write(0x00);
 322   1              SPI_Write(0x00);
 323   1              temp = SPI_Read();
 324   1              SCS = 1;
 325   1              EA = 1;
 326   1              return(temp);
 327   1      }
 328          
 329          
 330          
 331          void SA_Init()
 332          {       
 333   1              unsigned char temp;
 334   1              SSCK = 0;
 335   1              SSI = 1;
 336   1              SSO = 1;
 337   1              SCS = 1;
 338   1              
 339   1              SA_WRSR(0x03);//0x03
 340   1              SA_WREN();
 341   1              temp = SA_RSP();
 342   1              temp = SA_RDSR();
 343   1              temp = SA_RDSR();
 344   1      }


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