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

📄 fat.s

📁 AVR单片机系统开发经典实例部分源程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	ldi R18,<L78
	ldi R19,>L78
	movw R16,R28
	subi R16,238  ; offset = 18
	sbci R17,255
	xcall _FileExt_Compare
	tst R16
	brne X8
	xjmp L71
X8:
	.dbline 127
; 			{
	.dbline 128
; 			  for(i=0;;i++)          //将文件名赋值给音乐列表的文件名项
	clr R0
	clr R1
	std y+24,R1
	std y+23,R0
L79:
	.dbline 129
;     	 	  {
	.dbline 130
; 			     if(Fat_Buffer[tem+i] == 0x20 || i>=8)
	ldd R2,y+23
	ldd R3,y+24
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R6
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,32
	breq L85
	movw R24,R2
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brsh X9
	xjmp L83
X9:
L85:
	.dbline 131
; 				 {
	.dbline 132
; 				   MusicInfoList[LocalOfMusic].FileName[i] = '.';
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R2,R16
	ldi R24,<_MusicInfoList
	ldi R25,>_MusicInfoList
	add R2,R24
	adc R3,R25
	ldd R30,y+23
	ldd R31,y+24
	add R30,R2
	adc R31,R3
	ldi R24,46
	std z+0,R24
	.dbline 133
; 				   MusicInfoList[LocalOfMusic].FileName[i+1] = 'm';
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R2,R16
	ldi R24,<_MusicInfoList
	ldi R25,>_MusicInfoList
	add R2,R24
	adc R3,R25
	ldd R30,y+23
	ldd R31,y+24
	adiw R30,1
	add R30,R2
	adc R31,R3
	ldi R24,109
	std z+0,R24
	.dbline 134
; 				   MusicInfoList[LocalOfMusic].FileName[i+2] = 'p';
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R2,R16
	ldi R24,<_MusicInfoList
	ldi R25,>_MusicInfoList
	add R2,R24
	adc R3,R25
	ldd R30,y+23
	ldd R31,y+24
	adiw R30,2
	add R30,R2
	adc R31,R3
	ldi R24,112
	std z+0,R24
	.dbline 135
; 				   MusicInfoList[LocalOfMusic].FileName[i+3] = '3';
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R2,R16
	ldi R24,<_MusicInfoList
	ldi R25,>_MusicInfoList
	add R2,R24
	adc R3,R25
	ldd R30,y+23
	ldd R31,y+24
	adiw R30,3
	add R30,R2
	adc R31,R3
	ldi R24,51
	std z+0,R24
	.dbline 136
; 				   break;
	xjmp L81
L83:
	.dbline 138
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R2,R16
	ldi R24,<_MusicInfoList
	ldi R25,>_MusicInfoList
	add R2,R24
	adc R3,R25
	ldd R30,y+23
	ldd R31,y+24
	add R30,R2
	adc R31,R3
	ldd R2,y+23
	ldd R3,y+24
	clr R4
	clr R5
	movw R26,R28
	adiw R26,2
	ld R6,x+
	ld R7,x+
	ld R8,x+
	ld R9,x
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R26,R6
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R26,R24
	adc R27,R25
	ld R2,x
	std z+0,R2
	.dbline 139
L80:
	.dbline 128
	ldd R24,y+23
	ldd R25,y+24
	adiw R24,1
	std y+24,R25
	std y+23,R24
	.dbline 128
	xjmp L79
L81:
	.dbline 141
; 				 }
; 			     MusicInfoList[LocalOfMusic].FileName[i]=Fat_Buffer[tem+i];
; 			  }
; 			  //将文件的起始簇号赋值给音乐列表的起始簇号项
; 			  MusicInfoList[LocalOfMusic].FileStartClustor = Fat_Buffer[tem+0x1A]|Fat_Buffer[tem+0x1B]<<8|((uint32)Fat_Buffer[tem+0x14]<<16) | ((uint32)Fat_Buffer[tem+0x15]<<24) ;
	ldi R20,27
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R2
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	mov R3,R2
	clr R2
	ldi R20,26
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R4,z+2
	ldd R5,z+3
	ldd R6,z+4
	ldd R7,z+5
	add R4,R20
	adc R5,R21
	adc R6,R22
	adc R7,R23
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	or R4,R2
	or R5,R3
	movw R2,R4
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,20
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	movw R8,R6
	clr R6
	clr R7
	or R2,R6
	or R3,R7
	or R4,R8
	or R5,R9
	ldi R20,21
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	ldi R24,24
	ldi R25,0
	st -y,R24
	movw R16,R6
	movw R18,R8
	xcall lsl32
	or R2,R16
	or R3,R17
	or R4,R18
	or R5,R19
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R30,R16
	ldi R24,<_MusicInfoList+33
	ldi R25,>_MusicInfoList+33
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 142
; 			  MusicInfoList[LocalOfMusic].FileLength = Fat_Buffer[tem+0x1C]|(Fat_Buffer[tem+0x1D]<<8)|((uint32)Fat_Buffer[tem+0x1E]<<16)|((uint32)Fat_Buffer[tem+0x1F]<<24);
	ldi R20,29
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R2
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	mov R3,R2
	clr R2
	ldi R20,28
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R4,z+2
	ldd R5,z+3
	ldd R6,z+4
	ldd R7,z+5
	add R4,R20
	adc R5,R21
	adc R6,R22
	adc R7,R23
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	or R4,R2
	or R5,R3
	movw R2,R4
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,30
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	movw R8,R6
	clr R6
	clr R7
	or R2,R6
	or R3,R7
	or R4,R8
	or R5,R9
	ldi R20,31
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	ldi R24,24
	ldi R25,0
	st -y,R24
	movw R16,R6
	movw R18,R8
	xcall lsl32
	or R2,R16
	or R3,R17
	or R4,R18
	or R5,R19
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R30,R16
	ldi R24,<_MusicInfoList+37
	ldi R25,>_MusicInfoList+37
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 143
; 			  LocalOfMusic++;   //开始下一个音乐文件的记录		  
	ldd R24,y+27
	ldd R25,y+28
	adiw R24,1
	std y+28,R25
	std y+27,R24
	.dbline 144
; 			}
	.dbline 145
