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

📄 fat16.s

📁 AVR单片机做的MP3
💻 S
📖 第 1 页 / 共 4 页
字号:
_GetNextmp3:
	rcall push_gset3
	.dbline -1
	.dbline 160
; }
; 
; uint16 GetNextmp3()
; {
	.dbline 163
;     uint16 DirSecCut, DirStart;
; 	uint8 i,m;
; 	DirSecCut = GetDirSecCount();
	rcall _GetDirSecCount
	movw R20,R16
	rjmp L36
L35:
	.dbline 165
;     while(fileindex<=512)
;     {
	.dbline 166
; 	  if(flag) fileindex++;
	lds R2,_flag
	tst R2
	breq L38
	.dbline 166
	lds R24,_fileindex
	lds R25,_fileindex+1
	adiw R24,1
	sts _fileindex+1,R25
	sts _fileindex,R24
	rjmp L39
L38:
	.dbline 167
; 	  else     fileindex--;
	lds R24,_fileindex
	lds R25,_fileindex+1
	sbiw R24,1
	sts _fileindex+1,R25
	sts _fileindex,R24
L39:
	.dbline 168
; 	  if(fileindex<=1) fileindex=510;
	ldi R24,1
	ldi R25,0
	lds R2,_fileindex
	lds R3,_fileindex+1
	cp R24,R2
	cpc R25,R3
	brlo L40
	.dbline 168
	ldi R24,510
	ldi R25,1
	sts _fileindex+1,R25
	sts _fileindex,R24
L40:
	.dbline 169
; 	  if(fileindex>=511)fileindex=2;
	lds R24,_fileindex
	lds R25,_fileindex+1
	cpi R24,255
	ldi R30,1
	cpc R25,R30
	brlo L42
	.dbline 169
	ldi R24,2
	ldi R25,0
	sts _fileindex+1,R25
	sts _fileindex,R24
L42:
	.dbline 170
; 	  i=fileindex/16;
	lds R22,_fileindex
	lds R23,_fileindex+1
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	.dbline 171
; 	  DirStart = DirStartSec();
	rcall _DirStartSec
	movw R10,R16
	.dbline 172
; 	  ReadBlock(DirStart + i);
	mov R2,R22
	clr R3
	movw R4,R10
	add R4,R2
	adc R5,R3
	movw R2,R4
	clr R4
	clr R5
	movw R16,R2
	movw R18,R4
	rcall _ReadBlock
	.dbline 173
; 	  m=(fileindex%16);
	lds R20,_fileindex
	andi R20,15
	andi R21,0
	.dbline 174
; 	  if(Ismp3(&((DIR*)&BUFFER[m * 32])->FileName))
	ldi R24,32
	mul R24,R20
	movw R16,R0
	ldi R24,<_BUFFER
	ldi R25,>_BUFFER
	add R16,R24
	adc R17,R25
	rcall _Ismp3
	tst R16
	breq L44
	.dbline 175
; 	   {
	.dbline 176
; 		*(&fileid) = *((DIR*)&BUFFER[m * 32]);
	ldi R24,32
	mul R24,R20
	movw R2,R0
	ldi R24,<_BUFFER
	ldi R25,>_BUFFER
	add R2,R24
	adc R3,R25
	ldi R24,<_fileid
	ldi R25,>_fileid
	ldi R16,32
	ldi R17,0
	st -y,R25
	st -y,R24
	st -y,R3
	st -y,R2
	rcall asgnblk
	.dbline 177
; 		return 1; //找到对应的目录项,返回位置
	ldi R16,1
	ldi R17,0
	rjmp L34
L44:
	.dbline 179
L36:
	.dbline 164
	ldi R24,512
	ldi R25,2
	lds R2,_fileindex
	lds R3,_fileindex+1
	cp R24,R2
	cpc R25,R3
	brlo X0
	rjmp L35
X0:
	.dbline -2
L34:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r DirSecCut 20 i
	.dbsym r i 22 c
	.dbsym r DirStart 10 i
	.dbsym r m 20 c
	.dbend
	.dbfunc s GetFileID _GetFileID fc
	.dbstruct 0 6 .2
	.dbfield 0 Start i
	.dbfield 2 Size l
	.dbend
	.dbstruct 0 32 .3
	.dbfield 0 FileName A[11:11]c
	.dbfield 11 FileAttrib c
	.dbfield 12 UnUsed A[10:10]c
	.dbfield 22 FileUpdateTime A[2:2]c
	.dbfield 24 FileUpdateData A[2:2]c
	.dbfield 26 FilePosit S[.2]
	.dbend
;       DirStart -> R20,R21
;      DirSecCut -> R22,R23
;              i -> R10,R11
;              m -> R14,R15
;             ID -> R12,R13
;           Name -> y+11
	.even
_GetFileID:
	rcall push_arg4
	rcall push_gset5
	movw R12,R18
	sbiw R28,1
	.dbline -1
	.dbline 183
; 	   }
;     }
; }
; static uint8 GetFileID(uint8 Name[11],DIR* ID)
; //********************************************************************************************
; {
	.dbline 185
; 	uint16 DirSecCut, DirStart, i, m;
; 	DirSecCut = GetDirSecCount();
	rcall _GetDirSecCount
	movw R22,R16
	.dbline 186
; 	DirStart = DirStartSec();
	rcall _DirStartSec
	movw R20,R16
	.dbline 187
; 	for(i = 0; i < DirSecCut; i++)
	clr R10
	clr R11
	rjmp L50
L47:
	.dbline 188
; 	{
	.dbline 189
; 		ReadBlock(DirStart + i);
	movw R2,R20
	add R2,R10
	adc R3,R11
	clr R4
	clr R5
	movw R16,R2
	movw R18,R4
	rcall _ReadBlock
	.dbline 190
; 		for(m = 0; m <16; m++)
	clr R14
	clr R15
	rjmp L54
L51:
	.dbline 191
; 		{
	.dbline 192
; 			if(IsEqual(Name, &((DIR*)&BUFFER[m * 32])->FileName, 11))
	ldi R24,11
	std y+0,R24
	ldi R16,32
	ldi R17,0
	movw R18,R14
	rcall empy16s
	movw R18,R16
	ldi R24,<_BUFFER
	ldi R25,>_BUFFER
	add R18,R24
	adc R19,R25
	ldd R16,y+11
	ldd R17,y+12
	rcall _IsEqual
	tst R16
	breq L55
	.dbline 193
; 			{
	.dbline 194
; 				*ID = *((DIR*)&BUFFER[m * 32]);
	ldi R16,32
	ldi R17,0
	movw R18,R14
	rcall empy16s
	movw R2,R16
	ldi R24,<_BUFFER
	ldi R25,>_BUFFER
	add R2,R24
	adc R3,R25
	ldi R16,32
	ldi R17,0
	st -y,R13
	st -y,R12
	st -y,R3
	st -y,R2
	rcall asgnblk
	.dbline 195
; 				return 1; //找到对应的目录项,返回1
	ldi R16,1
	rjmp L46
L55:
	.dbline 197
L52:
	.dbline 190
	movw R24,R14
	adiw R24,1
	movw R14,R24
L54:
	.dbline 190
	movw R24,R14
	cpi R24,16
	ldi R30,0
	cpc R25,R30
	brlo L51
	.dbline 198
L48:
	.dbline 187
	movw R24,R10
	adiw R24,1
	movw R10,R24
L50:
	.dbline 187
	cp R10,R22
	cpc R11,R23
	brsh X1
	rjmp L47
X1:
	.dbline 199
; 			}
; 		}
; 	}
; 	return 0; //没有找到对应的目录项,返回0
	clr R16
	.dbline -2
L46:
	adiw R28,1
	rcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r DirStart 20 i
	.dbsym r DirSecCut 22 i
	.dbsym r i 10 i
	.dbsym r m 14 i
	.dbsym r ID 12 pS[.3]
	.dbsym l Name 11 pc
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
L58:
	.blkb 2
L59:
	.blkb 2
L60:
	.blkb 2
	.area data(ram, con, rel)
	.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
L61:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
	.area bss(ram, con, rel)
	.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
L62:
	.blkb 2
L63:
	.blkb 11
L64:
	.blkb 1
	.area data(ram, con, rel)
	.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
L65:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
	.area text(rom, con, rel)
	.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
	.dbfunc e Readfile _Readfile fc
	.dbsym s j L65 c
	.dbsym s i L64 c
	.dbsym s filename L63 A[11:11]c
	.dbsym s m L62 i
	.dbsym s pointer L61 i
	.dbsym s p L60 i
	.dbsym s t L59 i
	.dbsym s r L58 i
;       DirStart -> <dead>
;          lenth -> y+21
;          count -> R10,R11
;    BytePerClus -> R10,R11
;        ClusNum -> R12,R13
;    unicodename -> y+5
;       NextClus -> R10,R11
;            LBA -> y+1
	.even
_Readfile::
	rcall push_gset4
	sbiw R28,25
	.dbline -1
	.dbline 202
; }
; static uint8 Readfile()
; {
	.dbline 206
;   static uint16 r,t,p,pointer=0,m;
;   static uint8 filename[11],i,j=0;
;   uint8 unicodename[16];
;   uint16 BytePerClus, ClusNum,NextClus,count=0,DirStart;
	clr R10
	clr R11
	.dbline 208
;   uint32 LBA,lenth;
;   if(fileid.FileName[7]==0x31) 
	lds R24,_fileid+7
	cpi R24,49
	breq X2
	rjmp L66
X2:
	.dbline 209
;   {
	.dbline 210
;    t=0;
	clr R2
	clr R3
	sts L59+1,R3
	sts L59,R2
	.dbline 211
;    longfileflag=1;
	ldi R24,1
	sts _longfileflag,R24
	.dbline 212
;    count=fileindex-1;
	lds R24,_fileindex
	lds R25,_fileindex+1
	sbiw R24,1
	movw R10,R24
	.dbline 213
;    m=count%16;
	andi R24,15
	andi R25,0
	sts L62+1,R25
	sts L62,R24
	.dbline 214
;    m<<=5;
	ldi R18,5
	ldi R19,0
	movw R16,R24
	rcall lsl16
	sts L62+1,R17
	sts L62,R16
	.dbline 215
;    for(i=0;i<16;i++)
	clr R2
	sts L64,R2
	rjmp L72
L69:
	.dbline 216
;    {
	.dbline 217
;     if(i<10)unicodename[i]=BUFFER[m+i+1];
	lds R24,L64
	cpi R24,10
	brsh L73
	.dbline 217
	mov R2,R24
	clr R3
	lds R30,L62
	lds R31,L62+1
	add R30,R2
	adc R31,R3
	adiw R30,1
	ldi R24,<_BUFFER
	ldi R25,>_BUFFER
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R24,R28
	adiw R24,5
	lds R30,L64
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	rjmp L74
L73:
	.dbline 218
; 	else  unicodename[i]=BUFFER[m+i+4]; 
	lds R2,L64
	clr R3
	lds R30,L62
	lds R31,L62+1
	add R30,R2
	adc R31,R3
	adiw R30,4
	ldi R24,<_BUFFER
	ldi R25,>_BUFFER
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R24,R28
	adiw R24,5
	lds R30,L64
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
L74:
	.dbline 219
;     if((BUFFER[m+1+i]==0x2E)&&(BUFFER[m+2+i]==0))
	lds R2,L64
	clr R3
	lds R30,L62
	lds R31,L62+1
	adiw R30,1
	add R30,R2
	adc R31,R3
	ldi R24,<_BUFFER
	ldi R25,>_BUFFER
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,46
	brne L75
	lds R30,L62
	lds R31,L62+1
	adiw R30,2
	add R30,R2
	adc R31,R3
	ldi R24,<_BUFFER
	ldi R25,>_BUFFER
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	tst R2
	brne L75
	.dbline 220
; 	{
	rjmp L78
L77:
	.dbline 222
	.dbline 223
	lds R2,L64
	clr R3
	mov R24,R2
	subi R24,255    ; addi 1
	sts L64,R24
	movw R24,R28
	adiw R24,5
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 224
L78:
	.dbline 221
; 	 while(i<16)
	lds R24,L64
	cpi R24,16
	brlo L77
	.dbline 225
; 	 {
; 	 unicodename[i++]=0;
; 	 }
; 	 break;
	rjmp L71
L75:
	.dbline 227
L70:
	.dbline 215
	lds R24,L64
	subi R24,255    ; addi 1
	sts L64,R24
L72:
	.dbline 215
	lds R24,L64
	cpi R24,16
	brsh X3
	rjmp L69
X3:
L71:
	.dbline 228
; 	}
;    }
;     for(i=0;i<16;i+=2)
	clr R2
	sts L64,R2
	rjmp L83
L80:
	.dbline 229
;    {
	.dbline 230
;     if(i<8)
	lds R24,L64
	cpi R24,8
	brsh L84
	.dbline 231
; 	{
	.dbline 232
;     show(unicodename+i,(uint8)t,0);
	clr R2
	std y+0,R2
	lds R18,L59
	movw R24,R28
	adiw R24,5
	lds R16,L64
	clr R17
	add R16,R24
	adc R17,R25
	rcall _show
	.dbline 233
; 	}
	rjmp L85
L84:
	.dbline 235
; 	else
; 	{
	.dbline 236
; 	show(unicodename+i,(uint8)t-60,1);
	ldi R24,1
	std y+0,R24
	lds R18,L59
	subi R18,60
	movw R24,R28
	adiw R24,5
	lds R16,L64
	clr R17
	add R16,R24
	adc R17,R25
	rcall _show
	.dbline 237
; 	}
L85:
	.dbline 238
	lds R24,L59
	lds R25,L59+1
	adiw R24,15
	sts L59+1,R25
	sts L59,R24
	.dbline 239
L81:
	.dbline 228
	lds R24,L64
	subi R24,254    ; addi 2
	sts L64,R24
L83:
	.dbline 228
	lds R24,L64
	cpi R24,16
	brlo L80
	.dbline 240
;     t+=15;
;    }
;   }
	rjmp L67
L66:
	.dbline 242
;   else                        
;    {
	.dbline 243
;    t=0;
	clr R2
	clr R3
	sts L59+1,R3
	sts L59,R2
	.dbline 244
;    longfileflag=0;
	sts _longfileflag,R2
	.dbline 245
;    for(r=0;r<16;r+=2)
	sts L58+1,R3
	sts L58,R2
	rjmp L89
L86:
	.dbline 246
;    {
	.dbline 247
;     if(r<8)show(fileid.FileName+r,(uint8)t,0);
	lds R24,L58
	lds R25,L58+1
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brsh L90
	.dbline 247
	clr R2
	std y+0,R2
	lds R18,L59
	ldi R24,<_fileid
	ldi R25,>_fileid
	lds R16,L58
	lds R17,L58+1
	add R16,R24
	adc R17,R25
	rcall _show
	rjmp L91
L90:
	.dbline 248
; 	else show(zero,(uint8)t-60,1);
	ldi R24,1
	std y+0,R24
	lds R18,L59
	subi R18,60
	ldi R16,<_zero
	ldi R17,>_zero
	rcall _show
L91:
	.dbline 249
	lds R24,L59
	lds R25,L59+1
	adiw R24,15
	sts L59+1,R25
	sts L59,R24
	.dbline 250
L87:
	.dbline 245
	lds R24,L58
	lds R25,L58+1
	adiw R24,2
	sts L58+1,R25
	sts L58,R24
L89:
	.dbline 245
	lds R24,L58
	lds R25,L58+1
	cpi R24,16
	ldi R30,0
	cpc R25,R30
	brlo L86
	.dbline 251
;     t+=15;
;    }
;    }
L67:
	.dbline 252
;  FileIndex.ClusID=fileid.FilePosit.Start;
	lds R2,_fileid+26
	lds R3,_fileid+26+1
	sts _FileIndex+2+1,R3
	sts _FileIndex+2,R2
	.dbline 253
;  LBA=ClusConvLBA(FileIndex.ClusID);
	lds R16,_FileIndex+2
	lds R17,_FileIndex+2+1
	rcall _ClusConvLBA
	movw R30,R28
	std z+1,R16
	std z+2,R17
	std z+3,R18
	std z+4,R19
	.dbline 254
;  lenth=fileid.FilePosit.Size;
	lds R4,_fileid+26+2+2
	lds R5,_fileid+26+2+2+1
	lds R2,_fileid+26+2

⌨️ 快捷键说明

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