KT404A芯片使用手册_8.参考例程

8. 参考例程

 

/******************************************************************************

 - 实现功能:实现芯片上电分别指定播放第一曲和第二曲,基本的程序供用户测试

 - 日期    :2013-05-06

 - 运行环境:STC   晶振:11.0592M     波特率:9600

 - 备注    :在普中科技的51开发板上调试OK --- STC89C516RD+

         该测试程序必须是芯片或者芯片方案中有设备在线,譬如U盘、TF卡、FLASH

******************************************************************************/

#include "REG52.h"

   

#define COMM_BAUD_RATE  9600    //串口波特率

#define OSC_FREQ        11059200    //运行晶振:11.05926MHZ

static INT8U Send_buf[10] = {0} ;

 

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-(OSC_FREQ/COMM_BAUD_RATE/32/12);//设置为9600波特率

TL1=256-(OSC_FREQ/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;

}

 

/******************************************************************************

 - 功能描述: 串口向外发送命令[包括控制和查询]

 - 参数说明: CMD:表示控制指令,请查阅指令表,还包括查询的相关指令

              feedback:是否需要应答[0:不需要应答,1:需要应答]

              data:传送的参数

******************************************************************************/

void SendCmd(INT8U len)

{

    INT8U i = 0 ;

    Uart_PutByte(0x7E); //起始

    for(i=0; i<len; i++)//数据

    {

Uart_PutByte(Send_buf[i]) ;

    }

    Uart_PutByte(0xEF) ;//结束

}

 

/******************************************************************************

 - 功能描述:求和校验 --- 用户也可以省略此校验,参见5.3.4的说明

 - 和校验的思路如下:      

    发送的指令,去掉起始和结束。将中间的6个字节进行累加,最后取反码接收端就将接收到的一帧数据,去掉起始和结束。将中间的数据累加,再加上接收到的校验字节。刚好为0.这样就代表接收到的数据完全正确。

******************************************************************************/

void DoSum( INT8U *Str, INT8U len)

{

    INT16U xorsum = 0;

    INT8U i;

    for(i=0; i<len; i++)

    {

        xorsum  = xorsum + Str[i];

    }

xorsum     = 0 -xorsum;

*(Str+i)   = (INT8U)(xorsum >>8);

*(Str+i+1) = (INT8U)(xorsum & 0x00ff);

}

 

void Uart_SendCMD(INT8U CMD ,INT8U feedback , INT16U dat)

{

    Send_buf[0] = 0xff;    //保留字节

    Send_buf[1] = 0x06;    //长度

    Send_buf[2] = CMD;     //控制指令

    Send_buf[3] = feedback;//是否需要反馈

    Send_buf[4] = (INT8U)(dat >> 8);//datah

    Send_buf[5] = (INT8U)(dat);     //datal

    DoSum(&Send_buf[0],6);        //校验

    SendCmd(8);       //发送此帧数据

}

 

void main()

{

Serial_init() ;//串口寄存器的初始化设置

    Uart_SendCMD(0x03 , 0 , 0x01) ;//播放第一首

    Delay_Ms(1000) ;//延时大概6S

    Uart_SendCMD(0x03 , 0 , 0x02) ;//播放第二首

    Delay_Ms(1000) ;//延时大概6S

    Uart_SendCMD(0x03 , 0 , 0x04) ;//播放第四首

while(1);

}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值