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

📄 fat.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0242 5524              clr R5
 0244 47FC              sbrc R4,7
 0246 5094              com R5
 0248 80907D00          lds R8,_DiskFATInfo+2
 024C 90907E00          lds R9,_DiskFATInfo+2+1
 0250 60907B00          lds R6,_DiskFATInfo
 0254 70907C00          lds R7,_DiskFATInfo+1
 0258 620C              add R6,R2
 025A 731C              adc R7,R3
 025C 841C              adc R8,R4
 025E 951C              adc R9,R5
 0260 70928400          sts _DiskFATInfo+8+1,R7
 0264 60928300          sts _DiskFATInfo+8,R6
 0268 90928600          sts _DiskFATInfo+8+2+1,R9
 026C 80928500          sts _DiskFATInfo+8+2,R8
 0270                   .dbline 64
 0270           ; 
 0270           ;   DiskFATInfo.FDT_LBA = DiskFATInfo.FAT_LBA + DiskFATInfo.SectorsPerFAT*DiskFATInfo.NumOfFATs;
 0270 20908D00          lds R2,_DiskFATInfo+18
 0274 3324              clr R3
 0276 4424              clr R4
 0278 5524              clr R5
 027A 80909000          lds R8,_DiskFATInfo+19+2
 027E 90909100          lds R9,_DiskFATInfo+19+2+1
 0282 60908E00          lds R6,_DiskFATInfo+19
 0286 70908F00          lds R7,_DiskFATInfo+19+1
 028A 5A92              st -y,R5
 028C 4A92              st -y,R4
 028E 3A92              st -y,R3
 0290 2A92              st -y,R2
 0292 8301              movw R16,R6
 0294 9401              movw R18,R8
 0296 0E940000          xcall empy32u
 029A 40908500          lds R4,_DiskFATInfo+8+2
 029E 50908600          lds R5,_DiskFATInfo+8+2+1
 02A2 20908300          lds R2,_DiskFATInfo+8
 02A6 30908400          lds R3,_DiskFATInfo+8+1
 02AA 200E              add R2,R16
 02AC 311E              adc R3,R17
 02AE 421E              adc R4,R18
 02B0 531E              adc R5,R19
 02B2 30928000          sts _DiskFATInfo+4+1,R3
 02B6 20927F00          sts _DiskFATInfo+4,R2
 02BA 50928200          sts _DiskFATInfo+4+2+1,R5
 02BE 40928100          sts _DiskFATInfo+4+2,R4
 02C2                   .dbline 68
 02C2           ;  
 02C2           ; 
 02C2           ;   
 02C2           ;   DiskFATInfo.FDT_StartClustor = Fat_Buffer[0x2C] |Fat_Buffer[0x2D] << 8|(uint32)Fat_Buffer[0x2E]<<16|(uint32)Fat_Buffer[0x2F]<<24;
 02C2 2090C700          lds R2,_Fat_Buffer+45
 02C6 3324              clr R3
 02C8 322C              mov R3,R2
 02CA 2224              clr R2
 02CC 4090C600          lds R4,_Fat_Buffer+44
 02D0 5524              clr R5
 02D2 4228              or R4,R2
 02D4 5328              or R5,R3
 02D6 1201              movw R2,R4
 02D8 4424              clr R4
 02DA 37FC              sbrc R3,7
 02DC 4094              com R4
 02DE 5524              clr R5
 02E0 47FC              sbrc R4,7
 02E2 5094              com R5
 02E4 6090C800          lds R6,_Fat_Buffer+46
 02E8 7724              clr R7
 02EA 8824              clr R8
 02EC 9924              clr R9
 02EE 4301              movw R8,R6
 02F0 6624              clr R6
 02F2 7724              clr R7
 02F4 2628              or R2,R6
 02F6 3728              or R3,R7
 02F8 4828              or R4,R8
 02FA 5928              or R5,R9
 02FC 88E1              ldi R24,24
 02FE 90E0              ldi R25,0
 0300 6090C900          lds R6,_Fat_Buffer+47
 0304 7724              clr R7
 0306 8824              clr R8
 0308 9924              clr R9
 030A 8A93              st -y,R24
 030C 8301              movw R16,R6
 030E 9401              movw R18,R8
 0310 0E940000          xcall lsl32
 0314 202A              or R2,R16
 0316 312A              or R3,R17
 0318 422A              or R4,R18
 031A 532A              or R5,R19
 031C 30928800          sts _DiskFATInfo+12+1,R3
 0320 20928700          sts _DiskFATInfo+12,R2
 0324                   .dbline 70
 0324           ; 
 0324           ;   return 1;
 0324 01E0              ldi R16,1
 0326                   .dbline -2
 0326           L1:
 0326 2296              adiw R28,2
 0328 0E940000          xcall pop_gset3
 032C                   .dbline 0 ; func end
 032C 0895              ret
 032E                   .dbend
 032E                   .dbfunc e FileExt_Compare _FileExt_Compare fc
 032E           ;              i -> R20
 032E           ;        strExt2 -> R18,R19
 032E           ;        strExt1 -> R16,R17
                        .even
 032E           _FileExt_Compare::
 032E 0E940000          xcall push_gset1
 0332                   .dbline -1
 0332                   .dbline 76
 0332           ; }
 0332           ; 
 0332           ; //****************************************************************************
 0332           ; //文件扩展名匹配,匹配成功返回真
 0332           ; uint8 FileExt_Compare(uint8 *strExt1,uint8 *strExt2)
 0332           ; {
 0332                   .dbline 79
 0332           ;     uint8 i;
 0332           ;       
 0332           ;     for(i=0; i<3; i++)
 0332 4427              clr R20
 0334 0EC0              xjmp L54
 0336           L51:
 0336                   .dbline 80
 0336           ;     {
 0336                   .dbline 81
 0336           ;         if(strExt1[i]!= strExt2[i]) break;
 0336 E42F              mov R30,R20
 0338 FF27              clr R31
 033A E20F              add R30,R18
 033C F31F              adc R31,R19
 033E 2080              ldd R2,z+0
 0340 E42F              mov R30,R20
 0342 FF27              clr R31
 0344 E00F              add R30,R16
 0346 F11F              adc R31,R17
 0348 3080              ldd R3,z+0
 034A 3214              cp R3,R2
 034C 09F0              breq L55
 034E                   .dbline 81
 034E 03C0              xjmp L53
 0350           L55:
 0350                   .dbline 82
 0350           L52:
 0350                   .dbline 79
 0350 4395              inc R20
 0352           L54:
 0352                   .dbline 79
 0352 4330              cpi R20,3
 0354 80F3              brlo L51
 0356           L53:
 0356                   .dbline 83
 0356           ;     }
 0356           ;     if(i == 3)    return 1; 
 0356 4330              cpi R20,3
 0358 11F4              brne L57
 035A                   .dbline 83
 035A 01E0              ldi R16,1
 035C 01C0              xjmp L50
 035E           L57:
 035E                   .dbline 85
 035E           ;           
 035E           ;       return 0; 
 035E 0027              clr R16
 0360                   .dbline -2
 0360           L50:
 0360 0E940000          xcall pop_gset1
 0364                   .dbline 0 ; func end
 0364 0895              ret
 0366                   .dbsym r i 20 c
 0366                   .dbsym r strExt2 18 pc
 0366                   .dbsym r strExt1 16 pc
 0366                   .dbend
 0366                   .dbfunc e GetMusicFile _GetMusicFile fV
 0366           ;        FileExt -> y+18
 0366           ; LocalOfFirstLFN -> y+14
 0366           ;      Index_tmp -> y+10
 0366           ;              n -> y+6
 0366           ;   LocalOfMusic -> y+27
 0366           ;              k -> y+25
 0366           ;              i -> y+23
 0366           ;            tem -> y+2
 0366           ;              j -> y+21
                        .even
 0366           _GetMusicFile::
 0366 0E940000          xcall push_gset5
 036A A197              sbiw R28,33
 036C                   .dbline -1
 036C                   .dbline 91
 036C           ; }     
 036C           ; 
 036C           ; //****************************************************************************
 036C           ; //获取音乐文件
 036C           ; void GetMusicFile(void)
 036C           ; {
 036C                   .dbline 94
 036C           ;   uint16  i,j,k;
 036C           ;   uint32  tem;        //记录目录起始位置
 036C           ;   uint32  Index_tmp=1;  //记录目录编号,不从0开始,因为第0项是系统占用的
 036C 41E0              ldi R20,1
 036E 50E0              ldi R21,0
 0370 60E0              ldi R22,0
 0372 70E0              ldi R23,0
 0374 FE01              movw R30,R28
 0376 4287              std z+10,R20
 0378 5387              std z+11,R21
 037A 6487              std z+12,R22
 037C 7587              std z+13,R23
 037E                   .dbline 97
 037E           ;   uint32  LocalOfFirstLFN;
 037E           ;   uint32 n;
 037E           ;   uint16  LocalOfMusic=0;  //音乐文件的编号
 037E 0024              clr R0
 0380 1124              clr R1
 0382 1C8E              std y+28,R1
 0384 0B8E              std y+27,R0
 0386 03C5              xjmp L61
 0388           L60:
 0388                   .dbline 102
 0388           ;   uint8   FileExt[3]; 
 0388           ; 
 0388           ;       
 0388           ;   while(1)
 0388           ;   {
 0388                   .dbline 103
 0388           ;     n = DiskFATInfo.FDT_LBA+(Index_tmp/(DiskFATInfo.BytesPerSector/32));
 0388 25E0              ldi R18,5
 038A 30E0              ldi R19,0
 038C 00918A00          lds R16,_DiskFATInfo+15
 0390 10918B00          lds R17,_DiskFATInfo+15+1
 0394 0E940000          xcall lsr16
 0398 1801              movw R2,R16
 039A 4424              clr R4
 039C 5524              clr R5
 039E FE01              movw R30,R28
 03A0 6284              ldd R6,z+10
 03A2 7384              ldd R7,z+11
 03A4 8484              ldd R8,z+12
 03A6 9584              ldd R9,z+13
 03A8 5A92              st -y,R5
 03AA 4A92              st -y,R4
 03AC 3A92              st -y,R3
 03AE 2A92              st -y,R2
 03B0 8301              movw R16,R6
 03B2 9401              movw R18,R8
 03B4 0E940000          xcall div32u
 03B8 40908100          lds R4,_DiskFATInfo+4+2
 03BC 50908200          lds R5,_DiskFATInfo+4+2+1
 03C0 20907F00          lds R2,_DiskFATInfo+4
 03C4 30908000          lds R3,_DiskFATInfo+4+1
 03C8 200E              add R2,R16
 03CA 311E              adc R3,R17
 03CC 421E              adc R4,R18
 03CE 531E              adc R5,R19
 03D0 FE01              movw R30,R28
 03D2 2682              std z+6,R2
 03D4 3782              std z+7,R3
 03D6 4086              std z+8,R4
 03D8 5186              std z+9,R5
 03DA                   .dbline 106
 03DA           ; 
 03DA           ;     //读取FDT的相应扇区位置的内容
 03DA           ;     SD_ReadBlock(n,Fat_Buffer);
 03DA 80E0              ldi R24,<_Fat_Buffer
 03DC 90E0              ldi R25,>_Fat_Buffer
 03DE 9983              std y+1,R25
 03E0 8883              std y+0,R24
 03E2 FE01              movw R30,R28
 03E4 0681              ldd R16,z+6
 03E6 1781              ldd R17,z+7
 03E8 2085              ldd R18,z+8
 03EA 3185              ldd R19,z+9
 03EC 0E940000          xcall _SD_ReadBlock
 03F0                   .dbline 108
 03F0           ;       
 03F0           ;       tem=((Index_tmp)*32)%DiskFATInfo.BytesPerSector;      //获取相应的目录
 03F0 FE01              movw R30,R28
 03F2 2284              ldd R2,z+10
 03F4 3384              ldd R3,z+11
 03F6 4484              ldd R4,z+12
 03F8 5584              ldd R5,z+13
 03FA 40E2              ldi R20,32
 03FC 50E0              ldi R21,0
 03FE 60E0              ldi R22,0
 0400 70E0              ldi R23,0
 0402 5A92              st -y,R5
 0404 4A92              st -y,R4
 0406 3A92              st -y,R3
 0408 2A92              st -y,R2
 040A 8A01              movw R16,R20
 040C 9B01              movw R18,R22
 040E 0E940000          xcall empy32u
 0412 20908A00          lds R2,_DiskFATInfo+15
 0416 30908B00          lds R3,_DiskFATInfo+15+1
 041A 4424              clr R4
 041C 5524              clr R5
 041E 5A92              st -y,R5
 0420 4A92              st -y,R4
 0422 3A92              st -y,R3
 0424 2A92              st -y,R2
 0426 0E940000          xcall mod32u
 042A FE01              movw R30,R28
 042C 0283              std z+2,R16
 042E 1383              std z+3,R17
 0430 2483              std z+4,R18
 0432 3583              std z+5,R19
 0434                   .dbline 110
 0434           ;               
 0434           ;       if(Fat_Buffer[tem] == 0)              //后面没有文件了,文件查询完毕
 0434 80E0              ldi R24,<_Fat_Buffer
 0436 90E0              ldi R25,>_Fat_Buffer
 0438 FE01              movw R30,R28
 043A AF93              push R26
 043C BF93              push R27
 043E A281              ldd R26,z+2
 0440 B381              ldd R27,z+3
 0442 FD01              movw R30,R26
 0444 BF91              pop R27
 0446 AF91              pop R26
 0448 E80F              add R30,R24
 044A F91F              adc R31,R25
 044C 2080              ldd R2,z+0
 044E 2220              tst R2
 0450 51F4              brne L66
 0452                   .dbline 111
 0452           ;       {
 0452                   .dbline 112
 0452           ;           Index_tmp = 0;
 0452 40E0              ldi R20,0
 0454 50E0              ldi R21,0
 0456 60E0              ldi R22,0
 0458 70E0              ldi R23,0
 045A FE01              movw R30,R28
 045C 4287              std z+10,R20
 045E 5387              std z+11,R21
 0460 6487              std z+12,R22
 0462 7587              std z+13,R23

⌨️ 快捷键说明

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