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

📄 fat.lis

📁 LED条屏显示程序,但是对初学者
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module FAT.c
                        .area data(ram, con, rel)
 0000           _CHINALIB_point::
 0000                   .blkb 4
                        .area idata
 0000 00000000          .word 0,0
                        .area data(ram, con, rel)
 0004                   .dbfile E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\FAT.c
 0004                   .dbsym e CHINALIB_point _CHINALIB_point l
 0004           _UNICODE_point::
 0004                   .blkb 4
                        .area idata
 0004 00000000          .word 0,0
                        .area data(ram, con, rel)
 0008                   .dbfile E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\FAT.c
 0008                   .dbsym e UNICODE_point _UNICODE_point l
                        .area text(rom, con, rel)
 0000                   .dbfile E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\FAT.c
 0000                   .dbfunc e FATinit _FATinit fc
 0000           ; RootDirSectors -> R10,R11
 0000           ; BPB_RootEntCnt -> R10,R11
 0000           ;    BPB_FATsz16 -> R12,R13
 0000           ;    BPB_NumFATs -> R14
 0000           ; BPB_BytePerSec -> y+4
                        .even
 0000           _FATinit::
 0000 0E940000          xcall push_gset5
 0004 2697              sbiw R28,6
 0006                   .dbline -1
 0006                   .dbline 23
 0006           ; //ICC-AVR application builder : 2005-11-12 17:11:59
 0006           ; // Target : M16
 0006           ; // Crystal: 8.0000Mhz
 0006           ; // copyright:鲁军波(endylu)
 0006           ; // www.shop34612283.taobao.com
 0006           ; // www.adembed.com
 0006           ; #include <iom16v.h>
 0006           ; #include <macros.h>
 0006           ; #include "main.h"
 0006           ; 
 0006           ; uint32 CHINALIB_point=0;
 0006           ; uint32 UNICODE_point=0;
 0006           ; 
 0006           ; extern MP3_INFO mp3_info;
 0006           ; extern FAT_INFO fat_info;
 0006           ; 
 0006           ; extern uint8 buffer[512];
 0006           ; extern uint8 MP3_all_number;
 0006           ; extern uint8 name_number;
 0006           ; 
 0006           ; //=======================================================================
 0006           ; uint8 FATinit(void)
 0006           ; {/*SD卡的变量*/
 0006                   .dbline 35
 0006           ;  
 0006           ;  uint16 BPB_BytePerSec;          //每扇区的字节数     512
 0006           ;   
 0006           ;  uint8  BPB_NumFATs;             //此卷中FAT表的份数;
 0006           ;  uint16 BPB_RootEntCnt;          //fat12/16根目录的目录项数;
 0006           ;  uint16 BPB_FATsz16;             //FAT12/FAT16一个FAT表占的扇区数(FAT32此项必须为0);
 0006           ;  
 0006           ;  uint16 RootDirSectors;          //根目录所占的扇区数
 0006           ;  
 0006           ;  /*变量取值*/
 0006           ;  
 0006           ;  if(SD_read_sector2(0,&fat_info.Relative,1))
 0006 81E0              ldi R24,1
 0008 90E0              ldi R25,0
 000A 9B83              std y+3,R25
 000C 8A83              std y+2,R24
 000E 80E0              ldi R24,<_fat_info
 0010 90E0              ldi R25,>_fat_info
 0012 9983              std y+1,R25
 0014 8883              std y+0,R24
 0016 00E0              ldi R16,0
 0018 10E0              ldi R17,0
 001A 20E0              ldi R18,0
 001C 30E0              ldi R19,0
 001E 0E940000          xcall _SD_read_sector2
 0022 0023              tst R16
 0024 11F0              breq L2
 0026                   .dbline 36
 0026           ;       {
 0026                   .dbline 37
 0026           ;       return 1;
 0026 01E0              ldi R16,1
 0028 C6C0              xjmp L1
 002A           L2:
 002A                   .dbline 40
 002A           ;       }
 002A           ;  
 002A           ;  if(fat_info.Relative==0xEB)                       //判断有没有Relative Sectors
 002A 80910000          lds R24,_fat_info
 002E 8B3E              cpi R24,235
 0030 21F4              brne L4
 0032                   .dbline 41
 0032           ;     fat_info.Relative=0;
 0032 2224              clr R2
 0034 20920000          sts _fat_info,R2
 0038 0EC0              xjmp L5
 003A           L4:
 003A                   .dbline 43
 003A           ;  else
 003A           ;     SD_read_sector2(454,&fat_info.Relative,1);        //取Relative Sectors
 003A 81E0              ldi R24,1
 003C 90E0              ldi R25,0
 003E 9B83              std y+3,R25
 0040 8A83              std y+2,R24
 0042 80E0              ldi R24,<_fat_info
 0044 90E0              ldi R25,>_fat_info
 0046 9983              std y+1,R25
 0048 8883              std y+0,R24
 004A 06EC              ldi R16,198
 004C 11E0              ldi R17,1
 004E 20E0              ldi R18,0
 0050 30E0              ldi R19,0
 0052 0E940000          xcall _SD_read_sector2
 0056           L5:
 0056                   .dbline 45
 0056           ;  
 0056           ;  SD_read_sector2(((long)fat_info.Relative<<9)+11,buffer,13);   //取值
 0056 8DE0              ldi R24,13
 0058 90E0              ldi R25,0
 005A 9B83              std y+3,R25
 005C 8A83              std y+2,R24
 005E 80E0              ldi R24,<_buffer
 0060 90E0              ldi R25,>_buffer
 0062 9983              std y+1,R25
 0064 8883              std y+0,R24
 0066 89E0              ldi R24,9
 0068 90E0              ldi R25,0
 006A 20900000          lds R2,_fat_info
 006E 3324              clr R3
 0070 4424              clr R4
 0072 5524              clr R5
 0074 8A93              st -y,R24
 0076 8101              movw R16,R2
 0078 9201              movw R18,R4
 007A 0E940000          xcall lsl32
 007E 1801              movw R2,R16
 0080 2901              movw R4,R18
 0082 4BE0              ldi R20,11
 0084 50E0              ldi R21,0
 0086 60E0              ldi R22,0
 0088 70E0              ldi R23,0
 008A 240E              add R2,R20
 008C 351E              adc R3,R21
 008E 461E              adc R4,R22
 0090 571E              adc R5,R23
 0092 8101              movw R16,R2
 0094 9201              movw R18,R4
 0096 0E940000          xcall _SD_read_sector2
 009A                   .dbline 48
 009A           ; 
 009A           ;  
 009A           ;  BPB_BytePerSec=buffer[0]+((int)buffer[1]<<8);
 009A 20900100          lds R2,_buffer+1
 009E 3324              clr R3
 00A0 322C              mov R3,R2
 00A2 2224              clr R2
 00A4 40900000          lds R4,_buffer
 00A8 5524              clr R5
 00AA 420C              add R4,R2
 00AC 531C              adc R5,R3
 00AE 5D82              std y+5,R5
 00B0 4C82              std y+4,R4
 00B2                   .dbline 49
 00B2           ;  fat_info.BPB_SecPerClus=buffer[2];
 00B2 20900200          lds R2,_buffer+2
 00B6 20920100          sts _fat_info+1,R2
 00BA                   .dbline 50
 00BA           ;  fat_info.BPB_RsvdSecCnt=buffer[3];
 00BA 20900300          lds R2,_buffer+3
 00BE 20920200          sts _fat_info+2,R2
 00C2                   .dbline 51
 00C2           ;  BPB_NumFATs=buffer[5];
 00C2 E0900500          lds R14,_buffer+5
 00C6                   .dbline 53
 00C6           ; 
 00C6           ;  BPB_RootEntCnt=buffer[6]+((int)buffer[7]<<8);
 00C6 20900700          lds R2,_buffer+7
 00CA 3324              clr R3
 00CC 322C              mov R3,R2
 00CE 2224              clr R2
 00D0 A0900600          lds R10,_buffer+6
 00D4 BB24              clr R11
 00D6 A20C              add R10,R2
 00D8 B31C              adc R11,R3
 00DA                   .dbline 54
 00DA           ;  BPB_FATsz16=buffer[11]+((int)buffer[12]<<8);
 00DA 20900C00          lds R2,_buffer+12
 00DE 3324              clr R3
 00E0 322C              mov R3,R2
 00E2 2224              clr R2
 00E4 C0900B00          lds R12,_buffer+11
 00E8 DD24              clr R13
 00EA C20C              add R12,R2
 00EC D31C              adc R13,R3
 00EE                   .dbline 57
 00EE           ;  
 00EE           ;  /*计算根目录的首扇区号*/
 00EE           ;  fat_info.Firstgengmulu=fat_info.Relative+fat_info.BPB_RsvdSecCnt+BPB_FATsz16*BPB_NumFATs;
 00EE 2E2D              mov R18,R14
 00F0 3327              clr R19
 00F2 8601              movw R16,R12
 00F4 0E940000          xcall empy16s
 00F8 20900200          lds R2,_fat_info+2
 00FC 3324              clr R3
 00FE 40900000          lds R4,_fat_info
 0102 5524              clr R5
 0104 420C              add R4,R2
 0106 531C              adc R5,R3
 0108 400E              add R4,R16
 010A 511E              adc R5,R17
 010C 50920400          sts _fat_info+3+1,R5
 0110 40920300          sts _fat_info+3,R4
 0114                   .dbline 60
 0114           ;  
 0114           ;  /*计算FAT16根目录所占的扇区数*/
 0114           ;  RootDirSectors=(((long)BPB_RootEntCnt<<5)+(BPB_BytePerSec-1) )/BPB_BytePerSec;
 0114 85E0              ldi R24,5
 0116 90E0              ldi R25,0
 0118 1501              movw R2,R10
 011A 4424              clr R4
 011C 5524              clr R5
 011E 8A93              st -y,R24
 0120 8101              movw R16,R2
 0122 9201              movw R18,R4
 0124 0E940000          xcall lsl32
 0128 1801              movw R2,R16
 012A 2901              movw R4,R18
 012C 8C81              ldd R24,y+4
 012E 9D81              ldd R25,y+5
 0130 0197              sbiw R24,1
 0132 3C01              movw R6,R24
 0134 8824              clr R8
 0136 9924              clr R9
 0138 260C              add R2,R6
 013A 371C              adc R3,R7
 013C 481C              adc R4,R8
 013E 591C              adc R5,R9
 0140 6C80              ldd R6,y+4
 0142 7D80              ldd R7,y+5
 0144 8824              clr R8
 0146 9924              clr R9
 0148 9A92              st -y,R9
 014A 8A92              st -y,R8
 014C 7A92              st -y,R7
 014E 6A92              st -y,R6
 0150 8101              movw R16,R2
 0152 9201              movw R18,R4
 0154 0E940000          xcall div32s
 0158 5801              movw R10,R16
 015A                   .dbline 62
 015A           ;  /*计算簇2的首扇区*/
 015A           ;  fat_info.FirstDateSecter=fat_info.Relative+fat_info.BPB_RsvdSecCnt+((long)BPB_FATsz16*BPB_NumFATs)+RootDirSectors;
 015A 2E2C              mov R2,R14
 015C 3324              clr R3
 015E 4424              clr R4
 0160 5524              clr R5
 0162 3601              movw R6,R12
 0164 8824              clr R8
 0166 9924              clr R9
 0168 5A92              st -y,R5
 016A 4A92              st -y,R4
 016C 3A92              st -y,R3
 016E 2A92              st -y,R2
 0170 8301              movw R16,R6
 0172 9401              movw R18,R8
 0174 0E940000          xcall empy32s
 0178 20900200          lds R2,_fat_info+2
 017C 3324              clr R3
 017E 40900000          lds R4,_fat_info
 0182 5524              clr R5
 0184 420C              add R4,R2
 0186 531C              adc R5,R3
 0188 1201              movw R2,R4
 018A 4424              clr R4
 018C 37FC              sbrc R3,7
 018E 4094              com R4
 0190 5524              clr R5
 0192 47FC              sbrc R4,7
 0194 5094              com R5
 0196 200E              add R2,R16
 0198 311E              adc R3,R17
 019A 421E              adc R4,R18
 019C 531E              adc R5,R19
 019E 3501              movw R6,R10
 01A0 8824              clr R8
 01A2 9924              clr R9
 01A4 260C              add R2,R6
 01A6 371C              adc R3,R7
 01A8 481C              adc R4,R8
 01AA 591C              adc R5,R9
 01AC 30920600          sts _fat_info+5+1,R3
 01B0 20920500          sts _fat_info+5,R2
 01B4                   .dbline 65
 01B4           ; 
 01B4           ; 
 01B4           ;  return 0;
 01B4 0027              clr R16
 01B6                   .dbline -2
 01B6           L1:
 01B6 2696              adiw R28,6
 01B8 0E940000          xcall pop_gset5
 01BC                   .dbline 0 ; func end
 01BC 0895              ret
 01BE                   .dbsym r RootDirSectors 10 i
 01BE                   .dbsym r BPB_RootEntCnt 10 i
 01BE                   .dbsym r BPB_FATsz16 12 i
 01BE                   .dbsym r BPB_NumFATs 14 c
 01BE                   .dbsym l BPB_BytePerSec 4 i
 01BE                   .dbend
 01BE                   .dbfunc e Mp3_number_Counter _Mp3_number_Counter fV
 01BE           ; mulu_Clus_number -> y+1
 01BE           ;   counter_over -> y+0
 01BE           ;    Read_number -> R10
                        .even
 01BE           _Mp3_number_Counter::
 01BE 0E940000          xcall push_gset5
 01C2 2397              sbiw R28,3
 01C4                   .dbline -1
 01C4                   .dbline 70
 01C4           ; }
 01C4           ; 
 01C4           ; //=======================================================================
 01C4           ; void Mp3_number_Counter(void)
 01C4           ; {
 01C4                   .dbline 72
 01C4           ;  uint8 Read_number;
 01C4           ;  uint8 counter_over=0;
 01C4 0024              clr R0
 01C6 0882              std y+0,R0
 01C8                   .dbline 75
 01C8           ;  uint16 mulu_Clus_number;
 01C8           ;  
 01C8           ;  mulu_Clus_number=fat_info.Firstgengmulu;
 01C8 20900300          lds R2,_fat_info+3
 01CC 30900400          lds R3,_fat_info+3+1
 01D0 3A82              std y+2,R3
 01D2 2982              std y+1,R2
 01D4 69C0              xjmp L23
 01D6           L22:
 01D6                   .dbline 78
 01D6           ; 
 01D6           ;  while(!counter_over)
 01D6           ;   {

⌨️ 快捷键说明

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