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

📄 fat16.lst

📁 用89C51SND1C实现MP3播放器的源代码.用KEIL c51编写.
💻 LST
字号:
C51 COMPILER V6.23a  FAT16                                                                 12/02/2003 11:07:55 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE FAT16
OBJECT MODULE PLACED IN fat16.OBJ
COMPILER INVOKED BY: d:\SoftDev\Keil\C51\BIN\C51.EXE fat16.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /****************************************************************/
   2          /*                                      UP-MP3DIY100                                                            */
   3          /*              Beijing Universal Pioneering Technology Co., LTD                */
   4          /*              CopyRighted,All right Reserved  www.up-tech.com                 */
   5          /*                                              July,2003                                                               */
   6          /*                              010-62387873  62381842                                                  */
   7          /****************************************************************/
   8          
   9          #include "Fat16.h"
  10          #include "Flash.h"
  11          #include "uart.h"
  12          #include "string.h"
  13          
  14          //数据结构与全局变量定义
  15          extern unsigned char Page_Buf[];
  16          extern unsigned char SONG[];
  17          
  18          long int Current_Cluster,DataRead=0,DataRemain=0,Sector_Offset=0x21d;
  19          
  20          
  21          unsigned int TotalCluster,BootSector,RsdSector,SectorofFatSize,TotalCapacity,RootEntry,SecPerClus,TotalSec
             -tor,BytesPerSec,FirstDataSec;
  22          unsigned char FAT_TYPE;
  23          
  24          void Init_FAT_Info(void)
  25          {
  26   1              int i;
  27   1      
  28   1              ///////////////////////////////////////////////////
  29   1              //得到引导扇区所在扇区号,如果介质是不带分区的,则0扇区就是BootSector了。
  30   1              ReadPage(Begin_Cluster,0,Page_Buf);
  31   1      
  32   1              if(!(Page_Buf[0]==0xeb&&Page_Buf[2]==0x90)){    //通过判断EB ?? 90来看是否已经是BPB了
  33   2                      //带分区的介质
  34   2                      BootSector=Page_Buf[454]+Page_Buf[455]*256+Page_Buf[456]*(256*256)+Page_Buf[457]*(256*256*256);
  35   2                      }
  36   1              else BootSector=0;
  37   1              ///////////////////////////////////////////////////
  38   1      
  39   1              ////////////////////////////////////////////////
  40   1              //得到保留扇区数,总扇区数,总扇区数/每簇扇区数得到簇数,是FAT类型的依据
  41   1              ReadPage(Begin_Cluster,BootSector,Page_Buf);
  42   1              RsdSector=Page_Buf[14]+Page_Buf[15]*256;
  43   1              SecPerClus=Page_Buf[13];
  44   1      
  45   1              BytesPerSec=Page_Buf[12]*256+Page_Buf[11];
  46   1      
  47   1              TotalSector=(Page_Buf[20]*256+Page_Buf[19]);
  48   1              TotalCapacity=TotalSector*BytesPerSec;
  49   1              TotalCluster=TotalSector/SecPerClus;//FAT16的簇总数=扇区总数/每簇扇区数
  50   1      
  51   1              SectorofFatSize=((Page_Buf[22]+Page_Buf[23]*256));
  52   1              RootEntry=(Page_Buf[18]*256+Page_Buf[17]);
  53   1      
  54   1              FirstDataSec=BootSector+RsdSector+(SectorofFatSize*2)+((RootEntry*32+(BytesPerSec-1))/BytesPerSec);
C51 COMPILER V6.23a  FAT16                                                                 12/02/2003 11:07:55 PAGE 2   

  55   1      
  56   1              if(TotalCluster>65525){  //FAT32的扇区总数和FAT表项长度
  57   2                      FAT_TYPE=FAT32;
  58   2      
  59   2                      if(TotalSector==0) TotalSector=(Page_Buf[32]+Page_Buf[33]*256+Page_Buf[34]*256*256+Page_Buf[35]*256*256*
             -256);
  60   2                      TotalCapacity=TotalSector*BytesPerSec;
  61   2                      TotalCluster=TotalSector/SecPerClus;
  62   2      
  63   2                      SectorofFatSize=(Page_Buf[36]+Page_Buf[37]*256+Page_Buf[38]*256*256+Page_Buf[39]*256*256*256);
  64   2                      if(SectorofFatSize>(TotalCluster*16/512)) SectorofFatSize=((Page_Buf[22]+Page_Buf[23]*256));
  65   2                      RootEntry=(Page_Buf[44]*256+Page_Buf[43]);
  66   2                      FirstDataSec=BootSector+RsdSector+(SectorofFatSize*2)+((RootEntry*32+(BytesPerSec-1))/BytesPerSec);
  67   2                      
  68   2                      }
  69   1              else if((TotalCluster>0)&&(TotalCluster<4085)) {//FAT12
  70   2                      FAT_TYPE=FAT12;
  71   2                      }
  72   1              else {  //FAT16
  73   2                      FAT_TYPE=FAT16;
  74   2                      }
  75   1              
  76   1      }
