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

📄 flash.lst

📁 多通道高速数据采集源程序
💻 LST
字号:
C51 COMPILER V7.50   FLASH                                                                 09/08/2007 13:14:10 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FLASH
OBJECT MODULE PLACED IN flash.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE flash.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "c8051f020.h"   
   2          #include <intrins.h>
   3          //#include "delay.h"
   4          sbit CS_ROM=P3^0 ; 
   5          void UART0_SendByte(unsigned char value);
   6          extern unsigned char xdata x[0x07fff];
   7          //*********************** M25P16程序模块 **********************//
   8          unsigned char transdata(unsigned char dat)      //向25P16传输数据
   9          {
  10   1              unsigned char  value;
  11   1              CS_ROM=0;           //开片选
  12   1              SPIF=0;                 //清SPI 中断标志
  13   1              SPI0DAT=dat;    //送数
  14   1              while(!SPIF);   //等待发送完毕
  15   1              SPIF=0;
  16   1              value=SPI0DAT;  //读数
  17   1              _nop_();
  18   1              return(value);
  19   1      }
  20          //读器件ID(202015H)
  21          
  22          /*void R_ROM_ID(void)           
  23          {
  24             unsigned char temp;
  25             unsigned char id1,id2,id3;
  26                  CS_ROM=1;
  27                  _nop_();
  28                  CS_ROM=0;
  29                  temp=transdata(0x9f);   //读器件ID命令
  30                  id1=transdata(0xff);
  31                  id2=transdata(0xff);
  32                  id3=transdata(0xff);
  33              //UART0_SendByte(id1);
  34              //UART0_SendByte(id2);
  35              //UART0_SendByte(id3);
  36                  CS_ROM=1;
  37          }
  38          */
  39          unsigned char R_ROM_SATUS(void)         
  40          {
  41   1              unsigned char  value;
  42   1              CS_ROM=1;
  43   1              value=transdata(0x05);
  44   1              value=transdata(0xff);  
  45   1          //UART0_SendByte(value);
  46   1              CS_ROM=1;
  47   1              return(value);
  48   1      }
  49          //写状态寄存器子程序
  50          //protect_bits:0 表示不保护任何段; 1 表示保护31段;   2 表示保护30-31段
  51          //                         3 表示保护28-31段;  4 表示保护24-31段;5 表示保护16-31段
  52          //                         6、7 表示保护所有段
  53          void WRSR(unsigned char protect_bits)           
  54          {
  55   1              unsigned char temp,protect;
C51 COMPILER V7.50   FLASH                                                                 09/08/2007 13:14:10 PAGE 2   

  56   1              protect=protect_bits<<2;
  57   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
  58   1      
  59   1              temp=transdata(0x06);                   //写FLASH ROM 命令
  60   1              while(!(R_ROM_SATUS()&0x02));   //等待WEL置位
  61   1      
  62   1              temp=transdata(0x01);                   //写状态寄存器命令代码
  63   1              temp=transdata(protect);        //送出参数
  64   1      
  65   1              CS_ROM=1;
  66   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
  67   1      }
  68          //块檫除子程序,FLASH ROM 全部檫除
  69          void FLASH_BE(void)
  70          {
  71   1              unsigned char temp;
  72   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
  73   1      
  74   1              WRSR(0x00);                                             //写状态寄存器,去写保护
  75   1              temp=transdata(0x06);                   //写FLASH ROM 命令
  76   1              while(!(R_ROM_SATUS()&0x02));   //等待WEL置位
  77   1      
  78   1              temp=transdata(0xc7);                   //块檫除命令
  79   1      
  80   1              CS_ROM=1;
  81   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
  82   1      }
  83          //段檫除子程序
  84          //addr=000000H -- 1FFFFFH
  85          void FLASH_SE(unsigned char addr3,unsigned char addr2,unsigned char addr1)                      
  86          {
  87   1              unsigned char temp;     
  88   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
  89   1      
  90   1              temp=transdata(0x06);                   //写FLASH ROM 命令
  91   1              while(!(R_ROM_SATUS()&0x02));   //等待WEL置位
  92   1      
  93   1              temp=transdata(0xd8);                   //段檫除命令
  94   1      
  95   1              temp=transdata(addr3);  //送24位地址 unsigned 逻辑移, signed 算术移
  96   1              temp=transdata(addr2);
  97   1              temp=transdata(addr1);
  98   1      
  99   1              CS_ROM=1;
 100   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
 101   1      }
 102          
 103          
 104          //页写子程序
 105          //addr:写入首地址
 106          //pw:待写数据地址指针
 107          //num:待写数据个数
 108          void Flash_W (unsigned char addr3,unsigned char addr2,unsigned char addr1,unsigned char dat)
 109          {
 110   1              //unsigned int  i;
 111   1              unsigned char temp;     
 112   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
 113   1              
 114   1              temp=transdata(0x06);                   //写FLASH ROM 命令
 115   1              while(!(R_ROM_SATUS()&0x02));   //等待WEL置位
 116   1      
 117   1              temp=transdata(0x02);                   //页写命令
C51 COMPILER V7.50   FLASH                                                                 09/08/2007 13:14:10 PAGE 3   

 118   1      
 119   1              temp=transdata(addr3);  //送24位地址 unsigned 逻辑移, signed 算术移
 120   1              temp=transdata(addr2);
 121   1              temp=transdata(addr1);
 122   1          
 123   1              temp=transdata(dat);//数据
 124   1              /*for(i=0;i<num;i++)
 125   1              {
 126   1                      temp=transdata(*pw);
 127   1                      pw++;
 128   1              }*/
 129   1      
 130   1              CS_ROM=1;
 131   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
 132   1      }
 133          //读FLASH程序
 134          //addr3~1:待读数据区首地址
 135          
 136          unsigned char Flash_R(unsigned char addr3,unsigned char addr2,unsigned char addr1)
 137          {
 138   1              //unsigned int i;
 139   1              unsigned char temp;
 140   1              unsigned char dat;
 141   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
 142   1      
 143   1              temp=transdata(0x03);                   //页读命令
 144   1      
 145   1              temp=transdata(addr3);  //送24位地址 unsigned 逻辑移, signed 算术移
 146   1              temp=transdata(addr2);
 147   1              temp=transdata(addr1);
 148   1      
 149   1          dat=transdata(0x00);
 150   1              /*for(i=0;i<num;i++)
 151   1              {
 152   1                      *pr=transdata(0x00);
 153   1                      pr++;
 154   1              }*/
 155   1              CS_ROM=1;
 156   1              return  dat;
 157   1      }
 158          
 159          //C命令读FLASH程序
 160          void Read_Flash_Data_To_PC (unsigned int addr3,unsigned int addr2,unsigned int addr1,unsigned char Num_Len
             -gth)
 161          {
 162   1        unsigned int i;
 163   1        unsigned char dat;
 164   1        for(i=0;i<=Num_Length;i++) 
 165   1        {
 166   2          dat=Flash_R( addr3, addr2, addr1);
 167   2          UART0_SendByte(dat);
 168   2          addr1++;
 169   2              if(addr1>255) 
 170   2              {
 171   3                addr1=0x00;
 172   3            addr2++;
 173   3             if(addr2>255)
 174   3                    {
 175   4                      addr1=0x00;
 176   4                      addr2=0x00;
 177   4                      addr3++;
 178   4                 }
C51 COMPILER V7.50   FLASH                                                                 09/08/2007 13:14:10 PAGE 4   

 179   3           
 180   3              }
 181   2         
 182   2        }
 183   1      }
 184          
 185          //S命令存时间初值与起始地址
 186          void Flash_Write_address (unsigned char hour,unsigned minute,unsigned char apm,unsigned int addr3,unsigned
             - int addr2,unsigned int addr1,unsigned char port)
 187          {
 188   1        unsigned int h,m,l;
 189   1        h=addr3;
 190   1        m=addr2;
 191   1        l=addr1;
 192   1        Flash_W (addr3,addr2,addr1,0xFF);//0位
 193   1        addr1++;
 194   1        Flash_W (addr3,addr2,addr1,hour);//1位
 195   1        addr1++;
 196   1        Flash_W (addr3,addr2,addr1,minute);//2位
 197   1        addr1++;
 198   1        Flash_W (addr3,addr2,addr1,apm);//3位
 199   1        addr1++;
 200   1        Flash_W (addr3,addr2,addr1,port);//4位
 201   1        addr1++;
 202   1        Flash_W (addr3,addr2,addr1,h);//5位
 203   1        addr1++;
 204   1        Flash_W (addr3,addr2,addr1,m);//6位
 205   1        addr1++;
 206   1        Flash_W (addr3,addr2,addr1,l);//7位
 207   1      }
 208          //Rom存储
 209          /*void ROM_Write_address(unsigned int address,unsigned char hour,unsigned minute,unsigned char apm,unsigne
             -d int addr3,unsigned int addr2,unsigned int addr1,unsigned char port )
 210          {
 211           unsigned int add;
 212           add=address;
 213           x[add]=0xFF;//0
 214           add++;
 215           x[add]=hour;//1
 216           add++;
 217           x[add]= minute;//2
 218           add++;
 219           x[add]= apm;//3
 220           add++;
 221           x[add]= port;//4
 222           add++;
 223           x[add]= addr3;//5
 224           add++;
 225           x[add]= addr2;//6
 226           add++;
 227           x[add]= addr1;//7
 228           add++;
 229           x[add]= 0x00;//8 上次值
 230           add++;
 231           x[add]= 0x00;//9 当前值
 232          }*/
 233          
 234          void Read_Data_T0_Flash (unsigned char addr3,unsigned char addr2,unsigned char addr1,unsigned int ad,unsig
             -ned int num)
 235          {
 236   1          unsigned char temp;
 237   1              unsigned int i,add;
C51 COMPILER V7.50   FLASH                                                                 09/08/2007 13:14:10 PAGE 5   

 238   1              add=ad;
 239   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
 240   1              
 241   1              temp=transdata(0x06);                   //写FLASH ROM 命令
 242   1              while(!(R_ROM_SATUS()&0x02));   //等待WEL置位
 243   1      
 244   1              temp=transdata(0x02);                   //页写命令
 245   1      
 246   1              temp=transdata(addr3);  //送24位地址 unsigned 逻辑移, signed 算术移
 247   1              temp=transdata(addr2);
 248   1              temp=transdata(addr1);
 249   1              for(i=0,add=ad;i<num,add<ad+num;i++,add++)
 250   1              {
 251   2                temp=transdata(x[add]);
 252   2              }
 253   1          CS_ROM=1;
 254   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
 255   1          
 256   1      }
 257          
 258          unsigned char Fast_Read(unsigned char addr3,unsigned char addr2,unsigned char addr1,unsigned long int end_
             -address)
 259          {
 260   1              unsigned long int i,num,address;
 261   1              unsigned char temp;
 262   1              unsigned char dat;
 263   1          unsigned char first;
 264   1          first=0x00;
 265   1              address=addr3*65536+addr2*256+addr1;
 266   1          num=end_address-address;
 267   1              while(R_ROM_SATUS()&0x01);         //等待WIP复位
 268   1      
 269   1              temp=transdata(0x0B);                   //fast read 读命令
 270   1      
 271   1              temp=transdata(addr3);  //送24位地址 unsigned 逻辑移, signed 算术移
 272   1              temp=transdata(addr2);
 273   1              temp=transdata(addr1);
 274   1          for(i=0;i<=num;i++)
 275   1      {
 276   2         dat=transdata(0x00);
 277   2         switch (first)
 278   2              {
 279   3              case 0x00: first=0x01;break;
 280   3              case 0x01: if(dat==0xFF) i=num; UART0_SendByte(dat);
 281   3          //UART0_SendByte(datt);
 282   3              default : break;
 283   3              }
 284   2         
 285   2      }
 286   1          
 287   1              CS_ROM=1;
 288   1              return  dat;
 289   1      }
 290          //*********************** M25P16程序模块结束 **********************//
 291          
 292          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    903    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.50   FLASH                                                                 09/08/2007 13:14:10 PAGE 6   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      60
   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 + -