📄 vs1001k.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 + -