*** WARNING C280 IN LINE 26 OF FAT16.C: 'i': unreferenced local variable
  77          
  78          unsigned char GetMP3List(void)
  79          {
  80   1              unsigned char i=0,j=0,l=0;
  81   1              int k=0;
  82   1              unsigned char MP3[3]={'M','P','3'};
  83   1              Init_FAT_Info();
  84   1      
  85   1              k=BootSector+RsdSector+2*SectorofFatSize;
  86   1              printuf("BootSector:%x",BootSector);
  87   1              printuf("RsdSector:%x",RsdSector);
  88   1              printuf("SectorofFatSize:%x",SectorofFatSize);
  89   1      
  90   1              printuf("RootDIR:%x",(k&0xff00)>>8);
  91   1              printuf("%x\n",k);
  92   1      
  93   1              ReadPage(0+k/32,k%32,Page_Buf);
  94   1      
  95   1              while(Page_Buf[0]!=0){//遍历整个目录
  96   2                      for(j=0;j<16;j++){
  97   3                                      if(!Page_Buf[j*32]) break;
  98   3                                      if(Page_Buf[j*32]==0xE5) continue;
  99   3      
 100   3                                      if(!memcmp(MP3,&Page_Buf[j*32+8],3)){   //file find
 101   4                                              for(i=0;i<11;i++) SONG[l*11+i]=Page_Buf[j*32+i];
 102   4                                              l++;
 103   4                                              }
 104   3                                      }
 105   2                      k++;
 106   2                      ReadPage(0+k/32,k%32,Page_Buf);
 107   2                      }
 108   1              return(l);
 109   1      }
 110          int ReadSector(unsigned char *Name,unsigned char *databuff)
 111          {
 112   1              int i,j,k,Page;
 113   1              if(DataRead==0) //第一次读取,先查找文件,然后进行读取
 114   1                      {
C51 COMPILER V6.23a  FAT16                                                                 12/02/2003 11:07:55 PAGE 3   

 115   2                              Page=BootSector+RsdSector+2*SectorofFatSize;
 116   2                              ReadPage(0+Page/32,Page%32,databuff);
 117   2                              while(databuff[0]!=0){//遍历整个目录
 118   3                              for(i=0;i<16;i++){
 119   4                                                              if(!memcmp(Name,&databuff[i*32],11)){
 120   5                                                                      Current_Cluster=databuff[32*i+27]*256+databuff[32*i+26];
 121   5                                                                      printuf("Current_Cluster:%x",(Current_Cluster&0xff00)>>8);
 122   5                                                                      printuf("%x\n",Current_Cluster);
 123   5                                                                      for(k=31;k>27;k--) DataRemain=(DataRemain<<8)|databuff[i*32+k];
 124   5                                                                      ReadPage((Current_Cluster+Sector_Offset)/32,(Current_Cluster+Sector_Offset)%32,databuff);
 125   5      
 126   5                                                                      DataRead+=512;
 127   5                                                                      DataRemain-=512;
 128   5                                                                      if(DataRemain<0) {DataRead=0;return(DataRemain+512);}
 129   5                                                                      else return(512);
 130   5                                                              }
 131   4                                                      }
 132   3                                      Page++;
 133   3                                      ReadPage(0+Page/32,Page%32,databuff);
 134   3                        }
 135   2                        printu("\nfile is not found!");return(0);
 136   2                      }
 137   1              else
 138   1                      {
 139   2      //                      if((Current_Cluster+Sector_Offset+DataRead/BytesPerSec)%32) Current_Cluster=NextCluster(Current_Clust
             -er);
 140   2                              ReadPage((Current_Cluster+Sector_Offset)/32,(Current_Cluster+Sector_Offset+DataRead/BytesPerSec)%32,dat
             -abuff);
 141   2                              DataRead+=512;
 142   2      //                      if(!((Current_Cluster+Sector_Offset+DataRead/BytesPerSec)%32)) Current_Cluster=NextCluster(Current_Cl
             -uster+32);
 143   2                              if(!((Current_Cluster+Sector_Offset+DataRead/BytesPerSec)%32)) Current_Cluster+=32;//默认歌曲文件是顺序
             -存放的。
 144   2                              DataRemain-=512;
 145   2                              if(DataRemain<0) {DataRead=0;return(DataRemain+512);}
 146   2                              else return(512);
 147   2                              }
 148   1      
 149   1      }
