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

📄 u_func_b.lst

📁 c8051f020+CH375读写U盘文件的程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   U_FUNC_B                                                              07/21/2008 09:40:01 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE U_FUNC_B
OBJECT MODULE PLACED IN U_func_b.OBJ
COMPILER INVOKED BY: C:\keil c51\C51\BIN\C51.EXE U_func_b.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<c8051f020.h>
   2          #include<intrins.h>
   3          #include"lcd.h"
   4          #include"read_U.h"
   5          #include"read_U_b.h"
   6          #include"read_U_a.h"
   7          //#include"infrared_receive.h"
   8          #include<stdlib.h>
   9          
  10          
  11          void CH375HM_INDEX_WR_b(index_b)
  12          {
  13   1      
  14   1      P5=index_b;
  15   1      USB_A0b=1;
  16   1      //P74OUT   = 0x0C;
  17   1      USB_RDb=1;
  18   1      
  19   1      USB_CSb=0;
  20   1      USB_WRb=0;
  21   1      Delay();
  22   1      USB_WRb=1;
  23   1      USB_CSb=1;
  24   1      USB_A0b=1;
  25   1      P5=0xff;
  26   1      }
  27          void CH375HM_DATA_WR_b(Data)
  28          { 
  29   1      P5=Data;
  30   1      //P74OUT   = 0x0C;
  31   1      USB_A0b=0;
  32   1      USB_CSb=0;
  33   1      USB_WRb=0;
  34   1      Delay();
  35   1      USB_WRb=1;
  36   1      USB_CSb=1;
  37   1      USB_A0b=1;
  38   1      P5=0xff;
  39   1      }
  40          
  41          unsigned char CH375HM_DATA_RD_b(void)
  42          {
  43   1       unsigned char m; 
  44   1      //P74OUT   = 0x0C;
  45   1       USB_A0b=0;
  46   1       USB_CSb=0;
  47   1       USB_RDb=0;
  48   1       Delay();
  49   1       m=P5;
  50   1       USB_RDb=1;
  51   1       USB_CSb=1;
  52   1       USB_A0b=1;
  53   1       return (m);
  54   1      }
  55          
