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

📄 ch375.lst

📁 实现单片机上直接对U盘数据的读写
💻 LST
📖 第 1 页 / 共 2 页
字号:
 154   1              unsigned char mLength,k;
 155   1              XBYTE[CH375_CMD_PORT_ADDR] = 0x54;//DISK_READ
 156   1              XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)iLbaStart ;  /* LBA的最低8位 */
 157   1              XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 8 ) ;
 158   1              XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 16 ) ;
 159   1              XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 24 );  /* LBA的最高8位 */
 160   1              XBYTE[CH375_DAT_PORT_ADDR] = iSectorCount ;  /* 扇区数 */
 161   1              mBufferPoint = data_buffer;  /* 指向缓冲区起始地址 */
 162   1              for ( mBlockCount = iSectorCount * 8; mBlockCount != 0; mBlockCount -- ) {  /* 数据块计数 */
 163   2                              while(INT0); //等中断信号 
 164   2                      if (mGet_Status_CH375() == USB_INT_DISK_READ) {  /* USB存储器读数据块,请求数据读出 */
 165   3                              XBYTE[CH375_CMD_PORT_ADDR] = 0x28;      //READ_USB_DAT,即把CH375内缓冲的数据读进单片机
 166   3                              mLength = XBYTE[CH375_DAT_PORT_ADDR];  /* 后续数据的长度 */
 167   3                              k = mLength;
 168   3                              while ( mLength ) {  /* 根据长度读取数据 */
 169   4                                      *mBufferPoint = XBYTE[CH375_DAT_PORT_ADDR];  /* 读出数据并保存 */
 170   4                                      mBufferPoint ++;
 171   4                                      mLength --;
 172   4                              }
 173   3                              for(i=0;i<k;i++){printf("%c",data_buffer[i]);}                          
 174   3                              XBYTE[CH375_CMD_PORT_ADDR] = 0x55;//DISK_READ_GO
 175   3                      }
 176   2                      else {printf("Error In Read Byte\n");break;}  /* 返回错误状态 */
 177   2              }
C51 COMPILER V8.02   CH375                                                                 05/29/2008 12:04:17 PAGE 4   

 178   1              printf("\n");
 179   1              if ( mBlockCount == 0 ) {
 180   2                      while(INT0);  /* 等待中断并获取状态 */
 181   2                      if (mGet_Status_CH375()== USB_INT_SUCCESS)  printf("Success In Read Sector\n");  /* 操作成功 */
 182   2                      else printf("Error In Read Sector \n");
 183   2      
 184   2              }
 185   1              
 186   1      }       
