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

📄 hpi32.lst

📁 能用51读写U盘...创建文件格式...能自由创建文件.删除.读写
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.06   HPI32                                                                 08/10/2005 23:25:29 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE HPI32
OBJECT MODULE PLACED IN HPI32.OBJ
COMPILER INVOKED BY: D:\Keil51\C51\BIN\C51.EXE HPI32.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "common.h"
   2          #include "TPBULK.H"
   3          #include "HPI.H"
   4          #include "HAL.H"
   5          #include "Fat.h"
   6          #include "Fat32.h"
   7          #include "HPI32.H"
   8          
   9          extern FLAGS bdata bFlags;
  10          extern unsigned char xdata DBUF[BUFFER_LENGTH];
  11          //////////////////////////////////////////
  12          extern unsigned char xdata UARTBUF[UARTBUF_LENGTH];
  13          extern SYS_INFO_BLOCK xdata DeviceInfo;
  14          extern FILE_INFO xdata ThisFile;
  15          
  16          extern Command_Def xdata Command;
  17          extern Response_Def xdata Response;
  18          
  19          unsigned long xdata DirStartCluster32,NowCluster32;
  20          extern unsigned long xdata NowSector;
  21          extern ShowFileName_Def xdata ShowFileName[MaxLFNum];   //long file struct
  22          /////////////////////////////////////////////
  23          
  24          unsigned char UartHandler32(void)
  25          {
  26   1        Response.Result=0;Response.len=0;
  27   1        switch(Command.CLass)
  28   1        {
  29   2          case 0x00:  //List          
  30   2              Response.Result=List32();
  31   2              break;  
  32   2              case 0x01:      //Open File
  33   2                      Response.Result=OpenFile32(Command.Parameter);          
  34   2              break;
  35   2              case 0x02:      //Read File             
  36   2                      Response.Result=ReadFile32(Command.len,UARTBUF);
  37   2                      break;   
  38   2          case 0x03:  //Set Pointer
  39   2                      Response.Result=SetFilePointer32(Command.len);  
  40   2                      break;
  41   2              case 0x04:      //Great File
  42   2                      Response.Result=OpenFile32(Command.Parameter);
  43   2                      if(Response.Result)
  44   2                              {
  45   3                              Response.Result=SetFilePointer32(ThisFile.LengthInByte);
  46   3                              }
  47   2                      else
  48   2                      Response.Result=CreateFile32(Command.len,Command.Parameter,UARTBUF);            
  49   2              break; 
  50   2              case 0x05:      //Write File
  51   2              Response.Result=WriteFile32(Command.len,UARTBUF);
  52   2              break; 
  53   2          case 0x06:  //Remove File
  54   2              ThisFile.bFileOpen=0;   
  55   2              Response.Result=RemoveFile32(Command.Parameter);
C51 COMPILER V7.06   HPI32                                                                 08/10/2005 23:25:29 PAGE 2   

  56   2              break;  
  57   2              case 0x07:      //Get Space     
  58   2              Response.Result=GetCapacity32();
  59   2              break;     
  60   2              case 0x08:  //DetectDisk
  61   2                      if(bFlags.bits.SLAVE_IS_ATTACHED)
  62   2                              Response.Result=1;
  63   2                      break;
  64   2              case 0x09:  //Great Dir
  65   2                      Response.Result=DownDir32(Command.Parameter);
  66   2                      if(!Response.Result)
  67   2                              Response.Result=CreateDir32(Command.len,Command.Parameter,UARTBUF);     
  68   2              break; 
  69   2              case 0x0a:      //Down Dir
  70   2                      Response.Result=DownDir32(Command.Parameter);
  71   2                      break;
  72   2              case 0x0b:      //Up Dir
  73   2                      Response.Result=UpDir32();
  74   2                      break;  
  75   2              case 0x0c:      //Up RootDir
  76   2                      Response.Result=UpRootDir32();
  77   2                      break;
  78   2              case 0x0d:      //Get DriveNum
  79   2                      Response.Result=GetDriveNum();  
  80   2                      break;
  81   2              case 0x0e:      //SelectDrive [0,1,2,....]
  82   2                      Response.Result=SelectDrive(Command.Parameter[0]);
  83   2                      break;
  84   2        }
  85   1      
  86   1        UartSendRsp();
  87   1        ///////////////////////////////
  88   1        return TRUE;  
  89   1      }
  90          
  91          unsigned char List32(void)
  92          {
  93   1              unsigned int item,i;
  94   1              unsigned char k,bstop,sector;
  95   1              unsigned char Lcount,Ncount,base;
  96   1              
  97   1              if(!bFlags.bits.SLAVE_IS_ATTACHED)
  98   1                      return FALSE;                   
  99   1              item=0;
 100   1              bstop=0;
 101   1              ////////////////////////////////////
 102   1              Lcount=0;
 103   1              for(i=0;i<MaxLFNum;i++)
 104   1                      {
 105   2                      ShowFileName[i].LongName[0]=0x00;
 106   2                      ShowFileName[i].LongName[1]=0x00;
 107   2                      }
 108   1      //////////////////////////////////////////////////////////////////                      
 109   1              NowCluster32=DirStartCluster32;         
 110   1                      do
 111   1                      {
 112   2                              NowSector=FirstSectorofCluster32(NowCluster32);
 113   2                              for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
 114   2                      {   
 115   3                                      if(!RBC_Read(NowSector+sector,1,DBUF))
 116   3                                              return FALSE;                           
 117   3                                      for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
C51 COMPILER V7.06   HPI32                                                                 08/10/2005 23:25:29 PAGE 3   

 118   3                                      {
 119   4                                              if(DBUF[i]==0x00)
 120   4                                                      {bstop=1;break;}
 121   4                                              else if(DBUF[i]==0xE5)
 122   4                                                      continue;                       
 123   4                                              else
 124   4                                              {
 125   5                                                      for(k=0;k<32;k++)
 126   5                                                              UARTBUF[item*32+k]=DBUF[i+k];
 127   5                                                      item=item+1;
 128   5                                                      /////////////////////////////////
 129   5                                                      if(DBUF[i+11]==0x0F)
 130   5                                                      {
 131   6                                                              base=((DBUF[i]&0x1F)-1)*26;
 132   6                                                              if(base<=224)
 133   6                                                              {
 134   7                                                                      Ncount=0;
 135   7                                                                      for(k=1;k<11;k++)
 136   7                                                                      {
 137   8                                                                              ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
 138   8                                                                              Ncount++;
 139   8                                                                      }
 140   7                                                                      for(k=14;k<26;k++)
 141   7                                                                      {
 142   8                                                                              ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
 143   8                                                                              Ncount++;
 144   8                                                                      }
 145   7                                                                      for(k=28;k<32;k++)
 146   7                                                                      {
 147   8                                                                              ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
 148   8                                                                              Ncount++;
 149   8                                                                      }
 150   7                                                              }
 151   6                                                      }
 152   5                                                      else
 153   5                                                      {
 154   6                                                              for(k=0;k<32;k++)
 155   6                                                                      ShowFileName[Lcount].item[k]=DBUF[i+k];
 156   6                                                         Lcount++;                                                    
 157   6                                                      }                       
 158   5                                      /////////////////////////////////
 159   5                                              }
 160   4                                      }
 161   3                                      if(bstop==1)break;              
 162   3                      }
 163   2                              if(bstop==1)break;
 164   2              
 165   2                              NowCluster32=GetNextClusterNum32(NowCluster32); 
 166   2                              
 167   2                      }while(NowCluster32<=DeviceInfo.TotCluster);
 168   1      
 169   1              Response.len=item*32;
 170   1              return TRUE;    
 171   1      }
 172          
 173          unsigned char OpenFile32(unsigned char *pBuffer)
 174          {
 175   1              unsigned int i;
 176   1              unsigned char j,bstop,sector;
 177   1                      
 178   1              if(!bFlags.bits.SLAVE_IS_ATTACHED)
 179   1                      return FALSE;                   
C51 COMPILER V7.06   HPI32                                                                 08/10/2005 23:25:29 PAGE 4   

 180   1              ThisFile.bFileOpen=0;
 181   1              NowCluster32=DirStartCluster32;         
 182   1                      do
 183   1                      {
 184   2                              NowSector=FirstSectorofCluster32(NowCluster32);
 185   2                              for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
 186   2                      {   
 187   3                                      if(!RBC_Read(NowSector+sector,1,DBUF))
 188   3                                              return FALSE;                           
 189   3                                      for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
 190   3                                      {
 191   4                                              if(DBUF[i]==0x00)
 192   4                                                      return FALSE;
 193   4                                              j=0;
 194   4                                              while(DBUF[i+j]==*(pBuffer+j))
 195   4                                              {
 196   5                                                       j=j+1;
 197   5                                                       if(j>10)
 198   5                                                              break;
 199   5                                              }
 200   4                                              if(j>10&&(DBUF[i+11]&0x10)!=0x10)
 201   4                                              { 
 202   5                                                      for(j=0;j<32;j++)
 203   5                                                      UARTBUF[j]=DBUF[i+j];                       
 204   5                                              bstop=1;
 205   5                                              break;
 206   5                                                      }
 207   4                                      }
 208   3                                      if(bstop==1)break;              
 209   3                      }
 210   2                              if(bstop==1)break;      
 211   2                              NowCluster32=GetNextClusterNum32(NowCluster32);                 
 212   2                      }while(NowCluster32<=DeviceInfo.TotCluster);
 213   1                      
 214   1              if(NowCluster32>DeviceInfo.TotCluster)
 215   1                      return FALSE;
 216   1      
 217   1              ThisFile.bFileOpen=1;
 218   1              ThisFile.StartCluster=LSwapINT32(UARTBUF[26],UARTBUF[27],UARTBUF[20],UARTBUF[21]);
 219   1              ThisFile.LengthInByte=LSwapINT32(UARTBUF[28],UARTBUF[29],UARTBUF[30],UARTBUF[31]);
 220   1              ThisFile.ClusterPointer=ThisFile.StartCluster;  
 221   1              ThisFile.SectorPointer=FirstSectorofCluster32(ThisFile.StartCluster);
 222   1              ThisFile.OffsetofSector=0;
 223   1              ThisFile.SectorofCluster=0;     
 224   1              ThisFile.FatSectorPointer=0;    
 225   1              ThisFile.pointer=0;
 226   1              
 227   1              Response.len=32;
 228   1              return TRUE;    
 229   1      }
 230          
 231          
 232          unsigned char ReadFile32(unsigned long readLength,unsigned char *pBuffer)
 233          {
 234   1      
 235   1              unsigned int len,i;
 236   1              unsigned int tlen;      

⌨️ 快捷键说明

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