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

📄 fat16.s

📁 AVR单片机做的MP3
💻 S
📖 第 1 页 / 共 4 页
字号:
	lds R3,_fileid+26+2+1
	movw R30,R28
	std z+21,R2
	std z+22,R3
	std z+23,R4
	std z+24,R5
	.dbline 256
;  
;  BytePerClus=BPB_SecPerClus * 512;
	lds R18,_BPB_SecPerClus
	clr R19
	ldi R16,512
	ldi R17,2
	rcall empy16s
	movw R10,R16
	.dbline 257
;  ClusNum=lenth/BytePerClus+1;
	movw R2,R10
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+21
	ldd R7,z+22
	ldd R8,z+23
	ldd R9,z+24
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R6
	movw R18,R8
	rcall div32u
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R2,R16
	movw R4,R18
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R12,R2
	.dbline 258
;  NextClus=FileIndex.ClusID;
	lds R10,_FileIndex+2
	lds R11,_FileIndex+2+1
	.dbline 259
;  for(t=0;t<ClusNum;t++)
	clr R2
	clr R3
	sts L59+1,R3
	sts L59,R2
	rjmp L101
L98:
	.dbline 260
;  {
	.dbline 261
;  for(r=0;r<BPB_SecPerClus;r++)
	clr R2
	clr R3
	sts L58+1,R3
	sts L58,R2
	rjmp L105
L102:
	.dbline 262
;   {
	.dbline 263
;   SD_SPI_HIGH();
	rcall _SD_SPI_HIGH
	.dbline 264
;   ReadBlock(LBA+r);
	lds R2,L58
	lds R3,L58+1
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+1
	ldd R7,z+2
	ldd R8,z+3
	ldd R9,z+4
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R16,R6
	movw R18,R8
	rcall _ReadBlock
	rjmp L107
L106:
	.dbline 266
;   while(pointer<512)
;    {
	.dbline 267
;    if(PINB&1)
	sbis 0x16,0
	rjmp L109
	.dbline 268
;     {
	.dbline 269
;      for(p=0;p<32;p++)
	clr R2
	clr R3
	sts L60+1,R3
	sts L60,R2
	rjmp L114
L111:
	.dbline 270
	.dbline 271
	ldi R24,<_BUFFER
	ldi R25,>_BUFFER
	lds R30,L61
	lds R31,L61+1
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _VS1003B_WriteDAT
	.dbline 272
	lds R24,L61
	lds R25,L61+1
	adiw R24,1
	sts L61+1,R25
	sts L61,R24
	.dbline 273
L112:
	.dbline 269
	lds R24,L60
	lds R25,L60+1
	adiw R24,1
	sts L60+1,R25
	sts L60,R24
L114:
	.dbline 269
	lds R24,L60
	lds R25,L60+1
	cpi R24,32
	ldi R30,0
	cpc R25,R30
	brlo L111
	.dbline 274
;      {
;      VS1003B_WriteDAT(BUFFER[pointer]);
;      pointer++;
;      }
; 	 if(pointer==511) break;
	lds R24,L61
	lds R25,L61+1
	cpi R24,255
	ldi R30,1
	cpc R25,R30
	brne L115
	.dbline 274
	rjmp L108
L115:
	.dbline 275
;     }
L109:
	.dbline 277
; 	//按键处理
;      if(!(PINA&NEXT)) 
	sbic 0x19,7
	rjmp L117
	.dbline 278
;      {
	.dbline 279
; 	  delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 280
; 	  if(!(PINA&NEXT)) 
	sbic 0x19,7
	rjmp L119
	.dbline 281
; 	  {  
	.dbline 282
; 	  lcd_on();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 283
; 	  keyflag=1;
	ldi R24,1
	sts _keyflag,R24
	.dbline 284
; 	  flag=1;
	sts _flag,R24
	.dbline 285
; 	  VS1003B_SoftReset();
	rcall _VS1003B_SoftReset
	.dbline 286
;       return 5;
	ldi R16,5
	rjmp L57
L119:
	.dbline 288
; 	  }
; 	 }
L117:
	.dbline 289
; 	 if(!(PINC&PREV))
	sbic 0x13,0
	rjmp L121
	.dbline 290
; 	 {
	.dbline 291
; 	  delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 292
; 	  if(!(PINC&PREV))
	sbic 0x13,0
	rjmp L123
	.dbline 293
; 	  {
	.dbline 294
; 	  lcd_on();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 295
; 	  keyflag=1;
	ldi R24,1
	sts _keyflag,R24
	.dbline 296
; 	  flag=0;
	clr R2
	sts _flag,R2
	.dbline 297
; 	  VS1003B_SoftReset();
	rcall _VS1003B_SoftReset
	.dbline 298
; 	  return 6;
	ldi R16,6
	rjmp L57
L123:
	.dbline 300
; 	  }
; 	 }
L121:
	.dbline 301
; 	 if(!(PINA&PLAY))
	sbic 0x19,4
	rjmp L125
	.dbline 302
; 	 {
	.dbline 303
; 	  delay(600);
	ldi R16,600
	ldi R17,2
	rcall _delay
	.dbline 304
; 	  lcd_on();
	in R24,0x15
	andi R24,253
	out 0x15,R24
L127:
	.dbline 305
L128:
	.dbline 305
; 	  while(PINA&PLAY);
	sbic 0x19,4
	rjmp L127
	.dbline 306
; 	  keyflag=1;
	ldi R24,1
	sts _keyflag,R24
	.dbline 307
; 	  delay(600);
	ldi R16,600
	ldi R17,2
	rcall _delay
	.dbline 308
; 	 }
L125:
	.dbline 309
L107:
	.dbline 265
	lds R24,L61
	lds R25,L61+1
	cpi R24,0
	ldi R30,2
	cpc R25,R30
	brsh X4
	rjmp L106
X4:
L108:
	.dbline 310
	clr R2
	clr R3
	sts L61+1,R3
	sts L61,R2
	.dbline 311
L103:
	.dbline 261
	lds R24,L58
	lds R25,L58+1
	adiw R24,1
	sts L58+1,R25
	sts L58,R24
L105:
	.dbline 261
	lds R2,_BPB_SecPerClus
	clr R3
	lds R4,L58
	lds R5,L58+1
	cp R4,R2
	cpc R5,R3
	brsh X5
	rjmp L102
X5:
	.dbline 312
;    }
;    pointer=0;
;   }
;   if(!(PINA&UP))
	sbic 0x19,5
	rjmp L130
	.dbline 313
; 	 {
	.dbline 314
; 	  if(!(PINA&UP))
	sbic 0x19,5
	rjmp L132
	.dbline 315
; 	  {
	.dbline 316
; 	  lcd_on();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 317
; 	  keyflag=1;
	ldi R24,1
	sts _keyflag,R24
	.dbline 318
; 	  longfileflag=0;
	clr R2
	sts _longfileflag,R2
	.dbline 319
; 	  vol=vol-((uint16)(4<<8)+4); 
	lds R24,_vol
	lds R25,_vol+1
	subi R24,4
	sbci R25,4
	sts _vol+1,R25
	sts _vol,R24
	.dbline 320
; 	  volume[0]++; 
	lds R24,_volume
	subi R24,255    ; addi 1
	sts _volume,R24
	.dbline 321
; 	  if(volume[0]>0x36)
	ldi R24,54
	lds R2,_volume
	cp R24,R2
	brsh L134
	.dbline 322
; 	  {
	.dbline 323
; 	  vol=0x0505;
	ldi R24,1285
	ldi R25,5
	sts _vol+1,R25
	sts _vol,R24
	.dbline 324
; 	  volume[0]=0x36;
	ldi R24,54
	sts _volume,R24
	.dbline 325
; 	  }
	rjmp L135
L134:
	.dbline 327
;       else
; 	  {
	.dbline 328
; 	  VS1003B_WriteCMD(0x0b,vol);  //每次左右声道VOL+2 
	lds R18,_vol
	lds R19,_vol+1
	ldi R16,11
	rcall _VS1003B_WriteCMD
	.dbline 329
; 	  }
L135:
	.dbline 330
; 	  show(volume,108,0);
	clr R2
	std y+0,R2
	ldi R18,108
	ldi R16,<_volume
	ldi R17,>_volume
	rcall _show
	.dbline 331
; 	  }
L132:
	.dbline 332
; 	 }
L130:
	.dbline 333
; 	 if(!(PINA&DOWN))
	sbic 0x19,6
	rjmp L136
	.dbline 334
; 	 {
	.dbline 335
; 	  if(!(PINA&DOWN))
	sbic 0x19,6
	rjmp L138
	.dbline 336
; 	  {
	.dbline 337
; 	  lcd_on();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 338
; 	  keyflag=1;
	ldi R24,1
	sts _keyflag,R24
	.dbline 339
; 	  longfileflag=0;
	clr R2
	sts _longfileflag,R2
	.dbline 340
; 	  vol=vol+((uint16)(4<<8)+4);
	lds R24,_vol
	lds R25,_vol+1
	subi R24,252  ; offset = 1028
	sbci R25,251
	sts _vol+1,R25
	sts _vol,R24
	.dbline 341
; 	  volume[0]--; 
	lds R24,_volume
	subi R24,1
	sts _volume,R24
	.dbline 342
; 	  if(volume[0]<0x30)
	cpi R24,48
	brsh L140
	.dbline 343
; 	  {
	.dbline 344
; 	   vol=0x1d1d;
	ldi R24,7453
	ldi R25,29
	sts _vol+1,R25
	sts _vol,R24
	.dbline 345
; 	   volume[0]=0x30;
	ldi R24,48
	sts _volume,R24
	.dbline 346
; 	   }
	rjmp L141
L140:
	.dbline 348
;       else 
; 	  {
	.dbline 349
; 	  VS1003B_WriteCMD(0x0b,vol);//每次左右声道VOL-4
	lds R18,_vol
	lds R19,_vol+1
	ldi R16,11
	rcall _VS1003B_WriteCMD
	.dbline 350
; 	  }
L141:
	.dbline 351
; 	  show(volume,108,0);
	clr R2
	std y+0,R2
	ldi R18,108
	ldi R16,<_volume
	ldi R17,>_volume
	rcall _show
	.dbline 352
; 	  }
L138:
	.dbline 353
; 	 }
L136:
	.dbline 354
;   pointer=0;
	clr R2
	clr R3
	sts L61+1,R3
	sts L61,R2
	.dbline 355
;   if(NextClus>=0xfff8) break;
	movw R24,R10
	cpi R24,248
	ldi R30,255
	cpc R25,R30
	brlo L142
	.dbline 355
	rjmp L100
L142:
	.dbline 356
;   if(t==20)  lcd_off();
	lds R24,L59
	lds R25,L59+1
	cpi R24,20
	ldi R30,0
	cpc R25,R30
	brne L144
	.dbline 356
	sbi 0x15,1
L144:
	.dbline 357
;   if(keyflag)
	lds R2,_keyflag
	tst R2
	breq L146
	.dbline 358
;   {
	.dbline 359
;    j++;
	lds R24,L65
	subi R24,255    ; addi 1
	sts L65,R24
	.dbline 360
;    if(j>20) 
	ldi R24,20
	lds R2,L65
	cp R24,R2
	brsh L148
	.dbline 361
;     {
	.dbline 362
; 	 lcd_off();
	sbi 0x15,1
	.dbline 363
; 	 j=0;
	clr R2
	sts L65,R2
	.dbline 364
; 	 keyflag=0;
	sts _keyflag,R2
	.dbline 365
; 	}
L148:
	.dbline 366
;   }
L146:
	.dbline 367
	movw R16,R10
	rcall _ReadFAT
	movw R10,R16
	.dbline 368
	rcall _ClusConvLBA
	movw R30,R28
	std z+1,R16
	std z+2,R17
	std z+3,R18
	std z+4,R19
	.dbline 369
L99:
	.dbline 259
	lds R24,L59
	lds R25,L59+1
	adiw R24,1
	sts L59+1,R25
	sts L59,R24
L101:
	.dbline 259
	lds R2,L59
	lds R3,L59+1
	cp R2,R12
	cpc R3,R13
	brsh X6
	rjmp L98
X6:
L100:
	.dbline 370
;   NextClus=ReadFAT(NextClus);
;   LBA=ClusConvLBA(NextClus);
;  }
;  return 1;
	ldi R16,1
	.dbline -2
