Flyron Technology Co., Ltd.
www.flyrontech.com
/******************************************************************************
- 功能描述: 串口向外发送命令[包括控制和查询]
- 参数说明: CMD:表示控制指令,请查阅指令表,还包括查询的相关指令
feedback: 是 否 需 要 应 答 [0: 不 需 要 应 答 , 1: 需 要 应 答 ]
dat a: 传 送 的 参 数
******************************************************************************/
void SendCmd(INT8U len)
{
INT8U i = 0 ;
Uart_PutByte(0x7E); //起始
for(i=0; i<len; i++)//数据
{
Uart_PutByte(Send_buf[i]) ;
}
Uart_PutByte(0xEF) ;//结束
}
/******************************************************************************
- 功能描述:求和校验
- 和校验的思路如下:
发送的指令,去掉起始和结束。将中间的 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
17