*** WARNING C173 IN LINE 186 OF CH375.C: missing return-expression
 187          //***************************
 188           void   mWriteSector( unsigned long iLbaStart, unsigned char iSectorCount )
 189           {
 190   1              unsigned char *mBufferPoint;
 191   1              unsigned int  mBlockCount;
 192   1              unsigned char mLength;
 193   1              XBYTE[CH375_CMD_PORT_ADDR] = 0x56;//DISK_WRITE
 194   1              XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)iLbaStart ;  // LBA的最低8位
 195   1              XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 8 ) ;
 196   1              XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 16 ) ;
 197   1              XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 24 );  // LBA的最高8位 
 198   1              XBYTE[CH375_DAT_PORT_ADDR] = iSectorCount ;  // 扇区数 
 199   1              mBufferPoint = data_buffer;  // 指向缓冲区起始地址
 200   1              for ( mBlockCount = iSectorCount * 8; mBlockCount != 0; mBlockCount -- ) {  // 数据块计数
 201   2                              while(INT0); //等中断信号 
 202   2                      if (mGet_Status_CH375() == USB_INT_DISK_WRITE) {  //USB存储器读数据块,请求写数据 
 203   3                              XBYTE[CH375_CMD_PORT_ADDR] = 0x2b;      //WRITE_USB_DAT
 204   3                              mLength = 64;  // 后续数据的长度
 205   3                              XBYTE[CH375_DAT_PORT_ADDR] = 64; //每次写入数据块64个字节 
 206   3                              while ( mLength ) {  // 根据长度读取数据 
 207   4                                      XBYTE[CH375_DAT_PORT_ADDR] = *mBufferPoint;  // 写入数据 
 208   4                                      mBufferPoint ++;
 209   4                                      mLength --;
 210   4                              }
 211   3                              XBYTE[CH375_CMD_PORT_ADDR] = 0x57;//DISK_READ_GO
 212   3                      }
 213   2                      else {printf("Error In Write Byte\n");break;}  // 返回错误状态 
 214   2              }
 215   1              if ( mBlockCount == 0 ) {
 216   2                      while(INT0);  // 等待中断并获取状态
 217   2                      if (mGet_Status_CH375()== USB_INT_SUCCESS)  printf("Success In Write Sector\n");  // 操作成功 
 218   2                      else printf("Error In Write Sector \n");
 219   2      
 220   2              }
 221   1       }
 222           
 223            void main( ){
 224   1              unsigned int j;
 225   1              unsigned char sectorcount;
 226   1              unsigned long sectoraddr;
 227   1              mInitSTDIO( ); //初始化
 228   1              getchar();        //
 229   1              printf("Rest CH375, About 40ms\n");//
 230   1              mRestCH375( );
 231   1              j =  mGET_CH375_VER(); //CH375的版本号
 232   1              printf("CH375 Version:%#x\n",i);
 233   1              printf("Varify CH375,Please input data:");
 234   1              i = recv_data();
 235   1              printf("%#x\n",(unsigned int)i);
 236   1              j = mVarifyCH375(i);
 237   1              printf("Invert Date  %#x\n",j);
 238   1              if((i^j)==0xff) printf("Success to Varify CH375\n");
C51 COMPILER V8.02   CH375                                                                 05/29/2008 12:04:17 PAGE 5   

 239   1                      else printf("Error to Varify CH375\n");
 240   1              printf("Set CH375 Mode for 06\n");
 241   1              mSetmodeCH375( );
 242   1               printf("Input Hightest Byte:");
 243   1              sectoraddr= recv_data();
 244   1              printf("%ld\n",sectoraddr);
 245   1              sectoraddr<<=8;
 246   1      
 247   1              printf("Input Hight Byte:");
 248   1              sectoraddr|= recv_data();
 249   1              printf("%ld\n",sectoraddr);
 250   1              sectoraddr<<=8;
 251   1      
 252   1              printf("Input Low Byte:");
 253   1              sectoraddr|= recv_data();
 254   1              printf("%ld\n",sectoraddr);
 255   1              sectoraddr<<=8;
 256   1      
 257   1              printf("Input Lowest Byte:");
 258   1              sectoraddr|= recv_data();
 259   1              printf("%ld\n",sectoraddr);
 260   1      
 261   1              printf("Input Sector Number:");
 262   1              sectorcount= recv_data();
 263   1              printf("%d\n",(unsigned int)sectorcount);
 264   1              
 265   1               
 266   1              printf("Wait for USB\n");
 267   1              while(1){
 268   2                      while(INT0);
 269   2                      i = mGet_Status_CH375();
 270   2                      switch(i){
 271   3                              case 0x14:      printf("USB_INT_SUCCESS\n");break;
 272   3                              case 0x15: printf("USB_INT_CONNECT\n");
 273   3                                                      delay1ms(100);
 274   3                                                      mDisk_Init();   
 275   3                                                      printf( "Read %d Sector, %ld# to buffer\n",(unsigned int)sectorcount,sectoraddr );      
 276   3                                                      mReadSector(sectoraddr,sectorcount);
 277   3                                                      delay1ms(100);
 278   3                                                      printf( "Write 2 Sector 12# from buffer\n" );
 279   3                                                      mWriteSector(12,2);
 280   3                                                      break;
 281   3      
 282   3                              case 0x16: printf("USB_INT_DISCONNECT\n");      break;
 283   3                              case 0x17: printf("USB_INT_BUS_OVER\n");        break;
 284   3                              case 0x1D: printf("USB_INT_DISK_READ\n");       break;
 285   3                              case 0x1E: printf("USB_INT_DISK_WRITE\n");      break;
 286   3                              case 0x1F: printf("USB_INT_DISK_ERR\n");        break;
 287   3                              default:        printf("OTHER INFORMASSAGE\n"); break;
 288   3                      }
 289   2                      
 290   2      
 291   2              }
 292   1       }
 293           
 294           
 295           
 296           
 297           
 298                                                    


C51 COMPILER V8.02   CH375                                                                 05/29/2008 12:04:17 PAGE 6   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1419    ----
   CONSTANT SIZE    =    722    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      37
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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