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

📄 usb_disk.lst

📁 基于at89c51单片机的mp3 U盘原理实验代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 357   1              nBeginPage = PG.addr[3]&0x1f;
 358   1              UEPNUM = 0x02;  
 359   1              delay();
 360   1              while(!(K9F_FUN & RB)); 
 361   1      
 362   1          if(nBeginPage>0)
 363   1                {
 364   2                   for(i=0;i<nBeginPage;i++)
C51 COMPILER V7.50   USB_DISK                                                              01/15/2006 18:40:26 PAGE 7   

 365   2                         { 
 366   3                                K9F_FUN = COMMAND;
 367   3                                K9F5608 = 0x00;
 368   3                                K9F_FUN = ADDRESS;
 369   3                    K9F5608 = 0;                                       //A0-A7
 370   3                    K9F5608 = (PG.addr[3]&0xe0)|i;     //A9-A16
 371   3                        K9F5608 = PG.addr[2];                          //A17-A24 
 372   3                                K9F_FUN = D_DATA;
 373   3                    delay();
 374   3                            while(!(K9F_FUN & RB)); 
 375   3      
 376   3                                K9F_FUN = COMMAND;
 377   3                                K9F5608 = 0x8a;
 378   3                                K9F_FUN = ADDRESS;
 379   3                    K9F5608 = 0;                                                //A0-A7
 380   3                    K9F5608 = BuffBlock|(PG.addr[3]&0x20)|i;  //A9-A16
 381   3                        K9F5608 = 0xff;                                         //A17-A24 
 382   3                                K9F_FUN = D_DATA;
 383   3                                delay();
 384   3                            while(!(K9F_FUN & RB));
 385   3                         }
 386   2                       nBeginPage=0;
 387   2                }
 388   1      
 389   1              while(length>0)
 390   1                {
 391   2                       K9F_FUN = COMMAND;
 392   2                   K9F5608 = 0x80;
 393   2                   K9F_FUN = ADDRESS;
 394   2                   K9F5608 = 0;                                                         //A0-A7        
 395   2                       K9F5608 = (PG.addr[3]&0x3f)|BuffBlock;   //A9-A16  
 396   2                       K9F5608 = 0xff;                                                  //A17-A24
 397   2                       K9F_FUN = D_DATA;
 398   2                       for(i=0;i<8;i++)
 399   2                         {
 400   3                                while (!(UEPINT & EP2));      
 401   3                                WriteFlash();
 402   3                                UEPSTAX &= 0xB9;
 403   3                         }
 404   2                       K9F_FUN = COMMAND;
 405   2                       K9F5608 = 0x10;
 406   2                       K9F_FUN = D_DATA;
 407   2                       length--;      
 408   2                       delay();
 409   2                       while(!(K9F_FUN & RB));
 410   2      
 411   2                   if(((PG.addr[3]&0x1f)==0x1f)||(length==0))
 412   2                         {
 413   3                         
 414   3                                  for(i=((PG.addr[3]&0x1f)+1);i<32;i++)
 415   3                           {
 416   4                             K9F_FUN = COMMAND;
 417   4                                 K9F5608 = 0x00;
 418   4                                 K9F_FUN = ADDRESS;
 419   4                         K9F5608 = 0;                                              //A0-A7  
 420   4                         K9F5608 = (PG.addr[3]&0xe0)|i;            //A9-A16
 421   4                             K9F5608 = PG.addr[2];                         //A17-A24 
 422   4                                 K9F_FUN = D_DATA;
 423   4                                 delay();
 424   4                                 while(!(K9F_FUN & RB));
 425   4      
 426   4                                 K9F_FUN = COMMAND;
C51 COMPILER V7.50   USB_DISK                                                              01/15/2006 18:40:26 PAGE 8   

 427   4                                 K9F5608 = 0x8a;
 428   4                                 K9F_FUN = ADDRESS;
 429   4                         K9F5608 = 0;                                                 //A0-A7
 430   4                         K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
 431   4                             K9F5608 = 0xff;                                      //A17-A24 
 432   4                                 K9F_FUN = D_DATA;
 433   4                                 delay();
 434   4                                 while(!(K9F_FUN & RB));
 435   4                           }
 436   3                                      
 437   3                                K9F_FUN = COMMAND;
 438   3                    K9F5608 = 0x60;                            //擦除当前block
 439   3                    K9F_FUN = ADDRESS;
 440   3                    K9F5608 = PG.addr[3];          //A9-A16
 441   3                        K9F5608 = PG.addr[2];                  //A17-A24 
 442   3                    K9F_FUN = COMMAND;
 443   3                    K9F5608 = 0xd0;
 444   3                    K9F_FUN = D_DATA;
 445   3                                delay();
 446   3                            while(!(K9F_FUN & RB));        //等待操作完成  
 447   3      
 448   3                                for(i=0;i<32;i++)     
 449   3                                  {
 450   4                                         K9F_FUN = COMMAND;
 451   4                                         K9F5608 = 0x00;
 452   4                                         K9F_FUN = ADDRESS;
 453   4                         K9F5608 = 0;                                         //A0-A7
 454   4                         K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
 455   4                             K9F5608 = 0xff;                                  //A17-A24 
 456   4                                         K9F_FUN = D_DATA;
 457   4                                         delay();
 458   4                                 while(!(K9F_FUN & RB)); 
 459   4      
 460   4                                         K9F_FUN = COMMAND;
 461   4                                         K9F5608 = 0x8a;  
 462   4                                         K9F_FUN = ADDRESS;
 463   4                         K9F5608 = 0;                                            //A0-A7
 464   4                         K9F5608 = (PG.addr[3]&0xe0)|i;      //A9-A16
 465   4                             K9F5608 = PG.addr[2];                       //A17-A24 
 466   4                                         K9F_FUN = D_DATA;
 467   4                                         delay();
 468   4                                 while(!(K9F_FUN & RB));
 469   4                                  }
 470   3      
 471   3                                if(length>0)
 472   3                                  {
 473   4                                         K9F_FUN = COMMAND;
 474   4                         K9F5608 = 0x60;
 475   4                         K9F_FUN = ADDRESS;
 476   4                         K9F5608 = (PG.addr[3]&0x20)|BuffBlock;  //A9-A16
 477   4                             K9F5608 = 0xff;                                     //A17-A24 
 478   4                         K9F_FUN = COMMAND;
 479   4                         K9F5608 = 0xD0;
 480   4                         K9F_FUN = D_DATA;
 481   4                                         delay();
 482   4                                         while(!(K9F_FUN & RB));
 483   4                                      }
 484   3                         }
 485   2                        PG.page++;
 486   2                }
 487   1      
 488   1              TransmitCSW();  
