📄 fat16.lst
字号:
127 5 SONG[l * 11 + i] = Page_Buf[j * 32 + i];
128 5 }
129 4 l++;
130 4 }
131 3 }
132 2 k++;
133 2 ReadPage(0 + k / 32, k % 32, Page_Buf);
134 2 }
135 1 return (l);
136 1 }
137 int ReadSector(unsigned char *Name, unsigned char *databuff)
138 {
139 1 int i, k, Page;
140 1 unsigned long CurrentSector;
141 1 if (DataRead == 0) //第一次读取,先查找文件,然后进行读取
142 1 {
143 2 Page = BootSector + RsdSector + 2 * SectorofFatSize;
144 2 ReadPage(0 + Page / 32, Page % 32, databuff);
145 2 while (databuff[0] != 0)
146 2 {//遍历整个目录
147 3 for (i=0; i<16; i++)
148 3 {
149 4 if (!memcmp(Name, &databuff[i * 32], 11))
150 4 {
151 5 Current_Cluster = databuff[32 * i + 27] * 256 + databuff[32 * i + 26];
152 5 printuf("Current_Cluster : %x", (Current_Cluster & 0xff00) >> 8);
153 5 printuf("%x\n", Current_Cluster);
154 5 for (k=31; k>27; k--)
155 5 {
156 6 DataRemain = (DataRemain << 8) | databuff[i * 32 + k];
157 6 }
158 5 //ReadPage((Current_Cluster+Sector_Offset)/32,(Current_Cluster+Sector_Offset)%32,databuff);
159 5
160 5 CurrentSector = (Current_Cluster - 2) * SecPerClus + FirstDataSec;
161 5 ReadPage(CurrentSector / 32, CurrentSector % 32, databuff);
162 5
163 5 DataRead += 512;
164 5 DataRemain -= 512;
165 5 if (DataRemain < 0)
166 5 {
167 6 DataRead = 0;
168 6 return (DataRemain + 512);
169 6 }
170 5 else
171 5 {
172 6 return (512);
173 6 }
C51 COMPILER V7.07 FAT16 11/20/2006 17:50:30 PAGE 4
174 5 }
175 4 }
176 3 Page++;
177 3 ReadPage(0 + Page / 32, Page % 32, databuff);
178 3 }
179 2 printu("\nfile is not found!");
180 2 return (0);
181 2 }
182 1 else
183 1 {
184 2 // if((Current_Cluster+Sector_Offset+DataRead/BytesPerSec)%32) Current_Cluster=NextCluster(Current_Clust
-er);
185 2 // ReadPage((Current_Cluster+Sector_Offset)/32,(Current_Cluster+Sector_Offset+DataRead/BytesPerSec)%32,d
-atabuff);
186 2 Current_Cluster++;
187 2 CurrentSector = (Current_Cluster - 2) * SecPerClus + FirstDataSec;
188 2 ReadPage(CurrentSector / 32, CurrentSector % 32, databuff);
189 2
190 2 DataRead += 512;
191 2 // if(!((Current_Cluster+Sector_Offset+DataRead/BytesPerSec)%32)) Current_Cluster=NextCluster(Current_Cl
-uster+32);
192 2 // if(!((Current_Cluster+Sector_Offset+DataRead/BytesPerSec)%32)) Current_Cluster+=32;//默认歌曲文件是顺
-序存放的。
193 2 DataRemain -= 512;
194 2 if (DataRemain < 0)
195 2 {
196 3 DataRead = 0;
197 3 return (DataRemain + 512);
198 3 }
199 2 else return (512);
200 2 }
201 1
202 1 }
203
204 unsigned int NextCluster(unsigned int CurrentCluster)
205 {
206 1 unsigned int i, j;
207 1 if (FAT_TYPE == FAT12)
208 1 {
209 2 ReadPage(Begin_Cluster + (BootSector + RsdSector + (CurrentCluster * 3 / 2) / BytesPerSec) / SecPerClus,
-
210 2 (BootSector + RsdSector + (CurrentCluster * 3 / 2) / BytesPerSec) % SecPerClus, Page_Buf);
211 2 if (CurrentCluster % 2 == 0)
212 2 {
213 3 j = Page_Buf[(CurrentCluster * 3 / 2) % BytesPerSec + 1];
214 3 i = Page_Buf[(CurrentCluster * 3 / 2) % BytesPerSec] | (j << 8);
215 3 i &= 0x0fff;
216 3 }
217 2 else
218 2 {
219 3 j = Page_Buf[(CurrentCluster * 3 / 2) % BytesPerSec + 1];
220 3 i = Page_Buf[(CurrentCluster * 3 / 2) % BytesPerSec] | (j << 8);
221 3 i = (i >> 4);
222 3 }
223 2 return (i);
224 2 }
225 1 else if (FAT_TYPE == FAT16)
226 1 {
227 2 ReadPage(Begin_Cluster + (BootSector+RsdSector + (CurrentCluster * 2) / BytesPerSec) / 32,
228 2 (BootSector + RsdSector + (CurrentCluster * 2) / BytesPerSec) % 32, Page_Buf);
229 2 i = Page_Buf[(CurrentCluster * 2) % BytesPerSec + 1] * 256 + Page_Buf[(CurrentCluster * 2) % BytesPerSec
-];
C51 COMPILER V7.07 FAT16 11/20/2006 17:50:30 PAGE 5
230 2 return (i);
231 2 }
232 1 else if (FAT_TYPE == FAT32)
233 1 {
234 2 ReadPage(Begin_Cluster + (BootSector+RsdSector + (CurrentCluster * 4) / BytesPerSec) / SecPerClus, (Boot
-Sector + RsdSector + (CurrentCluster * 4) / BytesPerSec) % SecPerClus, Page_Buf);
235 2 i = Page_Buf[(CurrentCluster * 4) % BytesPerSec + 3] * 256 * 256 * 256 + Page_Buf[(CurrentCluster * 4) %
- BytesPerSec + 2]
236 2 * 256 * 256 + Page_Buf[(CurrentCluster * 4) % BytesPerSec + 1] * 256 + Page_Buf[(CurrentCluster * 4) %
-BytesPerSec];
237 2 return (i);
238 2 }
239 1 }
240
241
242
243
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2842 ----
CONSTANT SIZE = 134 ----
XDATA SIZE = 37 30
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -