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

📄 udisk.lst

📁 51读写u盘 uart.c main.c rwudiskdemo.c
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   UDISK                                                                 07/01/2007 16:03:04 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE UDISK
OBJECT MODULE PLACED IN udisk.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE udisk.c COMPACT BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          //#include "stdafx.h"
   3          //#include "CommPort.h"
   4          //extern CCommPort Comm;
   5          //#define SendResponse(buff,len)        Comm.SendData(buff, NULL, len, 10000, 1, 0, FALSE);  //发送数据
   6          
   7          #include "config.h"
   8          #include "string.h"
   9          #include "udisk.h"
  10          
  11          
  12          #ifndef NULL
              #define NULL    0
              #endif
  15          
  16          #define MAX_FILE_SIZE   512
  17          #define WAIT_TIME_OUT   0x2fff
  18          
  19          
  20          FHANDLE g_handle={0xff,0};
  21          
  22          
  23          CONTR_DISK      rwdisk;
  24          void SendResponse(uint8 *buff,uint16 len);
  25          void FreeFHandle(void);
  26          void ReceOneChar(uint8 ReceChar);
  27          
  28          /*********************************************************************************************************
  29          ** 函数名称: wait_ack
  30          ** 功能描述: 等待应答帧
  31          **
  32          ** 输 入: 无
  33          ** 输 出: 正常应答返回:TRUE,超时出错返回:FALSE
  34          ********************************************************************************************************/
  35          uint8 wait_ack(void)
  36          {
  37   1              uint32 i;
  38   1              rwdisk.state = 0;
  39   1      
  40   1              for(i=0;i<WAIT_TIME_OUT;i++)    // 软件延时等待
  41   1              {
  42   2                      if(0xff==rwdisk.state)
  43   2                              return TRUE;
  44   2              }
  45   1              return FALSE;
  46   1      }
  47          
  48          /*
  49          uint8 wait_ack(void)
  50          {
  51                  uint8   rt = TRUE ,ret;
  52                  uint32 i;
  53                  rwdisk.state = 0;
  54                  uint8 tempbuff[512];
  55                  while(0xff!=rwdisk.state)
C51 COMPILER V7.06   UDISK                                                                 07/01/2007 16:03:04 PAGE 2   

  56                  {
  57                          ret = Comm.ReadBlock(tempbuff, 6,500);                                     // 读出数据
  58                          if(ret==0)
  59                          {
  60                                  for(i=0;i<6;i++)
  61                                          ReceOneChar(tempbuff[i]);
  62                          }
  63                          else
  64                          {
  65                                  rt = FALSE;
  66                                  break;
  67                          }
  68                          
  69                          if(rwdisk.rlen==0)
  70                                  break;
  71                          ret = Comm.ReadBlock(tempbuff, rwdisk.rlen,500);                                           // 读出数据
  72                          if(ret==0)
  73                          {
  74                                  for(i=0; i<rwdisk.rlen; i++)
  75                                          ReceOneChar(tempbuff[i]);
  76                          }
  77                          else
  78                          {
  79                                  rt = FALSE;
  80                                  break;
  81                          }
  82                  }
  83                  return rt;
  84          }
  85          */
  86          //********************************************************************************************************
  87          // 函数名称:ReceOneChar
  88          // 输入参数:ReceCharacter
  89          // 输出参数:无
  90          // 功能描述:接收一个字符处理
  91          //           要求:接收到一个字符后立即传入该函数处理。
  92          //********************************************************************************************************
  93          void ReceOneChar(uint8 ReceChar)
  94          {
  95   1              static uint8    HFNumber = 0;
  96   1              static uint8    HFBuffer[6];
  97   1              static uint16   DataLen;
  98   1              static uint8    state=0;
  99   1      
 100   1              if(rwdisk.state!=0)
 101   1                      return;
 102   1      
 103   1              switch(state)
 104   1              {
 105   2                      case 0:
 106   2                              HFBuffer[HFNumber++] = ReceChar;
 107   2                              if(HFBuffer[0]!='S')                            // 
 108   2                                      if( HFNumber == 2 )
 109   2                                              if(HFBuffer[1]!=':')
 110   2                                                      HFNumber = 0;
 111   2                              if( HFNumber == 6 )
 112   2                              {       HFNumber = 0;
 113   3                                      rwdisk.cmd      = HFBuffer[2];
 114   3                                      rwdisk.cmds     = HFBuffer[3];
 115   3                                      DataLen = HFBuffer[4] + HFBuffer[5]*0x100;
 116   3                                      rwdisk.rlen = DataLen;
 117   3                                      rwdisk.wlen = 0;
C51 COMPILER V7.06   UDISK                                                                 07/01/2007 16:03:04 PAGE 3   

 118   3                                      if(DataLen!=0)
 119   3                                      {
 120   4                                              state = 1;
 121   4                                      }
 122   3                                      else
 123   3                                      {
 124   4                                              rwdisk.state = 0xff;            // 设置状态
 125   4                                      }
 126   3                              }
 127   2                              break;
 128   2                      case 1:
 129   2                              rwdisk.write_ptr[rwdisk.wlen++] = ReceChar;
 130   2                              if(DataLen==rwdisk.wlen)
 131   2                              {
 132   3                                      rwdisk.state = 0xff;            // 设置状态
 133   3                                      state = 0;
 134   3                              }
 135   2                              break;
 136   2                      default :
 137   2                  break;
 138   2              }
 139   1      }
 140          
 141          
 142          void DriverIni(void)
 143          {
 144   1         FreeFHandle();                               // 释入文件句柄
 145   1         rwdisk.state = 0xff;                 // 不接收串口数据
 146   1      }
 147          
 148          /*********************************************************************************************************
 149          ** 函数名称: GetFHandle
 150          ** 功能描述: 获取文件操作包柄
 151          **
 152          ** 输 入: 无
 153          ** 输 出: 无
 154          ********************************************************************************************************/
 155          FHANDLE *GetFHandle(void)
 156          {
 157   1              if(g_handle.fh==0xff)
 158   1                      return &g_handle;
 159   1              else
 160   1                      return NULL;
 161   1      }
 162          
 163          /*********************************************************************************************************
 164          ** 函数名称: FreeFHandle
 165          ** 功能描述: 释放文件操作句柄
 166          **
 167          ** 输 入: 无
 168          ** 输 出: 无
 169          ********************************************************************************************************/
 170          void FreeFHandle(void)
 171          {
 172   1              g_handle.fh = 0xff;
 173   1              g_handle.fsize = 0;
 174   1      }
 175          
 176          
 177          
 178          
 179          