; 	   	}
	xjmp L71
L70:
	.dbline 147
; 		else
; 		{
	.dbline 148
;     		LocalOfFirstLFN = Index_tmp;
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	movw R30,R28
	std z+14,R2
	std z+15,R3
	std z+16,R4
	std z+17,R5
	xjmp L89
L88:
	.dbline 150
; 		    while(1)
; 			{
	.dbline 151
; 			   Index_tmp++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+10,R2
	std z+11,R3
	std z+12,R4
	std z+13,R5
	.dbline 152
; 			   n = DiskFATInfo.FDT_LBA+(Index_tmp/(DiskFATInfo.BytesPerSector/32));
	ldi R18,5
	ldi R19,0
	lds R16,_DiskFATInfo+15
	lds R17,_DiskFATInfo+15+1
	xcall lsr16
	movw R2,R16
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+10
	ldd R7,z+11
	ldd R8,z+12
	ldd R9,z+13
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R6
	movw R18,R8
	xcall div32u
	lds R4,_DiskFATInfo+4+2
	lds R5,_DiskFATInfo+4+2+1
	lds R2,_DiskFATInfo+4
	lds R3,_DiskFATInfo+4+1
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	movw R30,R28
	std z+6,R2
	std z+7,R3
	std z+8,R4
	std z+9,R5
	.dbline 154
;                //读取FDT的相应扇区位置的内容
;    			   SD_ReadBlock(n,Fat_Buffer);
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	std y+1,R25
	std y+0,R24
	movw R30,R28
	ldd R16,z+6
	ldd R17,z+7
	ldd R18,z+8
	ldd R19,z+9
	xcall _SD_ReadBlock
	.dbline 155
; 			   tem = ((Index_tmp)*32)%DiskFATInfo.BytesPerSector;
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	ldi R20,32
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	lds R2,_DiskFATInfo+15
	lds R3,_DiskFATInfo+15+1
	clr R4
	clr R5
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall mod32u
	movw R30,R28
	std z+2,R16
	std z+3,R17
	std z+4,R18
	std z+5,R19
	.dbline 156
; 			   if(Fat_Buffer[tem+11]!= 0x0F)
	ldi R20,11
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R2
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,15
	brne X10
	xjmp L94
X10:
	.dbline 157
; 			   {
	.dbline 158
; 		  	      MusicInfoList[LocalOfMusic].FileStartClustor = Fat_Buffer[tem+0x1A]|Fat_Buffer[tem+0x1B]<<8|((uint32)Fat_Buffer[tem+0x14]<<16) | ((uint32)Fat_Buffer[tem+0x15]<<24) ;
	ldi R20,27
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R2
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	mov R3,R2
	clr R2
	ldi R20,26
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R4,z+2
	ldd R5,z+3
	ldd R6,z+4
	ldd R7,z+5
	add R4,R20
	adc R5,R21
	adc R6,R22
	adc R7,R23
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	or R4,R2
	or R5,R3
	movw R2,R4
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,20
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	movw R8,R6
	clr R6
	clr R7
	or R2,R6
	or R3,R7
	or R4,R8
	or R5,R9
	ldi R20,21
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	ldi R24,24
	ldi R25,0
	st -y,R24
	movw R16,R6
	movw R18,R8
	xcall lsl32
	or R2,R16
	or R3,R17
	or R4,R18
	or R5,R19
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R30,R16
	ldi R24,<_MusicInfoList+33
	ldi R25,>_MusicInfoList+33
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 159
; 			      MusicInfoList[LocalOfMusic].FileLength = Fat_Buffer[tem+0x1C]|(Fat_Buffer[tem+0x1D]<<8)|((uint32)Fat_Buffer[tem+0x1E]<<16)|((uint32)Fat_Buffer[tem+0x1F]<<24);		 
	ldi R20,29
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R2
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	mov R3,R2
	clr R2
	ldi R20,28
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R4,z+2
	ldd R5,z+3
	ldd R6,z+4
	ldd R7,z+5
	add R4,R20
	adc R5,R21
	adc R6,R22
	adc R7,R23
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	or R4,R2
	or R5,R3
	movw R2,R4
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,30
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	movw R8,R6
	clr R6
	clr R7
	or R2,R6
	or R3,R7
	or R4,R8
	or R5,R9
	ldi R20,31
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25

⌨️ 快捷键说明

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