C51 COMPILER V8.02   U_FUNC_B                                                              07/21/2008 09:40:01 PAGE 2   

  56          unsigned char Init_Disk_b()
  57          {
  58   1          unsigned char sta;
  59   1              CH375HM_INDEX_WR_b(DISK_INIT);
  60   1          Delay();
  61   1              sta=Wait_Int_b();
  62   1          while(sta!=0x14);
  63   1              sta=USB_INT_DISK_ERR;
  64   1              CH375HM_INDEX_WR_b(DISK_READY);
  65   1              Delay();
  66   1          sta=Wait_Int_b();
  67   1              CH375HM_INDEX_WR_b(  DISK_R_SENSE );  // 检查USB 存储设备的错误 
  68   1          sta = Wait_Int_b( );  // 等待中断并获取状态 
  69   1              CH375HM_INDEX_WR_b(DISK_READY);
  70   1          sta=Wait_Int_b();
  71   1              return sta;        
  72   1      }
  73          
  74          unsigned char Set_Mode_b(unsigned char mode)
  75          {
  76   1          unsigned char temp;
  77   1              CH375HM_INDEX_WR_b(SET_USB_MODE);
  78   1              CH375HM_DATA_WR_b(mode);
  79   1              temp=CH375HM_DATA_RD_b();
  80   1              return (temp);
  81   1      }
  82          
  83                  
  84          
  85          
  86          unsigned char Rd_Sector_b(unsigned long LBA)
  87          {
  88   1        unsigned char sta,i,j,Next_Num=0;
  89   1        unsigned char xdata *pt;
  90   1        sta=0x1f;
  91   1        pt=Data_Buf;
*** WARNING C182 IN LINE 91 OF U_FUNC_B.C: pointer to different objects
  92   1        CH375HM_INDEX_WR_b( DISK_READ );                        //从USB存储器读数据块 
  93   1        CH375HM_DATA_WR_b( (unsigned char)LBA );                //LBA的最低8位 
  94   1        CH375HM_DATA_WR_b( (unsigned char)( LBA >> 8 ) );
  95   1        CH375HM_DATA_WR_b( (unsigned char)( LBA >> 16 ) );
  96   1        CH375HM_DATA_WR_b( (unsigned char)( LBA >> 24 ) );      //LBA的最高8位 
  97   1        CH375HM_DATA_WR_b( 1 );                           //扇区数 
  98   1        Delay();
  99   1        for(i=0;i<9;i++)
 100   1          {
 101   2              sta=Wait_Int_b();
 102   2           if(sta==0x1f||sta==0x14) return sta;
 103   2               CH375HM_INDEX_WR_b(RD_USB_DATA);
 104   2               Next_Num=CH375HM_DATA_RD_b();
 105   2           for(j=0;j<Next_Num;j++)
 106   2                  {
 107   3                       *pt=CH375HM_DATA_RD_b();
 108   3                       pt++;
 109   3                      }
 110   2                CH375HM_INDEX_WR_b(DISK_RD_GO);
 111   2               }
 112   1      return 0xff;
 113   1      }
 114          
 115          void Wr_Sector_b(unsigned long LBA)
 116          {
C51 COMPILER V8.02   U_FUNC_B                                                              07/21/2008 09:40:01 PAGE 3   

 117   1       unsigned char sta,i,j;
 118   1        unsigned char xdata *pt;
 119   1        sta=0x1f;
 120   1        pt=Data_Buf;
*** WARNING C182 IN LINE 120 OF U_FUNC_B.C: pointer to different objects
 121   1        CH375HM_INDEX_WR_b( DISK_WRITE );                        // 写数据块到USB存储器 
 122   1        CH375HM_DATA_WR_b( (unsigned char)LBA );                // LBA的最低8位 
 123   1        CH375HM_DATA_WR_b( (unsigned char)( LBA >> 8 ) );
 124   1        CH375HM_DATA_WR_b( (unsigned char)( LBA >> 16 ) );
 125   1        CH375HM_DATA_WR_b( (unsigned char)( LBA >> 24 ) );      // LBA的最高8位 
 126   1        CH375HM_DATA_WR_b( 1 );                           // 扇区数  
 127   1        Delay();
 128   1        for(i=0;i<9;i++)
 129   1          {
 130   2           sta=sta=Wait_Int_b();
 131   2           if(sta==0x1f||sta==0x14) return;
 132   2               CH375HM_INDEX_WR_b(WR_USB_DATA7);
 133   2               CH375HM_DATA_WR_b(64);
 134   2               for(j=0;j<64;j++)
 135   2                 {
 136   3                  CH375HM_DATA_WR_b(*pt);
 137   3                      pt++;
 138   3                 }
 139   2               CH375HM_INDEX_WR_b(DISK_WR_GO);
 140   2              }
 141   1      }
 142          
 143          
 144          unsigned char Wait_Int_b()
 145          {
 146   1       unsigned sta=0,temp=0;
 147   1       while(USB_INTb); 
 148   1      
 149   1       CH375HM_INDEX_WR_b(GET_STATUS);
 150   1       Delay();
 151   1       sta=CH375HM_DATA_RD_b();
 152   1       return sta;
 153   1      }
 154          
 155          unsigned char Get_Base_b()
 156          {
 157   1       unsigned char a,b;
 158   1       unsigned char xdata *pt;
 159   1       Rd_Sector_b(0x00000000);
 160   1       pt=Data_Buf;
*** WARNING C182 IN LINE 160 OF U_FUNC_B.C: pointer to different objects
 161   1       a=*pt;b=*(pt+1);         
 162   1       if(a!=0xeb&&b!=0x58)
 163   1          {
 164   2               hidd_sect_b=*(pt+0x1c6);
 165   2               Rd_Sector_b( (unsigned long)hidd_sect_b );
 166   2              }
 167   1       a=*pt;b=*(pt+1);
 168   1       if(a==0xeb&&b==0x58)
 169   1         {
 170   2          hidd_sect_b=*(pt+0x1c);
 171   2              byte_sect_b=*(pt+0x0b)+(*(pt+0x0c)<<8);
 172   2              sect_clust_b=*(pt+0x0d);
 173   2              resv_sect_b=*(pt+0x0e)+(*(pt+0x0f)<<8);
 174   2          sect_fat_b=*(pt+0x24)+(*(pt+0x25)<<8);
 175   2              root_b=hidd_sect_b+resv_sect_b+2*sect_fat_b;
 176   2              return 0x14;
C51 COMPILER V8.02   U_FUNC_B                                                              07/21/2008 09:40:01 PAGE 4   

 177   2         }
 178   1       else return 0x1f; 
 179   1      }
 180          
 181          
 182          void Show_Disk_b()
 183          {
 184   1       unsigned char i;
 185   1       unsigned char  *disk_name;              
 186   1       unsigned char xdata *pt;
 187   1       unsigned int data charact;                      
 188   1       Rd_Sector_b(root_b);
 189   1       pt=Data_Buf;
*** WARNING C182 IN LINE 189 OF U_FUNC_B.C: pointer to different objects
 190   1       for(i=0;i<16;i++)
 191   1         {
 192   2      //   charact=Data_Buf[0x0b+i*32];       //这种也赋不了
 193   2              charact=*(pt+0x0b+i*32);          //charact不定义为data就赋不了值。???
 194   2          if(charact==0x08) 
 195   2             {
 196   3              disk_name=pt+i*32;                //disk_name定义成指向xdata也赋不了值。???
 197   3              *(disk_name+11)=0;
 198   3              LCD_Printf(2,2,disk_name);
 199   3              return;
 200   3             }
 201   2         }
 202   1      
 203   1      }  
 204          
 205          
 206          void Get_Lfat_b()
 207          {
 208   1       unsigned char xdata *pt;
 209   1       unsigned char temp1,temp2,i=0,*na,nai=0;
 210   1       unsigned int Temp_Ofst;
 211   1       unsigned char which[26]={1,3,5,7,9,14,16,18,20,22,24,28,30};  //确定长文件名储存的地方
 212   1       pt=Data_Buf;
*** WARNING C182 IN LINE 212 OF U_FUNC_B.C: pointer to different objects
 213   1       na=Fat[Currt_File].name;
 214   1       if(St_Ofst_b==0)                //若短文件名在扇区的第一个32字节,则指向上一个扇区的最后32字节
 215   1          {
 216   2               Rd_Sector_b(Rd_Rec.Last_Sect);
 217   2               Temp_Ofst=480;           
 218   2              }
 219   1       else Temp_Ofst=St_Ofst_b-32;//若短文件名不在本扇区的第一个32字节,则指向上一个32字节
 220   1       do{  //读长文件名  
 221   2          while(i<13)
 222   2              {
 223   3          temp1=*(pt+Temp_Ofst+which[i]);
 224   3              if(temp1==0x2e) 
 225   3                {
 226   4                 *(na+nai)=0;
 227   4                 break;
 228   4                }
 229   3              temp2=*(pt+Temp_Ofst+which[i]+1);
 230   3              if(temp2!=0)
 231   3                {  
 232   4                 *(na+nai)=0x7e;
 233   4                 *(na+nai+1)=0x31;
 234   4                 *(na+nai+2)=0;
 235   4                 break;
 236   4                }                                      
C51 COMPILER V8.02   U_FUNC_B                                                              07/21/2008 09:40:01 PAGE 5   

 237   3              *(na+nai)=temp1;
 238   3              nai++;
 239   3              i++;
 240   3              }
 241   2              if(Temp_Ofst==0)  //若已在本扇区最开始
 242   2          {
 243   3               if(*(pt+Temp_Ofst)<0x3f) break; //若是长文件名的最后一段
 244   3               else
 245   3                 {
 246   4                  Rd_Sector_b(Rd_Rec.Last_Sect);
 247   4                  Temp_Ofst=512;

⌨️ 快捷键说明

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