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

📄 vs1001k.lis

📁 mp3源码,是自己写的,关于vs1001与CD卡的读取歌曲,和播放.
💻 LIS
字号:
                        .module vs1001K.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\mine\mp3\MP3\vs1001K.c
 0000                   .dbfunc e delay _delay fV
 0000           ;              m -> R20,R21
 0000           ;              n -> R22,R23
 0000           ;            dat -> R16,R17
                        .even
 0000           _delay::
 0000 0E940000          xcall push_gset2
 0004                   .dbline -1
 0004                   .dbline 4
 0004           ; #include<all.h>
 0004           ; 
 0004           ; void delay(uint dat)//延迟10us
 0004           ; { uint m,n;
 0004                   .dbline 5
 0004           ;   for(m=0;m<dat;m++)
 0004 4427              clr R20
 0006 5527              clr R21
 0008 0BC0              xjmp L5
 000A           L2:
 000A                   .dbline 6
 000A 6627              clr R22
 000C 7727              clr R23
 000E 02C0              xjmp L9
 0010           L6:
 0010                   .dbline 6
 0010           L7:
 0010                   .dbline 6
 0010 6F5F              subi R22,255  ; offset = 1
 0012 7F4F              sbci R23,255
 0014           L9:
 0014                   .dbline 6
 0014 6230              cpi R22,2
 0016 E0E0              ldi R30,0
 0018 7E07              cpc R23,R30
 001A D0F3              brlo L6
 001C           L3:
 001C                   .dbline 5
 001C 4F5F              subi R20,255  ; offset = 1
 001E 5F4F              sbci R21,255
 0020           L5:
 0020                   .dbline 5
 0020 4017              cp R20,R16
 0022 5107              cpc R21,R17
 0024 90F3              brlo L2
 0026                   .dbline -2
 0026                   .dbline 7
 0026           ;    for(n=0;n<2;n++);
 0026           ; }
 0026           L1:
 0026 0E940000          xcall pop_gset2
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbsym r m 20 i
 002C                   .dbsym r n 22 i
 002C                   .dbsym r dat 16 i
 002C                   .dbend
 002C                   .dbfunc e vs_wait_dreq _vs_wait_dreq fV
                        .even
 002C           _vs_wait_dreq::
 002C                   .dbline -1
 002C                   .dbline 10
 002C           L11:
 002C                   .dbline 10
 002C           L12:
 002C                   .dbline 10
 002C           ; /*等DREQ*/
 002C           ; void vs_wait_dreq(void)
 002C           ; { while(!(PIND&0x04)); }
 002C 829B              sbis 0x10,2
 002E FECF              rjmp L11
 0030                   .dbline -2
 0030                   .dbline 10
 0030           L10:
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbend
 0032                   .dbfunc e write_single _write_single fc
 0032           ;            dat -> R16
                        .even
 0032           _write_single::
 0032                   .dbline -1
 0032                   .dbline 14
 0032           ; 
 0032           ; /*发单个命令*/
 0032           ; uchar write_single(uchar dat)//发
 0032           ; {
 0032                   .dbline 15
 0032           ;   SPDR=dat;
 0032 0FB9              out 0xf,R16
 0034           L15:
 0034                   .dbline 16
 0034           L16:
 0034                   .dbline 16
 0034           ;   while(!(SPSR&0x80));
 0034 779B              sbis 0xe,7
 0036 FECF              rjmp L15
 0038                   .dbline 17
 0038           ;   return SPDR;
 0038 0FB1              in R16,0xf
 003A                   .dbline -2
 003A           L14:
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbsym r dat 16 c
 003C                   .dbend
 003C                   .dbfunc e read_single _read_single fc
                        .even
 003C           _read_single::
 003C                   .dbline -1
 003C                   .dbline 21
 003C           ; }  
 003C           ; 
 003C           ; uchar read_single(void)//读单个数据
 003C           ; {  return write_single(0xff); }   
 003C                   .dbline 21
 003C 0FEF              ldi R16,255
 003E                   .dbline -2
 003E           L18:
 003E                   .dbline 0 ; func end
 003E F9CF              xjmp _write_single
 0040                   .dbend
 0040                   .dbfunc e vs_write_sci _vs_write_sci fV
 0040           ;            dat -> R20,R21
 0040           ;            add -> R22
                        .even
 0040           _vs_write_sci::
 0040 0E940000          xcall push_gset2
 0044 A901              movw R20,R18
 0046 602F              mov R22,R16
 0048                   .dbline -1
 0048                   .dbline 25
 0048           ; 
 0048           ; /*写命令*/
 0048           ; void vs_write_sci(uchar add,uint dat)//写命令
 0048           ; { clear_xcs;//XCS有效
 0048                   .dbline 25
 0048 C498              cbi 0x18,4
 004A                   .dbline 26
 004A           ;   select_vs;
 004A C39A              sbi 0x18,3
 004C                   .dbline 27
 004C           ;   write_single(0x02);//写命令
 004C 02E0              ldi R16,2
 004E F1DF              xcall _write_single
 0050                   .dbline 28
 0050           ;   write_single(add);//写地址
 0050 062F              mov R16,R22
 0052 EFDF              xcall _write_single
 0054                   .dbline 29
 0054           ;   write_single((uchar)(dat>>8));
 0054 8A01              movw R16,R20
 0056 012F              mov R16,R17
 0058 1127              clr R17
 005A EBDF              xcall _write_single
 005C                   .dbline 30
 005C           ;   write_single((uchar)dat );
 005C 042F              mov R16,R20
 005E E9DF              xcall _write_single
 0060                   .dbline 31
 0060           ;   set_xcs;
 0060 C49A              sbi 0x18,4
 0062                   .dbline -2
 0062                   .dbline 32
 0062           ; }
 0062           L19:
 0062 0E940000          xcall pop_gset2
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r dat 20 i
 0068                   .dbsym r add 22 c
 0068                   .dbend
 0068                   .dbfunc e vs_read_sci _vs_read_sci fi
 0068           ;            dat -> R20,R21
 0068           ;            add -> R20
                        .even
 0068           _vs_read_sci::
 0068 0E940000          xcall push_gset1
 006C 402F              mov R20,R16
 006E                   .dbline -1
 006E                   .dbline 35
 006E           ; 
 006E           ; uint vs_read_sci(uchar add)//读命令
 006E           ; { uint dat;
 006E                   .dbline 36
 006E           ;   clear_xcs;//XCS有效
 006E C498              cbi 0x18,4
 0070                   .dbline 37
 0070           ;   select_vs;
 0070 C39A              sbi 0x18,3
 0072                   .dbline 38
 0072           ;   write_single(0x03);//读命令
 0072 03E0              ldi R16,3
 0074 DEDF              xcall _write_single
 0076                   .dbline 39
 0076           ;   write_single(add);//写地址
 0076 042F              mov R16,R20
 0078 DCDF              xcall _write_single
 007A                   .dbline 40
 007A           ;   dat=(uint)read_single()<<8;
 007A E0DF              xcall _read_single
 007C 402F              mov R20,R16
 007E 5527              clr R21
 0080 542F              mov R21,R20
 0082 4427              clr R20
 0084                   .dbline 41
 0084           ;   dat|=read_single();
 0084 DBDF              xcall _read_single
 0086 202E              mov R2,R16
 0088 3324              clr R3
 008A 4229              or R20,R2
 008C 5329              or R21,R3
 008E                   .dbline 42
 008E           ;   set_xcs;
 008E C49A              sbi 0x18,4
 0090                   .dbline 43
 0090           ;   return dat;
 0090 8A01              movw R16,R20
 0092                   .dbline -2
 0092           L20:
 0092 0E940000          xcall pop_gset1
 0096                   .dbline 0 ; func end
 0096 0895              ret
 0098                   .dbsym r dat 20 i
 0098                   .dbsym r add 20 c
 0098                   .dbend
 0098                   .dbfunc e vs_write_sdi_byte _vs_write_sdi_byte fV
 0098           ;            dat -> R16
                        .even
 0098           _vs_write_sdi_byte::
 0098                   .dbline -1
 0098                   .dbline 47
 0098           ; }
 0098           ; /*发数据*/
 0098           ; void vs_write_sdi_byte(uchar dat)//发送单个字节
 0098           ; {  set_xcs;
 0098                   .dbline 47
 0098 C49A              sbi 0x18,4
 009A                   .dbline 48
 009A           ;    select_vs;
 009A C39A              sbi 0x18,3
 009C                   .dbline 49
 009C           ;    clear_bysnc;        
 009C C098              cbi 0x18,0
 009E                   .dbline 50
 009E           ;    set_bysnc;
 009E C09A              sbi 0x18,0
 00A0                   .dbline 51
 00A0           ;    SPDR=dat;
 00A0 0FB9              out 0xf,R16
 00A2           L22:
 00A2                   .dbline 52
 00A2           L23:
 00A2                   .dbline 52
 00A2           ;    while(!(SPSR&0x80));
 00A2 779B              sbis 0xe,7
 00A4 FECF              rjmp L22
 00A6                   .dbline 53
 00A6           ;    clear_bysnc;
 00A6 C098              cbi 0x18,0
 00A8                   .dbline -2
 00A8                   .dbline 54
 00A8           ; }
 00A8           L21:
 00A8                   .dbline 0 ; func end
 00A8 0895              ret
 00AA                   .dbsym r dat 16 c
 00AA                   .dbend
 00AA                   .dbfunc e vs_write_sdi_bytes _vs_write_sdi_bytes fV
 00AA           ;              i -> R20,R21
 00AA           ;              n -> R18,R19
 00AA           ;            add -> R16,R17
                        .even
 00AA           _vs_write_sdi_bytes::
 00AA 0E940000          xcall push_gset1
 00AE                   .dbline -1
 00AE                   .dbline 56
 00AE           ; void vs_write_sdi_bytes(uchar *add,uint n)//发送多个数据
 00AE           ; {  uint i;
 00AE                   .dbline 58
 00AE           ;  //  vs_wait_dreq();//等DREQ变高
 00AE           ;    select_vs;
 00AE C39A              sbi 0x18,3
 00B0                   .dbline 59
 00B0           ;    set_xcs;//选中DCLK
 00B0 C49A              sbi 0x18,4
 00B2                   .dbline 60
 00B2           ;    for(i=0;i<n;i++)
 00B2 4427              clr R20
 00B4 5527              clr R21
 00B6 0AC0              xjmp L29
 00B8           L26:
 00B8                   .dbline 61
 00B8           ;    { clear_bysnc;      
 00B8                   .dbline 61
 00B8 C098              cbi 0x18,0
 00BA                   .dbline 62
 00BA           ;      set_bysnc;
 00BA C09A              sbi 0x18,0
 00BC                   .dbline 63
 00BC           ;      SPDR=*add++;
 00BC F801              movw R30,R16
 00BE 2190              ld R2,Z+
 00C0 8F01              movw R16,R30
 00C2 2FB8              out 0xf,R2
 00C4           L30:
 00C4                   .dbline 64
 00C4           L31:
 00C4                   .dbline 64
 00C4 779B              sbis 0xe,7
 00C6 FECF              rjmp L30
 00C8                   .dbline 65
 00C8           L27:
 00C8                   .dbline 60
 00C8 4F5F              subi R20,255  ; offset = 1
 00CA 5F4F              sbci R21,255
 00CC           L29:
 00CC                   .dbline 60
 00CC 4217              cp R20,R18
 00CE 5307              cpc R21,R19
 00D0 98F3              brlo L26
 00D2           L33:
 00D2                   .dbline 66
 00D2           L34:
 00D2                   .dbline 66
 00D2           ;        while(!(SPSR&0x80));
 00D2           ;    }
 00D2           ;     while(!(SPSR&0x80));
 00D2 779B              sbis 0xe,7
 00D4 FECF              rjmp L33
 00D6                   .dbline 67
 00D6           ;     clear_bysnc;      
 00D6 C098              cbi 0x18,0
 00D8                   .dbline -2
 00D8                   .dbline 68
 00D8           ; }     
 00D8           L25:
 00D8 0E940000          xcall pop_gset1
 00DC                   .dbline 0 ; func end
 00DC 0895              ret
 00DE                   .dbsym r i 20 i
 00DE                   .dbsym r n 18 i
 00DE                   .dbsym r add 16 pc
 00DE                   .dbend
 00DE                   .dbfunc e vs1001k_reset _vs1001k_reset fV
                        .even
 00DE           _vs1001k_reset::
 00DE                   .dbline -1
 00DE                   .dbline 70
 00DE           ; void vs1001k_reset(void)//VS1001K复位
 00DE           ; { vs_write_sci(MODE,0x0004);
 00DE                   .dbline 70
 00DE 24E0              ldi R18,4
 00E0 30E0              ldi R19,0
 00E2 0027              clr R16
 00E4 ADDF              xcall _vs_write_sci
 00E6                   .dbline 71
 00E6           ;   delay(500);
 00E6 04EF              ldi R16,500
 00E8 11E0              ldi R17,1
 00EA 8ADF              xcall _delay
 00EC                   .dbline 72
 00EC           ;   vs_wait_dreq();
 00EC 9FDF              xcall _vs_wait_dreq
 00EE                   .dbline 73
 00EE           ;   vs_write_sci(MODE,0x0000);
 00EE 2227              clr R18
 00F0 3327              clr R19
 00F2 0027              clr R16
 00F4 A5DF              xcall _vs_write_sci
 00F6                   .dbline 74
 00F6           ;   vs_write_sci(VOL,0x0000);
 00F6 2227              clr R18
 00F8 3327              clr R19
 00FA 0BE0              ldi R16,11
 00FC A1DF              xcall _vs_write_sci
 00FE                   .dbline 75
 00FE           ;   vs_write_sdi_byte(0x00);
 00FE 0027              clr R16
 0100 CBDF              xcall _vs_write_sdi_byte
 0102                   .dbline 76
 0102           ;   vs_write_sdi_byte(0x00);
 0102 0027              clr R16
 0104                   .dbline -2
 0104                   .dbline 77
 0104           ; }  
 0104           L36:
 0104                   .dbline 0 ; func end
 0104 C9CF              xjmp _vs_write_sdi_byte
 0106                   .dbend

⌨️ 快捷键说明

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