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

📄 mp3.lst

📁 mp3源码,是自己写的,关于vs1001与CD卡的读取歌曲,和播放.
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0248 837B      STD	Y+3,R23
    0249 E021      LDI	R18,1
    024A E209      LDI	R16,0x29
    024B DE6A      RCALL	_sd_write_command
(0110) 	 }
    024C C002      RJMP	0x024F
(0111) 	else
(0112) 	  n=SD_IDLE_WAIT_MAX;  //no response
    024D E684      LDI	R24,0x64
    024E 2EA8      MOV	R10,R24
(0113) 	delay(500);//经调试需要加延迟
    024F EF04      LDI	R16,0xF4
    0250 E011      LDI	R17,1
    0251 940E0293  CALL	_delay
(0114)   }
(0115)   while(((response[0]&MSK_IDLE)==MSK_IDLE)&&(n<SD_IDLE_WAIT_MAX));
    0253 91800065  LDS	R24,_response
    0255 7081      ANDI	R24,1
    0256 3081      CPI	R24,1
    0257 F419      BNE	0x025B
    0258 2D8A      MOV	R24,R10
    0259 3684      CPI	R24,0x64
    025A F280      BCS	0x022B
(0116)   if(n>=SD_IDLE_WAIT_MAX)
    025B 2D8A      MOV	R24,R10
    025C 3684      CPI	R24,0x64
    025D F010      BCS	0x0260
(0117)     return 0;
    025E 2700      CLR	R16
    025F C01B      RJMP	0x027B
(0118)   if(sd_write_command(CMD58,CMD58_R,0,response)==0)//读取OCR
    0260 E685      LDI	R24,0x65
    0261 E090      LDI	R25,0
    0262 839D      STD	Y+5,R25
    0263 838C      STD	Y+4,R24
    0264 E040      LDI	R20,0
    0265 E050      LDI	R21,0
    0266 E060      LDI	R22,0
    0267 E070      LDI	R23,0
    0268 8348      STD	Y+0,R20
    0269 8359      STD	Y+1,R21
    026A 836A      STD	Y+2,R22
    026B 837B      STD	Y+3,R23
    026C E024      LDI	R18,4
    026D E30A      LDI	R16,0x3A
    026E DE47      RCALL	_sd_write_command
    026F 2300      TST	R16
    0270 F411      BNE	0x0273
(0119)     return 0;
    0271 2700      CLR	R16
    0272 C008      RJMP	0x027B
(0120)   if((response[2]&MSK_OCR_33)!=MSK_OCR_33)//电压最低为3.3V
    0273 91800067  LDS	R24,_response+2
    0275 7C80      ANDI	R24,0xC0
    0276 3C80      CPI	R24,0xC0
    0277 F011      BEQ	0x027A
(0121)     return 0;
    0278 2700      CLR	R16
    0279 C001      RJMP	0x027B
(0122)   /*set block length			
(0123)   if(sd_write_command(CMD16,CMD16_R,DATA_LENGTH,response)==0)
(0124)     return 0;
(0125)   */
(0126)   return 1;    
    027A E001      LDI	R16,1
    027B 9626      ADIW	R28,6
    027C 940E0A71  CALL	pop_gset3
    027E 9508      RET
_sd_init:
  j                    --> R20
  n                    --> R22
    027F 940E0A91  CALL	push_gset2