L57:
	adiw R28,25
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym l DirStart 2 i
	.dbsym l lenth 21 l
	.dbsym r count 10 i
	.dbsym r BytePerClus 10 i
	.dbsym r ClusNum 12 i
	.dbsym l unicodename 5 A[16:16]c
	.dbsym r NextClus 10 i
	.dbsym l LBA 1 l
	.dbend
	.area lit(rom, con, rel)
L151:
	.byte 'Z,'I,'K,'U,49,54,32,32,'D,'A,'T
L152:
	.byte 'U,'N,'I,'C,'O,'D,'E,32,'D,'A,'T
	.area text(rom, con, rel)
	.dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
	.dbfunc e Getfile_start _Getfile_start fi
;        unicode -> y+43
;           ziku -> y+32
;        zikudir -> y+0
;              i -> R20,R21
	.even
_Getfile_start::
	rcall push_gset1
	sbiw R28,54
	.dbline -1
	.dbline 373
; }
; uint16 Getfile_start()
; {
	.dbline 376
;  uint16 i;
;  DIR zikudir;
;  uint8 ziku[11]="ZIKU16  DAT";
	ldi R24,<L151
	ldi R25,>L151
	movw R30,R28
	adiw R30,32
	ldi R16,11
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 377
;  uint8 unicode[11]="UNICODE DAT";
	ldi R24,<L152
	ldi R25,>L152
	movw R30,R28
	adiw R30,43
	ldi R16,11
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 378
;  if(flag)  
	lds R2,_flag
	tst R2
	breq L153
	.dbline 379
;  {
	.dbline 380
;   i=GetFileID(ziku,&zikudir);
	movw R18,R28
	movw R16,R28
	subi R16,224  ; offset = 32
	sbci R17,255
	rcall _GetFileID
	mov R20,R16
	clr R21
	.dbline 381
;   flag=0;
	clr R2
	sts _flag,R2
	.dbline 382
;   }
	rjmp L154
L153:
	.dbline 384
;  else     
;  {
	.dbline 385
;   i=GetFileID(unicode,&zikudir);
	movw R18,R28
	movw R16,R28
	subi R16,213  ; offset = 43
	sbci R17,255
	rcall _GetFileID
	mov R20,R16
	clr R21
	.dbline 386
;  }
L154:
	.dbline 387
;  if(!i) 
	cpi R20,0
	cpc R20,R21
	brne L155
X7:
	.dbline 388
;  {
	.dbline 389
;   return 0;
	clr R16
	clr R17
	rjmp L150
L155:
	.dbline 391
;  }
;  i=zikudir.FilePosit.Start;
	ldd R20,y+26
	ldd R21,y+27
	.dbline 392
;  return i;
	movw R16,R20
	.dbline -2
L150:
	adiw R28,54
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l unicode 43 A[11:11]c
	.dbsym l ziku 32 A[11:11]c
	.dbsym l zikudir 0 S[.3]
	.dbsym r i 20 i
	.dbend
	.dbfunc e show _show fV
;          temp2 -> y+15
;          temp1 -> y+11
;          loca1 -> R12
;      location1 -> R10
;          start -> y+7
;       findflag -> y+23
;              i -> R14,R15
;              y -> y+22
;              x -> y+21
;           temp -> y+3
;              j -> y+19
;           loca -> y+34
;       location -> R14

⌨️ 快捷键说明

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