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

📄 mp3player.s

📁 diy硬盘mp3的程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 146
; 			  	  	   Page = FilePtr / SONGPAGE;
	ldi R18,5
	ldi R19,0
	movw R16,R10
	xcall div16s
	movw R12,R16
	.dbline 147
; 			  	  	   GetDir(Cluster,Page*SONGPAGE,SONGPAGE,TRUE); 
	ldi R24,1
	ldi R25,0
	std y+5,R25
	std y+4,R24
	ldi R24,5
	std y+3,R25
	std y+2,R24
	ldi R16,5
	ldi R17,0
	movw R18,R12
	xcall empy16s
	std y+1,R17
	std y+0,R16
	movw R30,R28
	ldd R16,z+20
	ldd R17,z+21
	ldd R18,z+22
	ldd R19,z+23
	xcall _GetDir
	.dbline 148
; 				  	   RemoteSendScreen(PLAY,(FilePtr%SONGPAGE));
	ldi R18,5
	ldi R19,0
	movw R16,R10
	xcall mod16s
	mov R18,R16
	ldi R16,2
	xcall _RemoteSendScreen
	.dbline 149
; 			  	  	   }
L45:
	.dbline 150
; 			   		RemoteSendLine((FilePtr%SONGPAGE));
	ldi R18,5
	ldi R19,0
	movw R16,R10
	xcall mod16s
	xcall _RemoteSendLine
	.dbline 151
; 			   		GetDir(Cluster,FilePtr,1,FALSE); 
	clr R2
	clr R3
	std y+5,R3
	std y+4,R2
	ldi R24,1
	ldi R25,0
	std y+3,R25
	std y+2,R24
	std y+1,R11
	std y+0,R10
	movw R30,R28
	ldd R16,z+20
	ldd R17,z+21
	ldd R18,z+22
	ldd R19,z+23
	xcall _GetDir
	.dbline 152
; 			   		PlayMP3();
	xcall _PlayMP3
	.dbline 153
; 			   		if (Key == 0x01) FilePtr = FilePtr;
	lds R24,_Key
	cpi R24,1
	brne L47
	.dbline 153
L47:
	.dbline 154
; 			   		if (Key == 0x02) FilePtr -=2;
	lds R24,_Key
	cpi R24,2
	brne L49
	.dbline 154
	movw R24,R10
	sbiw R24,2
	movw R10,R24
L49:
	.dbline 155
; 			   		if (Key == 0x04) break;
	lds R24,_Key
	cpi R24,4
	brne L51
	.dbline 155
	xjmp L42
L51:
	.dbline 156
; 			   		if (Key == 0x08) break;
	lds R24,_Key
	cpi R24,8
	brne L53
	.dbline 156
	xjmp L42
L53:
	.dbline 157
L41:
	.dbline 139
	xjmp L40
L42:
	.dbline 158
; 			   		}
; 		      GetDir(Cluster,Page*SONGPAGE,SONGPAGE,TRUE); 
	ldi R24,1
	ldi R25,0
	std y+5,R25
	std y+4,R24
	ldi R24,5
	std y+3,R25
	std y+2,R24
	ldi R16,5
	ldi R17,0
	movw R18,R12
	xcall empy16s
	std y+1,R17
	std y+0,R16
	movw R30,R28
	ldd R16,z+20
	ldd R17,z+21
	ldd R18,z+22
	ldd R19,z+23
	xcall _GetDir
	.dbline 159
; 		   	  RemoteSendScreen(DIR,(FilePtr%SONGPAGE));
	ldi R18,5
	ldi R19,0
	movw R16,R10
	xcall mod16s
	mov R18,R16
	ldi R16,1
	xcall _RemoteSendScreen
	.dbline 160
; 		   	  Key = 0;
	clr R2
	sts _Key,R2
	.dbline 161
; 			  }
L37:
	.dbline 162
; 		   }	
L34:
	.dbline 163
L4:
	.dbline 59
	xjmp L7
X1:
	.dbline -2
	.dbline 164
; 		}
; }
L2:
	adiw R28,10
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l ch 7 c
	.dbsym l LastCluster 6 l
	.dbsym r MaxFile 14 i
	.dbsym r Page 12 I
	.dbsym r FilePtr 10 I
	.dbsym l Cluster 20 l
	.dbend
	.dbfunc e _StackOverflowed __StackOverflowed fV
