| 程序部分 由于我们产品的保密性,所以我们产品内部的程序细节,不方便暴露,这里就以官方的例程进行说明,其实移植还是非常简单的额
#include "STK6037.h"
//运行晶振:11.05926MHZ
#define TIMER0_H   (65536-1800)/256//定时2Ms
#define TIMER0_L   (65536-1800)%256
#define SYS_Fosc        11059200  //晶振频率                           
#define COMM_BAUD_RATE  9600      //串口波特率
#define OSC_FREQ        11059200  //11059200  
static INT8U Send_buf[10] = {0} ;
static INT8U Recv_buf[10] = {0} ;
static INT8U SendDataLen = 0 ;
static INT8U ResendDataLen = 0 ;
/******************************串口1的波特率********************************/
//T1作波特率发生器
//在波特率加倍情况下 
#define BAUD_57600                            256 - (OSC_FREQ/192L)/57600L    // 254 FF
#define BAUD_28800                            256 - (OSC_FREQ/192L)/28800L    // 254 FE
#define BAUD_19200                            256 - (OSC_FREQ/192L)/19200L    // 253 FD
#define BAUD_14400                            256 - (OSC_FREQ/192L)/14400L    // 252 FC
#define BAUD_9600                             256 - (OSC_FREQ/192L)/9600L     // 250 FA
/*****************************************************************************************************
 - 功能描述:10us的延时函数
 - 隶属模块:常用函数库(内部)
 - 参数说明:无
 - 返回参数:无
 - 注: 在这里的运行环境是51,晶振为12MHZ                
*****************************************************************************************************/
void Delay_Us(INT32U z)
{
        while(z--);
}
/***********************毫秒级别延时************************/
void Delay_Ms(INT32U z)
{
        INT32U x=0 , y=0;
        for(x=110 ; x>0 ;x--)
        for(y=z; y>0;y-- );
}
/*****************************************************************************************************
 - 功能描述: 串口1初始化
 - 隶属模块: 外部
 - 参数说明: 无
 - 返回说明: 无
 - 注:              都是9600波特率
*****************************************************************************************************/
void Serial_init(void)
{
        TMOD = 0x20;                // 设置 T1 为波特率发生器
        SCON = 0x50;                // 0101,0000 8位数据位, 无奇偶校验
                                                   
        PCON = 0x00;                //PCON=0;
        TH1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);//设置为9600波特率
        TL1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);
    TR1     = 1;                            //定时器1打开
    REN     = 1;                           //串口1接收使能
    ES      = 1;                           //串口1中断使能
}
/********************************************************************************************
 - 功能描述: 串口发送一个字节
 - 隶属模块: 外部
 - 参数说明:
 - 返回说明:
 - 注:              
********************************************************************************************/
void Uart_PutByte(INT8U ch)
{
    SBUF  = ch;
    while(!TI){;}
    TI = 0;
}
/*****************************************************************************************************
 - 功能描述: 串口发送一帧数据
 - 隶属模块: 内部 
 - 参数说明: 
 - 返回说明: 
 - 注:无     
*****************************************************************************************************/
void SendCmd(INT8U len)
{
    INT8U i = 0 ;
    Uart_PutByte(0x7E); //起始
    for(i=0; i<len; i++)//数据
    {
                Uart_PutByte(Send_buf[i]) ;
    }
    Uart_PutByte(0xEF) ;//结束
}
/********************************************************************************************
 - 功能描述: 串口向外发送命令[包括控制和查询]
 - 隶属模块: 外部
 - 参数说明: CMD:表示控制指令,请查阅指令表,还包括查询的相关指令
              feedback:是否需要应答[0:不需要应答,1:需要应答]
              data:传送的参数
 - 返回说明:
 - 注:
********************************************************************************************/
#define  WORD_HIGH(x)         ((u8)((u16)(x)>>8))
#define  WORD_LOW(x)          ((u8)((u16)(x)))
void Uart_SendCMD(u8 CMD ,u16 len , u16 dat)
{
    g_user.Send_buf[0] = CMD;
    g_user.Send_buf[1] = WORD_HIGH(len);
    g_user.Send_buf[2] = WORD_LOW(len);
    g_user.Send_buf[3] = WORD_HIGH(dat);
    g_user.Send_buf[4] = WORD_LOW(dat);
    SendCmd(5,1);                //发送此帧数据
}
void Uart_SendDat(u8 CMD , u8 *pbf ,u8 len)
{
    static u8 i = 0 ;
    g_user.Send_buf[0] = CMD ;         //保留字节
    g_user.Send_buf[1] = WORD_HIGH(len);
    g_user.Send_buf[2] = WORD_LOW(len);
    for(i=0 ; i<len ; i++)
    {
        g_user.Send_buf[3+i] = *(pbf+i) ;
    }
    SendCmd(len+3 , 1 );  //发送此帧数据
}
u8 testbuf[6] = {01,01,02,02,03,03} ;
u8 testlen = 6 ;
void main()
{ 
        Delay_Us(1) ;
        Delay_Ms(1) ;
        Serial_init() ;
    Delay_Ms(1000) ;//延时大概6S
    
    Uart_SendCMD(0x03 , 2 , 0x01) ;//播放第一首
    
    Delay_Ms(1000) ;//延时大概6S
    
    Uart_SendCMD(0x03 , 2 , 0x02) ;//播放第二首
    Delay_Ms(1000) ;//延时大概6S
    Uart_SendCMD(0x03 , 2 , 0x04) ;//播放第四首
    
     Delay_Ms(1000) ;//延时大概6S
    Uart_SendCMD(0x21 , testbuf , testlen) ;//组合播放文件夹01里面的001 ,文件夹02里面的002 ,文件夹03里面的003 ,
    while(1) ;
}
 |