找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2985|回复: 3
收起左侧

编的时候static INT8U Send_buf[10]={0};总是出错

[复制链接]
ID:235168 发表于 2017-9-23 20:51 | 显示全部楼层 |阅读模式
#include <reg52.h>

#define COMM_BAUD_RATE  9600    //串口波特率
#define OSC_FREQ       11059200    //运行晶振:11.05926MH
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);//结束
}

/******************************************************************************
- 功能描述:求和校验
- 和校验的思路如下:      
    发送的指令,去掉起始和结束。将中间的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) ;
}


编的时候static INT8U Send_buf[10]={0};总是出错,

错误提示C6: error C129: missing  `;` before `send_buf `

回复

使用道具 举报

ID:213173 发表于 2017-9-24 07:58 | 显示全部楼层
没有声明自定义数据类型:INT8、INT16、INT32。
回复

使用道具 举报

ID:283448 发表于 2018-2-12 22:43 | 显示全部楼层
楼主,你是用单片机控制DFplayer MINI模块吗,我现在碰到了一些问题,不知道单片机怎么与它通信,发送指令也无反应,你能给下你改后的程序吗?
回复

使用道具 举报

ID:283448 发表于 2018-2-12 22:49 | 显示全部楼层
楼主,请问你是用单片机控制的DFplayer mini模块吗?我现在用单片机串口发送指令,它完全没反应,能给一份你改好的程序吗?感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表