;              c -> R16
	.even
__StackOverflowed::
	.dbline -1
	.dbline 170
; 
; //*************************************
; // void _StackOverflowed(char c)
; //*************************************
; void _StackOverflowed(char c)
; 	{
	.dbline 171
; 	CLI();
	cli
L56:
	.dbline 172
L57:
	.dbline 172
	xjmp L56
X5:
	.dbline -2
	.dbline 173
; 	while(1);
; 	}
L55:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e PlayMP3 _PlayMP3 fI
;        Percent -> y+32
;       ByteSend -> y+28
;    NextCluster -> y+24
;            LBA -> y+20
;              i -> y+16
;              j -> y+12
;        TimeOut -> y+8
	.even
_PlayMP3::
	xcall push_gset2
	sbiw R28,36
	.dbline -1
	.dbline 182
; 
; //*************************************
; // int PlayMP3(void)
; //
; // return 0 -> Error
; // return 1 -> successfull play
; //*************************************
; int PlayMP3(void)
; {
	.dbline 188
; extern unsigned char SectorBuffer[512];
; unsigned long LBA,i,j,NextCluster,TimeOut,ByteSend,Percent;
; extern struct FileInfo File;
; extern struct BootRecord Boot;
; 
; VS1001Init(SOFT);
	clr R16
	xcall _VS1001Init
	.dbline 189
; Key = 0;
	clr R2
	sts _Key,R2
	.dbline 190
; ByteSend = 0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+28,R20
	std z+29,R21
	std z+30,R22
	std z+31,R23
	.dbline 191
; NextCluster = File.FirstClust;
	lds R4,_File+260+2
	lds R5,_File+260+2+1
	lds R2,_File+260
	lds R3,_File+260+1
	std z+24,R2
	std z+25,R3
	std z+26,R4
	std z+27,R5
	xjmp L62
L61:
	.dbline 193
; while (1)
;  	  {
	.dbline 194
; 	  LBA = Clust2LBA(NextCluster);
	movw R30,R28
	ldd R16,z+24
	ldd R17,z+25
	ldd R18,z+26
	ldd R19,z+27
	xcall _Clust2LBA
	movw R30,R28
	std z+20,R16
	std z+21,R17
	std z+22,R18
	std z+23,R19
	.dbline 195
; 	  for (i=0;i<Boot.SecPerClust;i++)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+16,R20
	std z+17,R21
	std z+18,R22
	std z+19,R23
	xjmp L67
L64:
	.dbline 196
; 	  	  {
	.dbline 197
; 		  ata_read_sector_byte(0, LBA+i, 0, 512, (unsigned char*)&SectorBuffer);
	ldi R24,<_SectorBuffer
	ldi R25,>_SectorBuffer
	std y+7,R25
	std y+6,R24
	ldi R24,512
	ldi R25,2
	std y+5,R25
	std y+4,R24
	clr R2
	clr R3
	std y+3,R3
	std y+2,R2
	movw R30,R28
	ldd R2,z+16
	ldd R3,z+17
	ldd R4,z+18
	ldd R5,z+19
	ldd R6,z+20
	ldd R7,z+21
	ldd R8,z+22
	ldd R9,z+23
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	std y+0,R8
	std y+1,R9
	movw R18,R6
	clr R16
	xcall _ata_read_sector_byte
	.dbline 198
; 		  for (j=0;j<Boot.BytesPerSec;j=j+32)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+12,R20
	std z+13,R21
	std z+14,R22
	std z+15,R23
	xjmp L72
L69:
	.dbline 199
; 			  {
	.dbline 200
; 			  TimeOut = 0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+8,R20
	std z+9,R21
	std z+10,R22
	std z+11,R23
	xjmp L75
L74:
	.dbline 202
; 			  while (!(PORT_MP3_IN & DREQ))
; 			  		{
	.dbline 203
; 					WDR();
	wdr
	.dbline 204
; 					if (Key != 0) return Key;
	lds R2,_Key
	tst R2
	breq L77
	.dbline 204
	lds R16,_Key
	clr R17
	xjmp L59
L77:
	.dbline 205
; 					TimeOut++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	std z+8,R2
	std z+9,R3
	std z+10,R4
	std z+11,R5
	.dbline 206
; 					if (TimeOut > 100000) 
	ldi R20,160
	ldi R21,134
	ldi R22,1
	ldi R23,0
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L79
	.dbline 207
; 					   {
	.dbline 208
; 					   VS1001Init(HARD); // VS1001 is jam
	ldi R16,1
	xcall _VS1001Init
	.dbline 209
; 					   return 0x01; // Next Song
	ldi R16,1
	ldi R17,0
	xjmp L59
L79:
	.dbline 211
L75:
	.dbline 201
	sbis 0x16,7
	rjmp L74
	.dbline 212
	ldi R18,32
	ldi R24,<_SectorBuffer
	ldi R25,>_SectorBuffer
	movw R30,R28
	ldd R16,z+12
	ldd R17,z+13
	add R16,R24
	adc R17,R25
	xcall _VS1001_Stream
	.dbline 213
L70:
	.dbline 198
	ldi R20,32
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	std z+12,R2
	std z+13,R3
	std z+14,R4
	std z+15,R5
L72:
	.dbline 198
	lds R2,_Boot+11
	lds R3,_Boot+11+1
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+12
	ldd R7,z+13
	ldd R8,z+14
	ldd R9,z+15
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh X6
	xjmp L69
X6:
	.dbline 214
L65:
	.dbline 195
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+16
	ldd R3,z+17
	ldd R4,z+18
	ldd R5,z+19
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	std z+16,R2
	std z+17,R3
	std z+18,R4
	std z+19,R5
L67:
	.dbline 195
	lds R2,_Boot+13
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+16
	ldd R7,z+17
	ldd R8,z+18
	ldd R9,z+19
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh X7
	xjmp L64
X7:
	.dbline 215
; 					   }
; 					}	
; 			  VS1001_Stream(&SectorBuffer[j],32);
; 			  }
; 		  }
; 	  ByteSend += (Boot.BytesPerSec * Boot.SecPerClust);
	mov R18,R2
	clr R19
	lds R16,_Boot+11
	lds R17,_Boot+11+1
	xcall empy16s
	movw R2,R16
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+28
	ldd R7,z+29
	ldd R8,z+30
	ldd R9,z+31
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	std z+28,R6
	std z+29,R7
	std z+30,R8
	std z+31,R9
	.dbline 216
; 	  Percent = (ByteSend / (File.FileSize / 100));
	ldi R20,100
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_File+264+2
	lds R5,_File+264+2+1
	lds R2,_File+264
	lds R3,_File+264+1
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	xcall div32u
	movw R30,R28
	ldd R2,z+28
	ldd R3,z+29
	ldd R4,z+30
	ldd R5,z+31
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall div32u
	movw R30,R28
	std z+32,R16
	std z+33,R17
	std z+34,R18
	std z+35,R19
	.dbline 217
; 	  NextCluster = GetNextCluster(NextCluster);
	ldd R16,z+24
	ldd R17,z+25
	ldd R18,z+26
	ldd R19,z+27
	xcall _GetNextCluster
	movw R30,R28
	std z+24,R16
	std z+25,R17
	std z+26,R18
	std z+27,R19
	.dbline 218
; 	  if (NextCluster > CLUST_RSRVD) break;
	ldi R20,246
	ldi R21,255
	ldi R22,255
	ldi R23,15
	ldd R2,z+24
	ldd R3,z+25
	ldd R4,z+26
	ldd R5,z+27
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L84
	.dbline 218
	xjmp L63
L84:
	.dbline 219
L62:
	.dbline 192
	xjmp L61
L63:
	.dbline 220
; 	  }
; return 0x01; // Next Song
	ldi R16,1
	ldi R17,0
	.dbline -2
L59:
	adiw R28,36
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l Percent 32 l
	.dbsym l ByteSend 28 l
	.dbsym l NextCluster 24 l
	.dbsym l LBA 20 l
	.dbsym l i 16 l
	.dbsym l j 12 l
	.dbsym l TimeOut 8 l
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DATA\MP3\Player\Code2\MP3Player.c
_RemoteTextLine::
	.blkb 200
	.dbsym e RemoteTextLine _RemoteTextLine A[200:5:40]c
_SectorBuffer::
	.blkb 512
	.dbsym e SectorBuffer _SectorBuffer A[512:512]c

⌨️ 快捷键说明

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