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

📄 mp3play.lst

📁 mega128+VS1003做的mp3的程序 可以用WINAVR编译
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    2B69 EFCF      LDI	R28,0xFF
    2B6A E1D0      LDI	R29,0x10
    2B6B BFCD      OUT	0x3D,R28
    2B6C BFDE      OUT	0x3E,R29
    2B6D 51C0      SUBI	R28,0x10
    2B6E 40D0      SBCI	R29,0
    2B6F EA0A      LDI	R16,0xAA
    2B70 8308      STD	Y+0,R16
    2B71 2400      CLR	R0
    2B72 E0EA      LDI	R30,0xA
    2B73 E0F4      LDI	R31,4
    2B74 E01A      LDI	R17,0xA
    2B75 3DE9      CPI	R30,0xD9
    2B76 07F1      CPC	R31,R17
    2B77 F011      BEQ	0x2B7A
    2B78 9201      ST	R0,Z+
    2B79 CFFB      RJMP	0x2B75
    2B7A 8300      STD	Z+0,R16
    2B7B ECE8      LDI	R30,0xC8
    2B7C E5F3      LDI	R31,0x53
    2B7D E0A0      LDI	R26,0
    2B7E E0B1      LDI	R27,1
    2B7F E516      LDI	R17,0x56
    2B80 3DE2      CPI	R30,0xD2
    2B81 07F1      CPC	R31,R17
    2B82 F021      BEQ	0x2B87
    2B83 95C8      LPM
    2B84 9631      ADIW	R30,1
    2B85 920D      ST	R0,X+
    2B86 CFF9      RJMP	0x2B80
    2B87 940E3E19  CALL	_main
_exit:
    2B89 CFFF      RJMP	_exit