*** WARNING C280 IN LINE 112 OF FAT16.C: 'j': unreferenced local variable
 150          
 151          unsigned int NextCluster(unsigned int CurrentCluster)
 152          {
 153   1              unsigned int i,j;
 154   1              if(FAT_TYPE==FAT12){
 155   2                      ReadPage(Begin_Cluster+(BootSector+RsdSector+(CurrentCluster*3/2)/BytesPerSec)/SecPerClus,(BootSector+Rs
             -dSector+(CurrentCluster*3/2)/BytesPerSec)%SecPerClus,Page_Buf);
 156   2                      if(CurrentCluster%2==0) {
 157   3                              j=Page_Buf[(CurrentCluster*3/2)%BytesPerSec+1];
 158   3                              i=Page_Buf[(CurrentCluster*3/2)%BytesPerSec]|(j<<8);
 159   3                              i&=0x0fff;
 160   3                              }
 161   2                      else {
 162   3                              j=Page_Buf[(CurrentCluster*3/2)%BytesPerSec+1];
 163   3                              i=Page_Buf[(CurrentCluster*3/2)%BytesPerSec]|(j<<8);
 164   3                              i=(i>>4);
 165   3                              }
 166   2                      return (i);
 167   2                      }
 168   1              else if(FAT_TYPE==FAT16){
 169   2                      ReadPage(Begin_Cluster+(BootSector+RsdSector+(CurrentCluster*2)/BytesPerSec)/32,(BootSector+RsdSector+(C
             -urrentCluster*2)/BytesPerSec)%32,Page_Buf);
C51 COMPILER V6.23a  FAT16                                                                 12/02/2003 11:07:55 PAGE 4   

 170   2                      i=Page_Buf[(CurrentCluster*2)%BytesPerSec+1]*256+Page_Buf[(CurrentCluster*2)%BytesPerSec];
 171   2                      return (i);
 172   2                      }
 173   1              else if(FAT_TYPE==FAT32){
 174   2                      ReadPage(Begin_Cluster+(BootSector+RsdSector+(CurrentCluster*4)/BytesPerSec)/SecPerClus,(BootSector+RsdS
             -ector+(CurrentCluster*4)/BytesPerSec)%SecPerClus,Page_Buf);
 175   2                      i=Page_Buf[(CurrentCluster*4)%BytesPerSec+3]*256*256*256+Page_Buf[(CurrentCluster*4)%BytesPerSec+2]*256*
             -256+Page_Buf[(CurrentCluster*4)%BytesPerSec+1]*256+Page_Buf[(CurrentCluster*4)%BytesPerSec];
 176   2                      return (i);
 177   2                      }
 178   1      }
 179          
 180          
 181          
 182          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2922    ----
   CONSTANT SIZE    =    103    ----
   XDATA SIZE       =     37      30
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -