?? main.lis
字號:
.module main.c
.area text(rom, con, rel)
0000 .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教學實驗板\M16_VS1003_test\main.c
.area vector(rom, abs)
.org 56
0038 0C940000 jmp _AD_handler
.area text(rom, con, rel)
0000 .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教學實驗板\M16_VS1003_test\main.c
.area vector(rom, abs)
.org 36
0024 0C940000 jmp _TC0_handler
.area text(rom, con, rel)
0000 .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教學實驗板\M16_VS1003_test\main.c
0000 .dbfile C:\DOCUME~1\浪仔\桌面\教學實驗板\M16_VS1003_test\main.c
0000 .dbfunc e main _main fV
.even
0000 _main::
0000 .dbline -1
0000 .dbline 44
0000 ;
0000 ; //--------------------------- 實驗程序名稱:MP3播放器 ------------------------------
0000 ; //
0000 ; //開發平臺:ATmega16教學實驗板
0000 ; //外設使用:1. T/C0定時器 2. AD模數轉換(通道7) 3. SPI總線
0000 ; //模塊使用:1.AD鍵盤 2.SD卡 3.VS1003模塊
0000 ; //頻率:外頻16MHz
0000 ; //電壓:3.3V
0000 ; //
0000 ; //存儲體:SD卡
0000 ; //文件系統:FAT32
0000 ; //顯示器:不帶
0000 ; //音樂文件:SD卡上命名“音樂”文件夾,在“音樂”文件夾內存儲歌曲,格式為“MP3“。
0000 ; //按鍵操作: | Key6 | Key5 | Key4 | Key3 | Key2 | Key1 |
0000 ; // | 播放 | 停止 | 上一首 | 音量+ | 音量- | 下一首 |
0000 ; //
0000 ; //原理:使用ATmega16讀取SD卡中音樂文件傳輸到VS1003進行解碼播放。
0000 ; //重點:1.文件系統 2.SD卡驅動
0000 ; //
0000 ; //作者:廖華明(師兄)
0000 ; //日期:2009.7.8
0000 ; //
0000 ; //----------------------------------------------------------------------------------
0000 ;
0000 ; #include "SPI.h"
0000 ; #include "Usart.h"
0000 ; #include "fat.h"
0000 ; #include "vs1003.h"
0000 ; #include "AD_key.h"
0000 ;
0000 ;
0000 ; //-------------- 音樂播放程序 -------------------//
0000 ;
0000 ; void VS1003_Play(void);
0000 ;
0000 ;
0000 ;
0000 ; //----------------- ------------------------------
0000 ; //
0000 ; // 主函數
0000 ; //
0000 ; //------------------------------------------------
0000 ; void main()
0000 ; {
0000 .dbline 45
0000 ; Usart_Init(9600); // 串口初始化9600bps
0000 00E8 ldi R16,9600
0002 15E2 ldi R17,37
0004 0E940000 xcall _Usart_Init
0008 .dbline 46
0008 ; SPI_Init(); // SPI初始化,默認速度400Hz
0008 0E940000 xcall _SPI_Init
000C .dbline 47
000C ; VS1003_Init(); // VS1003芯片初始化
000C 0E940000 xcall _VS1003_Init
0010 L2:
0010 .dbline 48
0010 ; while(SD_Init()); // SD卡循環初始化
0010 L3:
0010 .dbline 48
0010 0E940000 xcall _SD_Init
0014 0023 tst R16
0016 E1F7 brne L2
0018 X0:
0018 .dbline 49
0018 ; Fat_Init(); // 文件系統初始化
0018 0E940000 xcall _Fat_Init
001C .dbline 50
001C ; AD_Init(); // AD初始化
001C 0E940000 xcall _AD_Init
0020 .dbline 51
0020 ; TC0_Init(); // T/C0初始化
0020 0E940000 xcall _TC0_Init
0024 .dbline 53
0024 ;
0024 ; VS1003_Play(); // 音樂播放
0024 .dbline -2
0024 L1:
0024 .dbline 0 ; func end
0024 00C0 xjmp _VS1003_Play
0026 .dbend
0026 .dbfunc e VS1003_Play _VS1003_Play fV
0026 ; num -> y+14
0026 ; music_num -> y+21
0026 ; music_last -> R14
0026 ; music_next -> R12
0026 ; play_flag -> y+20
0026 ; i -> y+10
0026 ; size_buf -> y+6
0026 ; vol_flag -> R10
0026 ; n -> y+2
0026 ; data_pointer -> y+18
.even
0026 _VS1003_Play::
0026 0E940000 xcall push_xgsetF0FC
002A 6697 sbiw R28,22
002C .dbline -1
002C .dbline 64
002C ; }
002C ;
002C ;
002C ;
002C ; //----------------- ------------------------------
002C ; //
002C ; // 音樂播放函數
002C ; //
002C ; //------------------------------------------------
002C ; void VS1003_Play(void)
002C ; {
002C .dbline 67
002C ; uint32 n;
002C ; uint32 i;
002C ; uint32 size_buf=0; // 已播放的文件大小
002C 40E0 ldi R20,0
002E 50E0 ldi R21,0
0030 60E0 ldi R22,0
0032 70E0 ldi R23,0
0034 4E83 std y+6,R20
0036 5F83 std y+7,R21
0038 6887 std y+8,R22
003A 7987 std y+9,R23
003C .dbline 69
003C ; uint32 num; // 音樂文件所在的簇
003C ; uint8 music_num=0; // 正在播放文件的號碼
003C 0024 clr R0
003E 0D8A std y+21,R0
0040 .dbline 70
0040 ; uint8 play_flag=0; // 播放標志
0040 0C8A std y+20,R0
0042 .dbline 71
0042 ; uint16 data_pointer=0;
0042 1124 clr R1
0044 1B8A std y+19,R1
0046 0A8A std y+18,R0
0048 .dbline 72
0048 ; uint8 music_next=0,music_last=0; // 音樂換曲標志
0048 CC24 clr R12
004A .dbline 72
004A EE24 clr R14
004C .dbline 73
004C ; uint8 vol_flag=0; // 音量調節標志
004C AA24 clr R10
004E .dbline 75
004E ;
004E ; AD_Flag=0; // AD鍵盤標志
004E 2224 clr R2
0050 20920000 sts _AD_Flag,R2
0054 .dbline 76
0054 ; AD_time=0; // AD鍵盤采樣次數
0054 20920000 sts _AD_time,R2
0058 .dbline 77
0058 ; key_num=0; // 按鍵號
0058 20920000 sts _key_num,R2
005C .dbline 79
005C ;
005C ; GetMusicFile(); // 獲取音樂文件
005C 0E940000 xcall _GetMusicFile
0060 .dbline 81
0060 ;
0060 ; num = fclust[music_num]; // 調用音樂文件
0060 80E0 ldi R24,<_fclust
0062 90E0 ldi R25,>_fclust
0064 ED89 ldd R30,y+21
0066 FF27 clr R31
0068 EE0F lsl R30
006A FF1F rol R31
006C EE0F lsl R30
006E FF1F rol R31
0070 E80F add R30,R24
0072 F91F adc R31,R25
0074 2080 ldd R2,z+0
0076 3180 ldd R3,z+1
0078 4280 ldd R4,z+2
007A 5380 ldd R5,z+3
007C 2E86 std y+14,R2
007E 3F86 std y+15,R3
0080 488A std y+16,R4
0082 598A std y+17,R5
0084 CEC1 xjmp L7
0086 L6:
0086 .dbline 84
0086 ;
0086 ; while(1)
0086 ; {
0086 .dbline 85
0086 ; for(i=0;i<8;i++)
0086 40E0 ldi R20,0
0088 50E0 ldi R21,0
008A 60E0 ldi R22,0
008C 70E0 ldi R23,0
008E 4A87 std y+10,R20
0090 5B87 std y+11,R21
0092 6C87 std y+12,R22
0094 7D87 std y+13,R23
0096 69C1 xjmp L12
0098 L9:
0098 .dbline 86
0098 ; {
0098 .dbline 87
0098 ; SD_ReadBlock(FirstDataSector+(num-2)*8+i,Fat_Buffer); // 獲取音樂文件的數據
0098 80E0 ldi R24,<_Fat_Buffer
009A 90E0 ldi R25,>_Fat_Buffer
009C 9983 std y+1,R25
009E 8883 std y+0,R24
00A0 42E0 ldi R20,2
00A2 50E0 ldi R21,0
00A4 60E0 ldi R22,0
00A6 70E0 ldi R23,0
00A8 0E85 ldd R16,y+14
00AA 1F85 ldd R17,y+15
00AC 2889 ldd R18,y+16
00AE 3989 ldd R19,y+17
00B0 041B sub R16,R20
00B2 150B sbc R17,R21
00B4 260B sbc R18,R22
00B6 370B sbc R19,R23
00B8 83E0 ldi R24,3
00BA 90E0 ldi R25,0
00BC 8A93 st -y,R24
00BE 0E940000 xcall lsl32
00C2 1801 movw R2,R16
00C4 2901 movw R4,R18
00C6 20910200 lds R18,_FirstDataSector+2
00CA 30910300 lds R19,_FirstDataSector+2+1
00CE 00910000 lds R16,_FirstDataSector
00D2 10910100 lds R17,_FirstDataSector+1
00D6 020D add R16,R2
00D8 131D adc R17,R3
00DA 241D adc R18,R4
00DC 351D adc R19,R5
00DE 2A84 ldd R2,y+10
00E0 3B84 ldd R3,y+11
00E2 4C84 ldd R4,y+12
00E4 5D84 ldd R5,y+13
00E6 020D add R16,R2
00E8 131D adc R17,R3
00EA 241D adc R18,R4
00EC 351D adc R19,R5
00EE 0E940000 xcall _SD_ReadBlock
00F2 L13:
00F2 .dbline 89
00F2 ; do
00F2 ; {
00F2 .dbline 92
00F2 ; //--------------------------- AD按鍵檢測 ---------------------------//
00F2 ;
00F2 ; if(key_num==6&&AD_time==0)play_flag=1; // Key6按下,播放
00F2 80910000 lds R24,_key_num
00F6 8630 cpi R24,6
00F8 41F4 brne L16
00FA X1:
00FA 20900000 lds R2,_AD_time
00FE 2220 tst R2
0100 21F4 brne L16
0102 X2:
0102 .dbline 92
0102 0024 clr R0
0104 0394 inc R0
0106 0C8A std y+20,R0
0108 36C0 xjmp L17
010A L16:
010A .dbline 93
010A ; else if(key_num==5&&AD_time==0)play_flag=0; // Key5按下,停止
010A 80910000 lds R24,_key_num
010E 8530 cpi R24,5
0110 39F4 brne L18
0112 X3:
0112 20900000 lds R2,_AD_time
0116 2220 tst R2
0118 19F4 brne L18
011A X4:
011A .dbline 93
011A 0024 clr R0
011C 0C8A std y+20,R0
011E 2BC0 xjmp L19
0120 L18:
0120 .dbline 94
0120 ; else if(key_num==1&&AD_time==0)music_next=1; // Key1按下,下一首
0120 80910000 lds R24,_key_num
0124 8130 cpi R24,1
0126 39F4 brne L20
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -