📄 mp3.lst
字号:
__text_start:
__start:
086B E5CF LDI R28,0x5F
086C E0D8 LDI R29,0x8
086D BFCD OUT 0x3D,R28
086E BFDE OUT 0x3E,R29
086F 52C8 SUBI R28,0x28
0870 40D0 SBCI R29,0
0871 EA0A LDI R16,0xAA
0872 8308 STD Y+0,R16
0873 2400 CLR R0
0874 EDEE LDI R30,0xDE
0875 E0F0 LDI R31,0
0876 E014 LDI R17,4
0877 32E2 CPI R30,0x22
0878 07F1 CPC R31,R17
0879 F011 BEQ 0x087C
087A 9201 ST R0,Z+
087B CFFB RJMP 0x0877
087C 8300 STD Z+0,R16
087D E5E8 LDI R30,0x58
087E E1F0 LDI R31,0x10
087F E6A0 LDI R26,0x60
0880 E0B0 LDI R27,0
0881 E110 LDI R17,0x10
0882 3DE6 CPI R30,0xD6
0883 07F1 CPC R31,R17
0884 F021 BEQ 0x0889
0885 95C8 LPM
0886 9631 ADIW R30,1
0887 920D ST R0,X+
0888 CFF9 RJMP 0x0882
0889 940E088C CALL _main
_exit:
088B CFFF RJMP _exit
_main:
088C 9722 SBIW R28,2
FILE: D:\桌面\mp3\main\main.c
(0001) #include "config.h"
(0002)
(0003) /*********************************************************************************************************
(0004) ** 函数名称: STA013演示程序
(0005) ** 功能描述:
(0006) ** 输 入:
(0007) ** 输 出:
(0008) ** 全局变量:
(0009) ** 调用模块:
(0010) ** 说明:
(0011) ** 注意:
(0012) ** 日 期: 2006年8月29日
(0013) ********************************************************************************************************/
(0014)
(0015)
(0016)
(0017) void main(void)
(0018) {
(0019) Twi_Init();
088D 940E0DCC CALL _Twi_Init
(0020) sta_IoIni();
088F 940E0E03 CALL _sta_IoIni
(0021) Spi_Init();
0891 940E0A27 CALL _Spi_Init
(0022) sta_Reset();
0893 940E0E0C CALL _sta_Reset
(0023) SEI();
0895 9478 BSET 7
(0024) sta_Init();
0896 940E0F21 CALL _sta_Init
(0025) sta_SetVolume(90,1);
0898 E021 LDI R18,1
0899 E50A LDI R16,0x5A
089A 940E0F96 CALL _sta_SetVolume
(0026) MMC_Init();
089C 940E102D CALL _MMC_Init
(0027) FAT_Init();
089E 940E1450 CALL _FAT_Init
08A0 C05A RJMP 0x08FB
(0028) while(1){
(0029) FAT_FileOpen("GUOGE MP3", 0);
08A1 E040 LDI R20,0
08A2 E050 LDI R21,0
08A3 E060 LDI R22,0
08A4 E070 LDI R23,0
08A5 8368 STD Y+0,R22
08A6 8379 STD Y+1,R23
08A7 019A MOVW R18,R20
08A8 EA01 LDI R16,0xA1
08A9 E010 LDI R17,0
08AA 940E15AE CALL _FAT_FileOpen
(0030) sta_SendToDecoder(0);
08AC 2700 CLR R16
08AD 2711 CLR R17
08AE 940E0FDC CALL _sta_SendToDecoder
(0031) FAT_FileOpen("A01 MP3", 0);
08B0 E040 LDI R20,0
08B1 E050 LDI R21,0
08B2 E060 LDI R22,0
08B3 E070 LDI R23,0
08B4 8368 STD Y+0,R22
08B5 8379 STD Y+1,R23
08B6 019A MOVW R18,R20
08B7 E904 LDI R16,0x94
08B8 E010 LDI R17,0
08B9 940E15AE CALL _FAT_FileOpen
(0032) sta_SendToDecoder(0);
08BB 2700 CLR R16
08BC 2711 CLR R17
08BD 940E0FDC CALL _sta_SendToDecoder
(0033) FAT_FileOpen("A02 MP3", 0);
08BF E040 LDI R20,0
08C0 E050 LDI R21,0
08C1 E060 LDI R22,0
08C2 E070 LDI R23,0
08C3 8368 STD Y+0,R22
08C4 8379 STD Y+1,R23
08C5 019A MOVW R18,R20
08C6 E807 LDI R16,0x87
08C7 E010 LDI R17,0
08C8 940E15AE CALL _FAT_FileOpen
(0034) sta_SendToDecoder(0);
08CA 2700 CLR R16
08CB 2711 CLR R17
08CC 940E0FDC CALL _sta_SendToDecoder
(0035) FAT_FileOpen("A03 MP3", 0);
08CE E040 LDI R20,0
08CF E050 LDI R21,0
08D0 E060 LDI R22,0
08D1 E070 LDI R23,0
08D2 8368 STD Y+0,R22
08D3 8379 STD Y+1,R23
08D4 019A MOVW R18,R20
08D5 E70A LDI R16,0x7A
08D6 E010 LDI R17,0
08D7 940E15AE CALL _FAT_FileOpen
(0036) sta_SendToDecoder(0);
08D9 2700 CLR R16
08DA 2711 CLR R17
08DB 940E0FDC CALL _sta_SendToDecoder
(0037) FAT_FileOpen("A04 MP3", 0);
08DD E040 LDI R20,0
08DE E050 LDI R21,0
08DF E060 LDI R22,0
08E0 E070 LDI R23,0
08E1 8368 STD Y+0,R22
08E2 8379 STD Y+1,R23
08E3 019A MOVW R18,R20
08E4 E60D LDI R16,0x6D
08E5 E010 LDI R17,0
08E6 940E15AE CALL _FAT_FileOpen
(0038) sta_SendToDecoder(0);
08E8 2700 CLR R16
08E9 2711 CLR R17
08EA 940E0FDC CALL _sta_SendToDecoder
(0039) FAT_FileOpen("A05 MP3", 0);
08EC E040 LDI R20,0
08ED E050 LDI R21,0
08EE E060 LDI R22,0
08EF E070 LDI R23,0
08F0 8368 STD Y+0,R22
08F1 8379 STD Y+1,R23
08F2 019A MOVW R18,R20
08F3 E600 LDI R16,0x60
08F4 E010 LDI R17,0
08F5 940E15AE CALL _FAT_FileOpen
(0040) sta_SendToDecoder(0);
08F7 2700 CLR R16
08F8 2711 CLR R17
08F9 940E0FDC CALL _sta_SendToDecoder
08FB CFA5 RJMP 0x08A1
08FC 9622 ADIW R28,2
08FD 9508 RET
FILE: D:\桌面\mp3\queue\queue.c
(0001) /*********************************************************************************************************
(0002) ** QUEUE队列头文件
(0003) ** (c) Copyright 2006-2008, limaokui
(0004) ** All Rights Reserved
(0005) **
(0006) ** V1.0.0
(0007) **
(0008) **
(0009) **--------------文件信息--------------------------------------------------------------------------------
(0010) **文 件 名:queue.h
(0011) **创 建 人: 李茂奎
(0012) **最后修改日期: 2006年8月29日
(0013) **描 述:
(0014) **
(0015) **--------------历史版本信息----------------------------------------------------------------------------
(0016) ** 创建人: 李茂奎
(0017) ** 版 本: V1.00
(0018) ** 日 期: 2006年8月29日
(0019) ** 描 述: 原始版本
(0020) **
(0021) **------------------------------------------------------------------------------------------------------
(0022) ** 修改人: 李茂奎
(0023) ** 版 本:
(0024) ** 日 期:
(0025) ** 描 述:
(0026) **
(0027) **--------------当前版本修订------------------------------------------------------------------------------
(0028) ** 修改人: 李茂奎
(0029) ** 日 期: 2006年8月29日
(0030) ** 描 述:
(0031) **
(0032) **------------------------------------------------------------------------------------------------------
(0033) *********************************************************************************************************
(0034) **使用说明:在定义队列时请定义一个静态数组,并将此数组传递给队列的data,并将数据长度传递给queuesize
(0035) #define TWI_SEND_DATA_BUFFER_SIZE 100
(0036) static uint8 Twi_SendData[TWI_SEND_DATA_BUFFER_SIZE];
(0037) CirQueue Twi_SendBuffer={0,0,0,Twi_SendData,TWI_SEND_DATA_BUFFER_SIZE,QUEUE_OK};
(0038)
(0039) *********************************************************************************************************/
(0040) #include "config.h"
(0041) /*********************************************************************************************************
(0042) ** 函数名称:InitQueue
(0043) ** 功能描述:初始化队列
(0044) ** 输 入:
(0045) ** 输 出:
(0046) ** 全局变量:
(0047) ** 调用模块:
(0048) ** 说明:
(0049) ** 注意:
(0050) ** 日 期: 2006年8月29日
(0051) ********************************************************************************************************/
(0052) void InitQueue(CirQueue * Q)
(0053) {
(0054) //CLI();
(0055) Q->front=Q->rear=0;
_InitQueue:
Q --> R16
08FE 2422 CLR R2
08FF 01F8 MOVW R30,R16
0900 8221 STD Z+1,R2
0901 01F8 MOVW R30,R16
0902 8220 STD Z+0,R2
(0056) Q->count=0;
0903 8222 STD Z+2,R2
(0057) Q->errorcode= QUEUE_OK;
0904 01F8 MOVW R30,R16
0905 8226 STD Z+6,R2
(0058) Q->memo=0;
0906 01F8 MOVW R30,R16
0907 8620 STD Z+8,R2
(0059) Q->status=TWI_DATA_FREE;
0908 01F8 MOVW R30,R16
0909 8227 STD Z+7,R2
090A 9508 RET
_EnQueue:
x --> R22
Q --> R20
090B 940E1921 CALL push_gset2
090D 2F62 MOV R22,R18
090E 01A8 MOVW R20,R16
(0060) //SEI();
(0061) }
(0062) /*********************************************************************************************************
(0063) ** 函数名称:EmptyQueue(CirQueue *Q)
(0064) ** 功能描述:判断队列是否为空
(0065) ** 输 入:
(0066) ** 输 出:
(0067) ** 全局变量:
(0068) ** 调用模块:
(0069) ** 说明:
(0070) ** 注意:
(0071) ** 日 期: 2006年8月29日
(0072) ********************************************************************************************************
(0073) uint8 EmptyQueue(CirQueue * Q)
(0074) {
(0075) return Q->count==0;
(0076) }
(0077) /*********************************************************************************************************
(0078) ** 函数名称:FullQueue(CirQueue *Q)
(0079) ** 功能描述:判断队列是否为满
(0080) ** 输 入:
(0081) ** 输 出:
(0082) ** 全局变量:
(0083) ** 调用模块:
(0084) ** 说明:
(0085) ** 注意:
(0086) ** 日 期: 2006年8月29日
(0087) ********************************************************************************************************
(0088)
(0089) uint8 FullQueue(CirQueue * Q)
(0090) {
(0091) return (Q->count == Q->queuesize);
(0092) }
(0093) /*********************************************************************************************************
(0094) ** 函数名称:EnQueue
(0095) ** 功能描述:入队
(0096) ** 输 入:
(0097) ** 输 出:
(0098) ** 全局变量:
(0099) ** 调用模块:
(0100) ** 说明:
(0101) ** 注意:
(0102) ** 日 期: 2006年8月29日
(0103) ********************************************************************************************************/
(0104) void EnQueue(CirQueue * Q,uint8 x)
(0105) {
(0106) if(FullQueue(Q))
090F 01FA MOVW R30,R20
0910 8025 LDD R2,Z+5
0911 01FA MOVW R30,R20
0912 8032 LDD R3,Z+2
0913 1432 CP R3,R2
0914 F441 BNE 0x091D
(0107) {
(0108) Q->errorcode=QUEUE_OVERFLOW;
0915 E081 LDI R24,1
0916 01FA MOVW R30,R20
0917 8386 STD Z+6,R24
(0109) Q->count=Q->queuesize;
0918 01FA MOVW R30,R20
0919 8025 LDD R2,Z+5
091A 01FA MOVW R30,R20
091B 8222 STD Z+2,R2
(0110) return;
091C C01E RJMP 0x093B
(0111) }
(0112) //CLI();
(0113) Q->count++;
091D 01CA MOVW R24,R20
091E 9602 ADIW R24,2
091F 01FC MOVW R30,R24
0920 8180 LDD R24,Z+0
0921 5F8F SUBI R24,0xFF
0922 8380 STD Z+0,R24
(0114) Q->data[Q->rear]=x;
0923 01FA MOVW R30,R20
0924 8023 LDD R2,Z+3
0925 8034 LDD R3,Z+4
0926 01FA MOVW R30,R20
0927 81E1 LDD R30,Z+1
0928 27FF CLR R31
0929 0DE2 ADD R30,R2
092A 1DF3 ADC R31,R3
092B 8360 STD Z+0,R22
(0115) Q->rear=(Q->rear+1)%Q->queuesize;
092C 01CA MOVW R24,R20
092D 9601 ADIW R24,1
092E 011C MOVW R2,R24
092F 01FA MOVW R30,R20
0930 8115 LDD R17,Z+5
0931 01FC MOVW R30,R24
0932 8100 LDD R16,Z+0
0933 5F0F SUBI R16,0xFF
0934 940E18B7 CALL mod8u
0936 01F1 MOVW R30,R2
0937 8300 STD Z+0,R16
(0116) Q->errorcode=QUEUE_OK;
0938 2422 CLR R2
0939 01FA MOVW R30,R20
093A 8226 STD Z+6,R2
093B 940E190F CALL pop_gset2
093D 9508 RET
_DeQueue:
temp --> R20
Q --> R22
093E 940E1921 CALL push_gset2
0940 01B8 MOVW R22,R16
(0117) //SEI();
(0118) }
(0119) /*********************************************************************************************************
(0120) ** 函数名称:DeQueue
(0121) ** 功能描述:出队
(0122) ** 输 入:
(0123) ** 输 出:
(0124) ** 全局变量:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -