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

📄 39sf020.lst

📁 SST39SF020驱动代码
💻 LST
字号:
C51 COMPILER V8.05a   39SF020                                                              12/16/2008 16:46:32 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE 39SF020
OBJECT MODULE PLACED IN 39SF020.OBJ
COMPILER INVOKED BY: C:\Keil V3\C51\BIN\C51.EXE 39SF020.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <absacc.h>
   2          #include <INTRINS.H>
   3          #include <39SF020.h>
   4          
   5          extern unsigned char Read39SF02abyte(unsigned char H_addr,unsigned int L_addr);//读一个字节数据
   6          extern void Write39SF02abyte(unsigned char H_addr,unsigned int L_addr,unsigned char W_Data);//写一个字节数
             -据
   7          extern void SectorErase(unsigned char H_addr,unsigned int SectorAddr);//扇区擦除
   8          extern void ChipErase();//整片擦除
   9          
  10          
  11          void delay_10us(unsigned int us)
  12          {               
  13   1              while(us--)
  14   1              {
  15   2                      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  16   2                      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();        
  17   2              }
  18   1      }
  19          
  20          void delay_Nms(unsigned int ms)
  21          {       
  22   1              unsigned int i;
  23   1              while(ms--)
  24   1              {
  25   2                      i=252;  
  26   2                      while(i--);
  27   2              }
  28   1      
  29   1      }
  30          
  31          /***********************************************************************************/
  32          
  33          /* 选择 39C020 段地址(高位地址),seg 为段地址*/
  34          void select_segment(unsigned char seg)
  35          {
  36   1           P1&=0xfc;
  37   1           switch(seg)
  38   1           {
  39   2              case 0: P1|=0x00; break; // 39c020 a17a16= 000 00000-0ffff
  40   2              case 1: P1|=0x01; break; // 39c020 a17a16= 001 10000-1ffff
  41   2              case 2: P1|=0x02; break; // 39c020 a17a16= 010 20000-2ffff
  42   2              case 3: P1|=0x03; break; // 39c020 a17a16= 011 30000-3ffff
  43   2           }
  44   1      }
  45          /*
  46          void select_segment(unsigned char seg)
  47          {
  48               P4&=0xfc;
  49               switch(seg)
  50               {
  51                  case 0: P4|=0x00; break; // 39c020 a17a16= 000 00000-0ffff
  52                  case 1: P4|=0x01; break; // 39c020 a17a16= 001 10000-1ffff
  53                  case 2: P4|=0x02; break; // 39c020 a17a16= 010 20000-2ffff
  54                  case 3: P4|=0x03; break; // 39c020 a17a16= 011 30000-3ffff
C51 COMPILER V8.05a   39SF020                                                              12/16/2008 16:46:32 PAGE 2   

  55               }
  56          }
  57          */
  58          void protect() //解除保护
  59          {
  60   1              select_segment(0);/*必须写到第0段*/
  61   1              XBYTE[0x5555]=0xaa;
  62   1              delay_10us(2);
  63   1              XBYTE[0x2aaa]=0x55;
  64   1              delay_10us(2);
  65   1              XBYTE[0x5555]=0xa0;
  66   1              delay_10us(2);
  67   1      }
  68          /*************39SF020扇区分布****************
  69          地址从00000-3FFFF
  70          每个扇区大小是:4Kbytes  哪么:
  71          0扇区:0 0000-0 0FFF            1扇区:0 1000-0 1FFF
  72          2扇区:0 2000-0 2FFF            3扇区:0 3000-0 3FFF
  73          4扇区:0 4000-0 4FFF            5扇区:0 5000-0 5FFF
  74          ........
  75          62扇区:3 E000-3 EFFF           63扇区:3 F000-3 FFFF
  76          
  77          
  78          ********************************************/
  79          
  80          void SectorErase(unsigned char H_addr,unsigned int SectorAddr)//扇区擦除
  81          {
  82   1           select_segment(H_addr);    /*设置高位*/
  83   1           CE=0;
  84   1           XBYTE[0x5555]=0xaa;
  85   1               delay_10us(2);
  86   1           XBYTE[0x2aaa]=0x55;
  87   1               delay_10us(2);
  88   1           XBYTE[0x5555]=0x80;
  89   1               delay_10us(2);
  90   1           XBYTE[0x5555]=0xAA;
  91   1               delay_10us(2);
  92   1           XBYTE[0x2AAA]=0x55;
  93   1               delay_10us(2);
  94   1           XBYTE[SectorAddr]=0x30;
  95   1               delay_10us(2);
  96   1           CE=1;
  97   1           delay_Nms(30);
  98   1      }
  99          
 100          void ChipErase()//整片擦除
 101          {
 102   1           select_segment(0);/*必须写到第0段*/
 103   1           CE=0;
 104   1           XBYTE[0x5555]=0xaa;
 105   1               delay_10us(4);
 106   1           XBYTE[0x2aaa]=0x55;
 107   1               delay_10us(4);
 108   1           XBYTE[0x5555]=0x80;
 109   1               delay_10us(4);
 110   1           XBYTE[0x5555]=0xAA;
 111   1               delay_10us(4);
 112   1           XBYTE[0x2AAA]=0x55;
 113   1               delay_10us(4);
 114   1           XBYTE[0x5555]=0x10;
 115   1               delay_10us(4);
 116   1           CE=1;
C51 COMPILER V8.05a   39SF020                                                              12/16/2008 16:46:32 PAGE 3   

 117   1           delay_Nms(100);
 118   1      }
 119          
 120          unsigned char Read39SF02abyte(unsigned char H_addr,unsigned int L_addr)//读数据
 121          {
 122   1              unsigned char Data;
 123   1              //unsigned char i;
 124   1              CE=0;
 125   1              select_segment(H_addr&0x03); /*s_sector 是256的整数倍*/
 126   1              _nop_();_nop_();_nop_();_nop_();_nop_();
 127   1              Data=XBYTE[L_addr];
 128   1              CE=1;
 129   1              return Data;
 130   1      }
 131          void Write39SF02abyte(unsigned char H_addr,unsigned int L_addr,unsigned char W_Data) //写数据
 132          {
 133   1              CE=0;
 134   1              protect(); //解除保护
 135   1              select_segment(H_addr&0x03); /*s_sector 是256的整数倍*/
 136   1              XBYTE[L_addr]=W_Data;    //高位
 137   1              delay_10us(2);
 138   1              CE=1;
 139   1      }
 140          


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