C51 COMPILER V7.50   USB_DISK                                                              01/15/2006 18:40:26 PAGE 9   

 489   1      }       
 490          
 491          void main_rxdone()
 492          {
 493   1        unsigned char data i;
 494   1        unsigned char data Buf[64];
 495   1      
 496   1        i = ReadEp(2,Buf);
 497   1      
 498   1               P3_5 =0;
 499   1               bulk_CSW[4] = Buf[4];  bulk_CSW[5] = Buf[5]; bulk_CSW[6] = Buf[6]; bulk_CSW[7] = Buf[7];
 500   1               for(i=0;i<12;i++) bulk_CBW.CBWCB[i] = Buf[i+15];
 501   1               switch(bulk_CBW.CBWCB[0])
 502   1                      {
 503   2                              case Inquiry                         :WriteEpBulk(1,36,B_InquiryData);break;
 504   2                              case Mode_Sense                      :SCSI_Mode_Sense();              break;
 505   2                              case Read10                                  :SCSI_Read10();                  break;
 506   2                              case Read_Capacity                   :WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);break;
 507   2                              case Read_Format_Capacities      :SCSI_Read_Format_Capacities();  break;
 508   2                              case Test_Unit_Ready         :TransmitCSW();                  break;
 509   2                              case Verify                                  :TransmitCSW();                  break;
 510   2                              case Write10                         :SCSI_Write10();                 break;
 511   2                              case Medium_Removal                  :TransmitCSW();                  break;
 512   2                      }
 513   1           P3_5 =1;
 514   1      }
 515          
 516          void Flash_Reset(void)                                               //flash reset
 517          { 
 518   1              unsigned int data i;
 519   1              K9F_FUN = COMMAND;                     
 520   1              K9F5608 = 0xff;                  //reset command
 521   1              for (i=0; i<3000; i++) ;                                         //delay        
 522   1      }
 523          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1411    ----
   CONSTANT SIZE    =    184    ----
   XDATA SIZE       =   ----      10
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25     118
   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 + -