(0127) }
(0128) 
(0129) uchar sd_init(void)
(0130) { uchar n,j;
(0131)   j=0;
    0281 2744      CLR	R20
(0132)   for(n=0;(n<SD_INIT_TRY)&&(j!=1);n++)
    0282 2766      CLR	R22
    0283 C003      RJMP	0x0287
(0133)     j=do_sd_init();
    0284 DF85      RCALL	_do_sd_init
    0285 2F40      MOV	R20,R16
    0286 9563      INC	R22
    0287 3362      CPI	R22,0x32
    0288 F410      BCC	0x028B
    0289 3041      CPI	R20,1
    028A F7C9      BNE	0x0284
(0134)   if(n>=SD_INIT_TRY)//超次数
    028B 3362      CPI	R22,0x32
    028C F010      BCS	0x028F
(0135)     return 0;	
    028D 2700      CLR	R16
    028E C001      RJMP	0x0290
(0136)   return 1;
    028F E001      LDI	R16,1
    0290 940E0A6E  CALL	pop_gset2
    0292 9508      RET
_delay:
  m                    --> R20
  n                    --> R22
  dat                  --> R16
    0293 940E0A91  CALL	push_gset2
FILE: F:\mine\mp3\MP3\vs1001K.c
(0001) #include<all.h>
(0002) 
(0003) void delay(uint dat)//延迟10us
(0004) { uint m,n;
(0005)   for(m=0;m<dat;m++)
    0295 2744      CLR	R20
    0296 2755      CLR	R21
    0297 C00B      RJMP	0x02A3
(0006)    for(n=0;n<2;n++);
    0298 2766      CLR	R22
    0299 2777      CLR	R23
    029A C002      RJMP	0x029D
    029B 5F6F      SUBI	R22,0xFF
    029C 4F7F      SBCI	R23,0xFF
    029D 3062      CPI	R22,2
    029E E0E0      LDI	R30,0
    029F 077E      CPC	R23,R30
    02A0 F3D0      BCS	0x029B
    02A1 5F4F      SUBI	R20,0xFF
    02A2 4F5F      SBCI	R21,0xFF
    02A3 1740      CP	R20,R16
    02A4 0751      CPC	R21,R17
    02A5 F390      BCS	0x0298
(0007) }
    02A6 940E0A6E  CALL	pop_gset2
    02A8 9508      RET
(0008) /*等DREQ*/
(0009) void vs_wait_dreq(void)
(0010) { while(!(PIND&0x04)); }
_vs_wait_dreq:
    02A9 9B82      SBIS	0x10,2
    02AA CFFE      RJMP	_vs_wait_dreq
    02AB 9508      RET
(0011) 
(0012) /*发单个命令*/
(0013) uchar write_single(uchar dat)//发
(0014) {
(0015)   SPDR=dat;
_write_single:
  dat                  --> R16
    02AC B90F      OUT	0x0F,R16
(0016)   while(!(SPSR&0x80));
    02AD 9B77      SBIS	0x0E,7
    02AE CFFE      RJMP	0x02AD
(0017)   return SPDR;
    02AF B10F      IN	R16,0x0F
    02B0 9508      RET
(0018) }  
(0019) 
(0020) uchar read_single(void)//读单个数据
(0021) {  return write_single(0xff); }   
_read_single:
    02B1 EF0F      LDI	R16,0xFF
    02B2 CFF9      RJMP	_write_single
_vs_write_sci:
  dat                  --> R20
  add                  --> R22
    02B3 940E0A91  CALL	push_gset2
    02B5 01A9      MOVW	R20,R18
    02B6 2F60      MOV	R22,R16
(0022) 
(0023) /*写命令*/
(0024) void vs_write_sci(uchar add,uint dat)//写命令
(0025) { clear_xcs;//XCS有效
    02B7 98C4      CBI	0x18,4
(0026)   select_vs;
    02B8 9AC3      SBI	0x18,3
(0027)   write_single(0x02);//写命令
    02B9 E002      LDI	R16,2
    02BA DFF1      RCALL	_write_single
(0028)   write_single(add);//写地址
    02BB 2F06      MOV	R16,R22
    02BC DFEF      RCALL	_write_single
(0029)   write_single((uchar)(dat>>8));
    02BD 018A      MOVW	R16,R20
    02BE 2F01      MOV	R16,R17
    02BF 2711      CLR	R17
    02C0 DFEB      RCALL	_write_single
(0030)   write_single((uchar)dat );
    02C1 2F04      MOV	R16,R20
    02C2 DFE9      RCALL	_write_single
(0031)   set_xcs;
    02C3 9AC4      SBI	0x18,4
(0032) }
    02C4 940E0A6E  CALL	pop_gset2
    02C6 9508      RET
_vs_read_sci:
  dat                  --> R20
  add                  --> R20
    02C7 940E0A7A  CALL	push_gset1
    02C9 2F40      MOV	R20,R16
(0033) 
(0034) uint vs_read_sci(uchar add)//读命令
(0035) { uint dat;
(0036)   clear_xcs;//XCS有效
    02CA 98C4      CBI	0x18,4
(0037)   select_vs;
    02CB 9AC3      SBI	0x18,3
(0038)   write_single(0x03);//读命令
    02CC E003      LDI	R16,3
    02CD DFDE      RCALL	_write_single
(0039)   write_single(add);//写地址
    02CE 2F04      MOV	R16,R20
    02CF DFDC      RCALL	_write_single
(0040)   dat=(uint)read_single()<<8;
    02D0 DFE0      RCALL	_read_single
    02D1 2F40      MOV	R20,R16
    02D2 2755      CLR	R21
    02D3 2F54      MOV	R21,R20
    02D4 2744      CLR	R20
(0041)   dat|=read_single();
    02D5 DFDB      RCALL	_read_single
    02D6 2E20      MOV	R2,R16
    02D7 2433      CLR	R3
    02D8 2942      OR	R20,R2
    02D9 2953      OR	R21,R3
(0042)   set_xcs;
    02DA 9AC4      SBI	0x18,4
(0043)   return dat;
    02DB 018A      MOVW	R16,R20
    02DC 940E0A7D  CALL	pop_gset1
    02DE 9508      RET
(0044) }
(0045) /*发数据*/
(0046) void vs_write_sdi_byte(uchar dat)//发送单个字节
(0047) {  set_xcs;
_vs_write_sdi_byte:
  dat                  --> R16
    02DF 9AC4      SBI	0x18,4
(0048)    select_vs;
    02E0 9AC3      SBI	0x18,3
(0049)    clear_bysnc;	 
    02E1 98C0      CBI	0x18,0
(0050)    set_bysnc;
    02E2 9AC0      SBI	0x18,0
(0051)    SPDR=dat;
    02E3 B90F      OUT	0x0F,R16
(0052)    while(!(SPSR&0x80));
    02E4 9B77      SBIS	0x0E,7
    02E5 CFFE      RJMP	0x02E4
(0053)    clear_bysnc;
    02E6 98C0      CBI	0x18,0
(0054) }
    02E7 9508      RET
_vs_write_sdi_bytes:
  i                    --> R20
  n                    --> R18
  add                  --> R16
    02E8 940E0A7A  CALL	push_gset1
(0055) void vs_write_sdi_bytes(uchar *add,uint n)//发送多个数据
(0056) {  uint i;
(0057)  //  vs_wait_dreq();//等DREQ变高
(0058)    select_vs;
    02EA 9AC3      SBI	0x18,3
(0059)    set_xcs;//选中DCLK
    02EB 9AC4      SBI	0x18,4
(0060)    for(i=0;i<n;i++)
    02EC 2744      CLR	R20
    02ED 2755      CLR	R21
    02EE C00A      RJMP	0x02F9
(0061)    { clear_bysnc;	 
    02EF 98C0      CBI	0x18,0
(0062)      set_bysnc;
    02F0 9AC0      SBI	0x18,0
(0063)      SPDR=*add++;
    02F1 01F8      MOVW	R30,R16
    02F2 9021      LD	R2,Z+
    02F3 018F      MOVW	R16,R30
    02F4 B82F      OUT	0x0F,R2
(0064) 	 while(!(SPSR&0x80));
    02F5 9B77      SBIS	0x0E,7
    02F6 CFFE      RJMP	0x02F5
    02F7 5F4F      SUBI	R20,0xFF
    02F8 4F5F      SBCI	R21,0xFF
    02F9 1742      CP	R20,R18
    02FA 0753      CPC	R21,R19
    02FB F398      BCS	0x02EF
(0065)    }
(0066)     while(!(SPSR&0x80));
    02FC 9B77      SBIS	0x0E,7
    02FD CFFE      RJMP	0x02FC
(0067)     clear_bysnc;	
    02FE 98C0      CBI	0x18,0
(0068) }	
    02FF 940E0A7D  CALL	pop_gset1
    0301 9508      RET
(0069) void vs1001k_reset(void)//VS1001K复位
(0070) { vs_write_sci(MODE,0x0004);
_vs1001k_reset:
    0302 E024      LDI	R18,4
    0303 E030      LDI	R19,0
    0304 2700      CLR	R16
    0305 DFAD      RCALL	_vs_write_sci
(0071)   delay(500);
    0306 EF04      LDI	R16,0xF4
    0307 E011      LDI	R17,1
    0308 DF8A      RCALL	_delay
(0072)   vs_wait_dreq();
    0309 DF9F      RCALL	_vs_wait_dreq
(0073)   vs_write_sci(MODE,0x0000);
    030A 2722      CLR	R18
    030B 2733      CLR	R19
    030C 2700      CLR	R16
    030D DFA5      RCALL	_vs_write_sci
(0074)   vs_write_sci(VOL,0x0000);
    030E 2722      CLR	R18
    030F 2733      CLR	R19
    0310 E00B      LDI	R16,0xB
    0311 DFA1      RCALL	_vs_write_sci
(0075)   vs_write_sdi_byte(0x00);
    0312 2700      CLR	R16
    0313 DFCB      RCALL	_vs_write_sdi_byte
(0076)   vs_write_sdi_byte(0x00);
    0314 2700      CLR	R16
(0077) }  
    0315 CFC9      RJMP	_vs_write_sdi_byte
_KEY:
  n                    --> R20
    0316 940E0AC6  CALL	push_lset
    0318 940E0A7A  CALL	push_gset1
FILE: F:\mine\mp3\MP3\fat.c
(0001) #include<all.h>
(0002) #include<vs1001k.h>
(0003) #include<sd.h>
(0004) #include<sdcom.h>
(0005) #define FAT12 3 //占1个半   
(0006) #define FAT16 2 //占有2个byte   
(0007) #define FAT32 4 //占4 byte      
(0008) 
(0009) #define PlayEnd   1//

⌨️ 快捷键说明

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