C51 COMPILER V7.06   UDISK                                                                 07/01/2007 16:03:04 PAGE 4   

 180          /*********************************************************************************************************
 181          ** 函数名称: GetDiskInfo
 182          ** 功能描述: 获取系统信息
 183          **
 184          ** 输 入: sysinfptr:系统信息数据结构指针
 185          ** 输 出: 正常设置返回:TRUE,出错返回:FALSE
 186          ********************************************************************************************************/
 187          uint8 GetDiskInfo(SYSINF *sysinfptr)
 188          {
 189   1              uint8   reqbuff[14];
 190   1              
 191   1              reqbuff[0] = 'U';       reqbuff[1]= ':';        reqbuff[2] = 0x00;
 192   1              reqbuff[3] = 0;         reqbuff[4] = 0; reqbuff[5] = 0;
 193   1              SendResponse(reqbuff,6);                // 发送命令请求帧
 194   1              sysinfptr->DiskIn = 0;                  //  标记U盘不存在
 195   1              rwdisk.write_ptr = reqbuff;
 196   1      
 197   1              if(wait_ack())                                  // 等待应答
 198   1              {
 199   2                      if(rwdisk.cmds==0)
 200   2                      {       sysinfptr->Baud = reqbuff[0];
 201   3                              sysinfptr->Year = reqbuff[1];
 202   3                              sysinfptr->Month= reqbuff[2];
 203   3                              sysinfptr->Dom = reqbuff[3];
 204   3                              sysinfptr->Hour = reqbuff[4];
 205   3                              sysinfptr->Min = reqbuff[5];
 206   3                              sysinfptr->Sec = reqbuff[6];
 207   3                                      
 208   3                              sysinfptr->DiskIn= reqbuff[7];
 209   3                              sysinfptr->FH.fh= reqbuff[8];
 210   3                              sysinfptr->FH.fsize= reqbuff[9]+
 211   3                                                      reqbuff[10]*0x100+
 212   3                                                      reqbuff[11]*0x10000+
 213   3                                                      reqbuff[12]*0x1000000;
 214   3                              sysinfptr->version = reqbuff[13];
 215   3                              return  TRUE;
 216   3                      }
 217   2              }
 218   1              
 219   1              return  FALSE;
 220   1      }
 221          
 222          /*********************************************************************************************************
 223          ** 函数名称: SetDiskInfo
 224          ** 功能描述: 设置系统信息
 225          **
 226          ** 输 入: sysinfptr:系统信息数据结构指针
 227          ** 输 出: 正常设置返回:TRUE,出错返回:FALSE
 228          ********************************************************************************************************/
 229          uint8  SetDiskInfo(SYSINF *sysinfptr)
 230          {
 231   1              uint8   reqbuff[13];
 232   1              reqbuff[0] = 'U';       reqbuff[1]= ':';        reqbuff[2] = 0x01;
 233   1              reqbuff[3] = 0;         reqbuff[4] = 7; reqbuff[5] = 0;
 234   1              
 235   1              reqbuff[6] = sysinfptr->Baud ;
 236   1              reqbuff[7] = sysinfptr->Year ;
 237   1              reqbuff[8] = sysinfptr->Month;
 238   1              reqbuff[9] = sysinfptr->Dom;
 239   1              reqbuff[10] = sysinfptr->Hour;
 240   1              reqbuff[11] = sysinfptr->Min;
 241   1              reqbuff[12] = sysinfptr->Sec;
C51 COMPILER V7.06   UDISK                                                                 07/01/2007 16:03:04 PAGE 5   

 242   1                                      
 243   1              SendResponse(reqbuff,13);               // 发送命令请求帧
 244   1              
 245   1              rwdisk.write_ptr = reqbuff;
 246   1              if(wait_ack())// 等待应答
 247   1              {
 248   2                      if(rwdisk.cmds==0)
 249   2                      {       
 250   3                              return  TRUE;
 251   3                      }
 252   2              }
 253   1              
 254   1              return  FALSE;
 255   1      }
 256          
 257          /*********************************************************************************************************
 258          ** 函数名称: FileOpen
 259          ** 功能描述: 以指定方式打开文件
 260          **
 261          ** 输 入: DirFileName:用户使用的文件名
 262          ** 输 出: 文件句柄,NULL为不能打开
 263          **         非零值为打开文件的指针
 264          **
 265          ********************************************************************************************************/
 266                  FHANDLE *FileOpen(char *DirFileName)
 267          {
 268   1              uint8   reqbuff[6];
 269   1              uint8   namelen;
 270   1              FHANDLE *handle;
 271   1              handle = GetFHandle();
 272   1              if(handle==NULL)                                // 没有可用的包柄
 273   1                      return handle;
 274   1              reqbuff[0] = 'U';reqbuff[1]= ':';
 275   1              reqbuff[2] = 0x10;reqbuff[3] = 0xff;
 276   1              namelen = strlen(DirFileName);                  // 获取文件名字符串长度
 277   1              reqbuff[4] = namelen; reqbuff[5] = 0;
 278   1              
 279   1              SendResponse(reqbuff,6);                        // 发送命令请求帧
 280   1              SendResponse((uint8*)DirFileName,namelen);      // 发送命令请求帧
 281   1              

⌨️ 快捷键说明

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