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

📄 1011.lis

📁 这个是通过51做的SD卡读写和MP3的程序!
💻 LIS
字号:
                        .module _1011.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\pas\桌面\SD卡MP3程序\1011.c
 0000                   .dbfunc e delay_Nus _delay_Nus fV
 0000           ;              b -> R20
 0000           ;              n -> R16,R17
                        .even
 0000           _delay_Nus::
 0000 0E940000          xcall push_gset1
 0004                   .dbline -1
 0004                   .dbline 19
 0004           ; /************************************************************/
 0004           ; /*                     VS1011 Code for   M32L                                     */
 0004           ; /*                               By   pasyong                                                         */
 0004           ; /*                               2006-4                                                                       */
 0004           ; /*                               Base ICC6.31A                                                */
 0004           ; /************************************************************/
 0004           ; #include <iom32v.h>
 0004           ; #include <macros.h>
 0004           ; #define uchar unsigned char
 0004           ; #define uint unsigned int
 0004           ; #define MP3_DDR        DDRB
 0004           ; #define MP3_PORT       PORTB
 0004           ; #define MP3_PIN        PINB
 0004           ; #define MP3_CMD_CS     BIT(0)
 0004           ; #define MP3_DATA_CS    BIT(3)
 0004           ; #define MP3_DATA_REQ   BIT(2)   
 0004           ; #define MP3_DATA_REST  BIT(1)   
 0004           ; void delay_Nus(unsigned int n)
 0004           ;       {
 0004                   .dbline 21
 0004           ;       unsigned char  b;
 0004           ;               for (b = 1; b<n; b++)
 0004 41E0              ldi R20,1
 0006 01C0              xjmp L5
 0008           L2:
 0008                   .dbline 22
 0008           L3:
 0008                   .dbline 21
 0008 4395              inc R20
 000A           L5:
 000A                   .dbline 21
 000A 242E              mov R2,R20
 000C 3324              clr R3
 000E 2016              cp R2,R16
 0010 3106              cpc R3,R17
 0012 D0F3              brlo L2
 0014                   .dbline -2
 0014           L1:
 0014 0E940000          xcall pop_gset1
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbsym r b 20 c
 001A                   .dbsym r n 16 i
 001A                   .dbend
 001A                   .dbfunc e spi_init _spi_init fV
                        .even
 001A           _spi_init::
 001A                   .dbline -1
 001A                   .dbline 27
 001A           ;                       ;
 001A           ;       }
 001A           ; //SPI initialize
 001A           ; // clock rate: 500000hz
 001A           ; void spi_init(void)
 001A           ; {
 001A                   .dbline 28
 001A           ;  DDRB=0xBF;    //SI输入,SO,SCK,SS输出
 001A 8FEB              ldi R24,191
 001C 87BB              out 0x17,R24
 001E                   .dbline 29
 001E           ;  SPCR = 0x53;  //setup SPI
 001E 83E5              ldi R24,83
 0020 8DB9              out 0xd,R24
 0022                   .dbline 30
 0022           ;  SPSR = 0x00;  //setup SPI
 0022 2224              clr R2
 0024 2EB8              out 0xe,R2
 0026                   .dbline -2
 0026           L6:
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbend
 0028                   .dbfunc e Write_Byte_SPI _Write_Byte_SPI fV
 0028           ;           byte -> R16
                        .even
 0028           _Write_Byte_SPI::
 0028                   .dbline -1
 0028                   .dbline 33
 0028           ; }
 0028           ; void Write_Byte_SPI(unsigned char byte)
 0028           ; {   
 0028                   .dbline 34
 0028           ;     SPDR = byte;
 0028 0FB9              out 0xf,R16
 002A           L8:
 002A                   .dbline 35
 002A           L9:
 002A                   .dbline 35
 002A           ;     while (!(SPSR & (1<<SPIF)));
 002A 779B              sbis 0xe,7
 002C FECF              rjmp L8
 002E                   .dbline -2
 002E           L7:
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r byte 16 c
 0030                   .dbend
 0030                   .dbfunc e Read_Byte_SPI _Read_Byte_SPI fc
                        .even
 0030           _Read_Byte_SPI::
 0030                   .dbline -1
 0030                   .dbline 38
 0030           ; }
 0030           ; unsigned char Read_Byte_SPI(void)
 0030           ; {   
 0030                   .dbline 39
 0030           ;     SPDR = 0xFF;
 0030 8FEF              ldi R24,255
 0032 8FB9              out 0xf,R24
 0034           L12:
 0034                   .dbline 40
 0034           L13:
 0034                   .dbline 40
 0034           ;     while (!(SPSR &(1<<SPIF)));
 0034 779B              sbis 0xe,7
 0036 FECF              rjmp L12
 0038                   .dbline 41
 0038           ;     return SPDR;
 0038 0FB1              in R16,0xf
 003A                   .dbline -2
 003A           L11:
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbend
 003C                   .dbfunc e mp3_port_init _mp3_port_init fV
                        .even
 003C           _mp3_port_init::
 003C                   .dbline -1
 003C                   .dbline 44
 003C           ; }
 003C           ; void mp3_port_init()
 003C           ; {
 003C                   .dbline 45
 003C           ; spi_init();
 003C EEDF              xcall _spi_init
 003E                   .dbline 46
 003E           ; MP3_DDR|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
 003E 87B3              in R24,0x17
 0040 8B60              ori R24,11
 0042 87BB              out 0x17,R24
 0044                   .dbline 47
 0044           ; MP3_DDR&=~MP3_DATA_REQ;
 0044 BA98              cbi 0x17,2
 0046                   .dbline 48
 0046           ; MP3_PORT|=MP3_DATA_CS |MP3_CMD_CS|MP3_DATA_REST;
 0046 88B3              in R24,0x18
 0048 8B60              ori R24,11
 004A 88BB              out 0x18,R24
 004C                   .dbline -2
 004C           L15:
 004C                   .dbline 0 ; func end
 004C 0895              ret
 004E                   .dbend
 004E                   .dbfunc e vs1011_cmd_write _vs1011_cmd_write fV
 004E           ;           data -> R20,R21
 004E           ;        address -> R22
                        .even
 004E           _vs1011_cmd_write::
 004E 0E940000          xcall push_gset2
 0052 A901              movw R20,R18
 0054 602F              mov R22,R16
 0056                   .dbline -1
 0056                   .dbline 52
 0056           ; //MP3_PORT&=~MP3_DATA_REST;
 0056           ; }
 0056           ; void vs1011_cmd_write(uchar address,uint data)
 0056           ; { 
 0056                   .dbline 53
 0056           ; MP3_PORT|=MP3_DATA_CS;       //MP3_DATA_CS=1;
 0056 C39A              sbi 0x18,3
 0058                   .dbline 54
 0058           ; MP3_PORT&=~MP3_CMD_CS;       //MP3_CMD_CS=0;
 0058 C098              cbi 0x18,0
 005A                   .dbline 55
 005A           ; Write_Byte_SPI(0x02);      //VS1011的写命令
 005A 02E0              ldi R16,2
 005C E5DF              xcall _Write_Byte_SPI
 005E                   .dbline 57
 005E           ; //delay_nus(20);
 005E           ; Write_Byte_SPI(address);   //地址
 005E 062F              mov R16,R22
 0060 E3DF              xcall _Write_Byte_SPI
 0062                   .dbline 58
 0062           ; Write_Byte_SPI(data>>8);
 0062 8A01              movw R16,R20
 0064 012F              mov R16,R17
 0066 1127              clr R17
 0068 DFDF              xcall _Write_Byte_SPI
 006A                   .dbline 59
 006A           ; Write_Byte_SPI(data);
 006A 042F              mov R16,R20
 006C DDDF              xcall _Write_Byte_SPI
 006E                   .dbline 61
 006E           ; //delay_nus(200);
 006E           ; MP3_PORT|=MP3_CMD_CS;       //MP3_CMD_CS=1;
 006E C09A              sbi 0x18,0
 0070                   .dbline -2
 0070           L16:
 0070 0E940000          xcall pop_gset2
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym r data 20 i
 0076                   .dbsym r address 22 c
 0076                   .dbend
 0076                   .dbfunc e vs1011_data_write _vs1011_data_write fV
 0076           ;           data -> R20
                        .even
 0076           _vs1011_data_write::
 0076 0E940000          xcall push_gset1
 007A 402F              mov R20,R16
 007C                   .dbline -1
 007C                   .dbline 65
 007C           ; } 
 007C           ; 
 007C           ; void vs1011_data_write(uchar data)
 007C           ; {
 007C                   .dbline 66
 007C           ; MP3_PORT&=~MP3_DATA_CS;         //MP3_DATA_CS=0;
 007C C398              cbi 0x18,3
 007E                   .dbline 67
 007E           ; Write_Byte_SPI(data);
 007E 042F              mov R16,R20
 0080 D3DF              xcall _Write_Byte_SPI
 0082                   .dbline 68
 0082           ; MP3_PORT|=MP3_DATA_CS;         //MP3_DATA_CS=1;
 0082 C39A              sbi 0x18,3
 0084                   .dbline 69
 0084           ; MP3_PORT|=MP3_CMD_CS;         //MP3_CMD_CS=1; 
 0084 C09A              sbi 0x18,0
 0086                   .dbline -2
 0086           L17:
 0086 0E940000          xcall pop_gset1
 008A                   .dbline 0 ; func end
 008A 0895              ret
 008C                   .dbsym r data 20 c
 008C                   .dbend
 008C                   .dbfunc e vs1011_read _vs1011_read fi
 008C           ;          temp1 -> R22
 008C           ;           temp -> R20,R21
 008C           ;        address -> R10
                        .even
 008C           _vs1011_read::
 008C 0E940000          xcall push_gset3
 0090 A02E              mov R10,R16
 0092                   .dbline -1
 0092                   .dbline 73
 0092           ; }
 0092           ; 
 0092           ; uint vs1011_read(uchar address)
 0092           ; {
 0092                   .dbline 74
 0092           ; uchar temp1=0;
 0092 6627              clr R22
 0094                   .dbline 75
 0094           ; uint temp=0; 
 0094 4427              clr R20
 0096 5527              clr R21
 0098                   .dbline 76
 0098           ; MP3_PORT|=MP3_DATA_CS;        //MP3_DATA_CS=1;
 0098 C39A              sbi 0x18,3
 009A                   .dbline 77
 009A           ; MP3_PORT&=~MP3_CMD_CS;        //MP3_CMD_CS=0;
 009A C098              cbi 0x18,0
 009C                   .dbline 78
 009C           ; Write_Byte_SPI(0x03);      //VS1011的读命令
 009C 03E0              ldi R16,3
 009E C4DF              xcall _Write_Byte_SPI
 00A0                   .dbline 80
 00A0           ; //delay_nus(20);
 00A0           ; Write_Byte_SPI(address);   //地址
 00A0 0A2D              mov R16,R10
 00A2 C2DF              xcall _Write_Byte_SPI
 00A4                   .dbline 81
 00A4           ; temp=Read_Byte_SPI();
 00A4 C5DF              xcall _Read_Byte_SPI
 00A6 402F              mov R20,R16
 00A8 5527              clr R21
 00AA                   .dbline 82
 00AA           ; temp=temp<<8;
 00AA 542F              mov R21,R20
 00AC 4427              clr R20
 00AE                   .dbline 83
 00AE           ; temp1=Read_Byte_SPI();
 00AE C0DF              xcall _Read_Byte_SPI
 00B0 602F              mov R22,R16
 00B2                   .dbline 84
 00B2           ; temp=temp|temp1; 
 00B2 262E              mov R2,R22
 00B4 3324              clr R3
 00B6 4229              or R20,R2
 00B8 5329              or R21,R3
 00BA                   .dbline 85
 00BA           ; MP3_PORT|=MP3_CMD_CS;       //MP3_CMD_CS=1;
 00BA C09A              sbi 0x18,0
 00BC                   .dbline 86
 00BC           ; return temp;
 00BC 8A01              movw R16,R20
 00BE                   .dbline -2
 00BE           L18:
 00BE 0E940000          xcall pop_gset3
 00C2                   .dbline 0 ; func end
 00C2 0895              ret
 00C4                   .dbsym r temp1 22 c
 00C4                   .dbsym r temp 20 i
 00C4                   .dbsym r address 10 c
 00C4                   .dbend
 00C4                   .dbfunc e vs1011_init _vs1011_init fV
                        .even
 00C4           _vs1011_init::
 00C4                   .dbline -1
 00C4                   .dbline 91
 00C4           ; 
 00C4           ; }
 00C4           ; 
 00C4           ; void vs1011_init(void)
 00C4           ; {
 00C4                   .dbline 93
 00C4           ; 
 00C4           ; delay_Nus(50);
 00C4 02E3              ldi R16,50
 00C6 10E0              ldi R17,0
 00C8 9BDF              xcall _delay_Nus
 00CA                   .dbline 94
 00CA           ; vs1011_cmd_write(0x00,0x0800);     //NEW MODE
 00CA 20E0              ldi R18,2048
 00CC 38E0              ldi R19,8
 00CE 0027              clr R16
 00D0 BEDF              xcall _vs1011_cmd_write
 00D2                   .dbline 95
 00D2           ; vs1011_cmd_write(0x02,0X75);       //BASS
 00D2 25E7              ldi R18,117
 00D4 30E0              ldi R19,0
 00D6 02E0              ldi R16,2
 00D8 BADF              xcall _vs1011_cmd_write
 00DA                   .dbline 96
 00DA           ; vs1011_cmd_write(0x03,0X9800);     //CLOCK F
 00DA 20E0              ldi R18,38912
 00DC 38E9              ldi R19,152
 00DE 03E0              ldi R16,3
 00E0 B6DF              xcall _vs1011_cmd_write
 00E2                   .dbline 97
 00E2           ; vs1011_cmd_write(0x0b,0X3030);    //VOLUME
 00E2 20E3              ldi R18,12336
 00E4 30E3              ldi R19,48
 00E6 0BE0              ldi R16,11
 00E8 B2DF              xcall _vs1011_cmd_write
 00EA                   .dbline -2
 00EA           L19:
 00EA                   .dbline 0 ; func end
 00EA 0895              ret
 00EC                   .dbend

⌨️ 快捷键说明

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