FILE: E:\software\MP3程序\Ch375b\375interface.c
(0001) #include <iom64v.h>
(0002) #include <macros.h>
(0003) #define  UINT8 unsigned char
(0004) /******************************************************************************/
(0005) 
(0006) #define	 USED_BUS		//屏闭后使用I/O模拟总线操作
(0007) 
(0008) #ifdef USED_BUS
(0009) #define CH375_CMD_PORT_ADDR 0xfe00		 //命令口
(0010) #define CH375_DAT_PORT_ADDR	0xfc00		 //数据口
(0011) #endif
(0012) #define  CH375_INT BIT(1)				 //CH375联络信号
(0013) 
(0014) 
(0015) 
(0016) #ifndef USED_BUS
(0017) #define  CH375_CS  BIT(0)
(0018) #define  CH375_A0  BIT(1)
(0019) #define  CH375_RD  BIT(1)
(0020) #define  CH375_WR  BIT(0)
(0021) void mDelay1uS(void)  /* 至少延时1uS,根据单片机主频调整 */
(0022) {
(0023) 	//UINT8	i;
(0024) 	//for ( i = 1; i != 0; i -- );
(0025) 	NOP();
(0026) }
(0027) #endif
(0028) 
(0029) void CH375_PORT_INIT( )  /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */
(0030) {
(0031)  	#ifdef USED_BUS
(0032) 	Print_str("Init CH375 used External bus...\r\n");
_CH375_PORT_INIT:
    2B8A E000      LDI	R16,0
    2B8B E011      LDI	R17,1
    2B8C 940E2D6C  CALL	_Print_str
(0033) 	#else 
(0034) 	Print_str("Init CH375 used I/O bus...\r\n");
(0035) 	DDRA = 0x00;  /* 设置8位并口为输入 */
(0036) 	PORTC=CH375_CS; //设置CS,WR,RD默认为高电平 0x08为3310引脚*/
(0037) 	DDRC =CH375_CS|CH375_A0;  /* 设置CS,WR,RD,A0为输出,设置INT#为输入 */
(0038) 	PORTG = CH375_WR|CH375_RD;
(0039) 	DDRG  = CH375_WR|CH375_RD;
(0040) 	#endif
(0041) 	
(0042) 	DDRD &= ~(CH375_INT);
    2B8E 9889      CBI	0x11,1
    2B8F 9508      RET
(0043) }
(0044) 
(0045) void xWriteCH375Cmd( UINT8 mCmd )		/* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */
(0046) {
(0047) 	#ifdef USED_BUS
(0048) 	*(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; /*通过并口直接读写CH375而非普通I/O模拟 */
_xWriteCH375Cmd:
  mCmd                 --> R16
    2B90 9300FE00  STS	0xFE00,R16
(0049) 	NOP();  /* 至少延时1uS */
    2B92 0000      NOP
    2B93 9508      RET
(0050) 	#else
(0051) 	PORTC |=CH375_A0;// 0x08;  /* 输出A0=1 */
(0052) 	PORTA = mCmd;  /* 向CH375的并口输出数据 */
(0053) 	DDRA = 0xFF;  /* 并口D0-D7输出 */
(0054) 	PORTC &=~(CH375_CS);// 0xF9;  /* 输出有效写控制信号, 写CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */
(0055) 	PORTG &=~(CH375_WR);
(0056) 	DDRA = 0xFF;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
(0057) 	PORTC |= CH375_CS;// 0x07;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */
(0058) 	PORTG |= CH375_WR|CH375_RD;
(0059) 	DDRA = 0x00;  /* 禁止数据输出 */
(0060) 	PORTC &= ~(CH375_A0);  /* 输出A0=0; 可选操作 */
(0061) 	NOP();//mDelay1uS( ); mDelay1uS( );  /* 至少延时2uS */
(0062) 	#endif
(0063) }
(0064) 
(0065) void xWriteCH375Data( UINT8 mData )		/* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */
(0066) {
(0067)  	#ifdef USED_BUS
(0068)     *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; /* 通过并口直接读写CH375而非普通I/O模拟 */
_xWriteCH375Data:
  mData                --> R16
    2B94 9300FC00  STS	0xFC00,R16
(0069) 	NOP();  /* 至少延时1uS */
    2B96 0000      NOP
    2B97 9508      RET
(0070) 	#else
(0071) 	PORTA = mData;  /* 向CH375的并口输出数据 */
(0072) 	DDRA = 0xFF;  /* 并口D0-D7输出 */
(0073) 	PORTC &= ~(CH375_A0|CH375_CS);//0xF1;  /* 输出有效写控制信号, 写CH375芯片的数据端口, A0=0; CS=0; WR=0; RD=1; */
(0074) 	PORTG &= ~(CH375_WR);
(0075) 	DDRA = 0xFF;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
(0076) 	PORTC |= CH375_CS;//0x07;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */
(0077) 	PORTG |= CH375_RD|CH375_WR;
(0078) 	DDRA = 0x00;  /* 禁止数据输出 */
(0079) 	NOP();//mDelay1uS( );  /* 至少延时1.2uS */
(0080) 	#endif
(0081) }
(0082) 
(0083) UINT8 xReadCH375Data( void )			/* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */
(0084) {
(0085) 	UINT8	mData;
(0086) 	#ifdef USED_BUS
(0087) 	NOP();  /* 至少延时1uS */
_xReadCH375Data:
  mData                --> R16
    2B98 0000      NOP
(0088) 	mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR;  /*通过并口直接读写CH375而非普通I/O模拟 */
    2B99 9100FC00  LDS	R16,0xFC00
(0089) 	return( mData );
    2B9B 9508      RET
FILE: E:\software\MP3程序\Delay\delay.c
(0001) #include <iom64v.h>
(0002) #include <macros.h>
(0003) /*-----------------------------------------------------------------------
(0004) 延时函数
(0005) 系统时钟:8M
(0006) -----------------------------------------------------------------------*/
(0007) void delay_1us(void)
(0008) {;}
_delay_1us:
    2B9C 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    2B9D 940E7CF6  CALL	push_gset2
    2B9F 01B8      MOVW	R22,R16
(0009) void delay_nus(unsigned int n)       //N us延时函数
(0010)   {
(0011)    unsigned int i=0;
    2BA0 2744      CLR	R20
    2BA1 2755      CLR	R21
(0012)    for (i=0;i<n;i++)
    2BA2 C003      RJMP	0x2BA6
(0013)    delay_1us();
    2BA3 DFF8      RCALL	_delay_1us
    2BA4 5F4F      SUBI	R20,0xFF
    2BA5 4F5F      SBCI	R21,0xFF
    2BA6 1746      CP	R20,R22
    2BA7 0757      CPC	R21,R23
    2BA8 F3D0      BCS	0x2BA3
    2BA9 940E7CD3  CALL	pop_gset2
    2BAB 9508      RET
(0014)   }
(0015) void delay_1ms(void)                 //1ms延时函数
(0016)   {
(0017)    unsigned int i;
(0018)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    2BAC 2700      CLR	R16
    2BAD 2711      CLR	R17
    2BAE C002      RJMP	0x2BB1
    2BAF 5F0F      SUBI	R16,0xFF
    2BB0 4F1F      SBCI	R17,0xFF
    2BB1 3704      CPI	R16,0x74
    2BB2 E0E4      LDI	R30,4
    2BB3 071E      CPC	R17,R30
    2BB4 F3D0      BCS	0x2BAF
    2BB5 9508      RET
FILE: E:\software\MP3程序\Vs1003\vs1003.c
(0001) #include <iom64v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #include "vs1003.h"
(0006) void vs1003_infor(void);
(0007) 
(0008) void DelayIni(void)
(0009) {
(0010) 	TCCR0 = 0x00; //stop
_DelayIni:
    2BB6 2422      CLR	R2
    2BB7 BE23      OUT	0x33,R2
(0011) 	TCNT0 = 0x83; //set count
    2BB8 E883      LDI	R24,0x83
    2BB9 BF82      OUT	0x32,R24
    2BBA 9508      RET
(0012) }
(0013) 
(0014) void delay_ms(unsigned char ms)
(0015) {
(0016) 	TCCR0 = 0x04; //start timer
_delay_ms:
  ms                   --> R16
    2BBB E084      LDI	R24,4
    2BBC BF83      OUT	0x33,R24
    2BBD C009      RJMP	0x2BC7
(0017) 	while(ms--)
(0018) 	{
(0019) 		while((TIFR & (1<<TOV0)) != (1<<TOV0));
    2BBE B786      IN	R24,0x36
    2BBF 7081      ANDI	R24,1
    2BC0 3081      CPI	R24,1
    2BC1 F7E1      BNE	0x2BBE
(0020) 		TIFR |= (1<<TOV0);
    2BC2 B786      IN	R24,0x36
    2BC3 6081      ORI	R24,1
    2BC4 BF86      OUT	0x36,R24
(0021) 		TCNT0 = 0x83; //set count
    2BC5 E883      LDI	R24,0x83
    2BC6 BF82      OUT	0x32,R24
    2BC7 2E20      MOV	R2,R16
    2BC8 2433      CLR	R3
    2BC9 5001      SUBI	R16,1
    2BCA 2022      TST	R2
    2BCB F791      BNE	0x2BBE
(0022) 	}
(0023) 	TCCR0 = 0x00; //stop
    2BCC 2422      CLR	R2
    2BCD BE23      OUT	0x33,R2
    2BCE 9508      RET
(0024) }
(0025) 
(0026) void mp3portIni(void)
(0027) {
(0028)     DDRD |= nDCS;									//	使能芯片片选输出
_mp3portIni:
    2BCF 9A8A      SBI	0x11,2
(0029) 	DDRD |= nCS;									//	使能数据接口片选输出
    2BD0 9A8B      SBI	0x11,3
(0030) 	DDRD &= ~DREQ;
    2BD1 9888      CBI	0x11,0
(0031) 	
(0032) 	PORTD |= nDCS;
    2BD2 9A92      SBI	0x12,2
(0033) 	PORTD |= nCS;
    2BD3 9A93      SBI	0x12,3
(0034) 	PORTD |= DREQ;
    2BD4 9A90      SBI	0x12,0
(0035) 	
(0036) 	DDRB  = 0xff;									//	使能硬件复位输出
    2BD5 EF8F      LDI	R24,0xFF
    2BD6 BB87      OUT	0x17,R24
(0037) 	DDRB  &= ~(1<<3);
    2BD7 98BB      CBI	0x17,3
(0038) 	PORTB = 0xff;
    2BD8 BB88      OUT	0x18,R24
(0039) 	
(0040) 	SPCR = (1 << SPE) | (1 << MSTR) | (0 << SPR1) | (0 << SPR0);
    2BD9 E580      LDI	R24,0x50
    2BDA B98D      OUT	0x0D,R24
(0041) 	SPSR |= 1<<SPI2X;	
    2BDB 9A70      SBI	0x0E,0
    2BDC 9508      RET
_spiByte:
  tmp                  --> R20
  data                 --> R16
    2BDD 940E7CDF  CALL	push_gset1
(0042) }
(0043) 
(0044) unsigned char spiByte(unsigned char data)
(0045) {
(0046) 	unsigned char tmp;
(0047) 	SPDR = data;
    2BDF B90F      OUT	0x0F,R16
(0048) 	while( !(SPSR & (1 << SPIF)) );	
    2BE0 9B77      SBIS	0x0E,7
    2BE1 CFFE      RJMP	0x2BE0
(0049) 	tmp = SPDR;
    2BE2 B14F      IN	R20,0x0F
(0050) 	return tmp;
    2BE3 2F04      MOV	R16,R20
    2BE4 940E7CE2  CALL	pop_gset1
    2BE6 9508      RET
(0051) }
(0052) 
(0053) void spiSend(unsigned char data)
(0054) {
(0055)  	SPDR = data;
_spiSend:
  data                 --> R16
    2BE7 B90F      OUT	0x0F,R16
(0056) 	while( !(SPSR & (1 << SPIF)) );	
    2BE8 9B77      SBIS	0x0E,7
    2BE9 CFFE      RJMP	0x2BE8
    2BEA 9508      RET
_mp3WriteReg:
  lByte                --> R20
  hByte                --> R22
  add                  --> R10
    2BEB 940E7CFA  CALL	push_gset3
    2BED 2F62      MOV	R22,R18
    2BEE 2EA0      MOV	R10,R16

⌨️ 快捷键说明

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