关于串口多字节收发的一个奇怪问题。

[复制链接]
 楼主| yzcook 发表于 2018-5-28 16:23 | 显示全部楼层 |阅读模式
本帖最后由 yzcook 于 2018-5-28 16:34 编辑

想在串口发送4个字节的命令 让单片机运行对应程序,但是在初始化的时候遇到一个奇怪的问题。
使用的芯片是STC12C5A32S2 晶振为18.432
 楼主| yzcook 发表于 2018-5-28 16:25 | 显示全部楼层
这是程序


uchar num = 0;
uchar flag=0;
uchar i;
uchar RBuf[4] = {0x00,0x00,0x00,0x00};

/*------------------主程序--------------------*/
void main(void)
{       
        uchar key = 0;
        ConfigUART();
       
       

        while(1)
        {
                if(num == 4)  flag = 1;
                if(flag == 1)//当接收到数据
                {
                        ES = 0;//关闭串口中断
                        for(i=0;i<4;i++)
                        {
//                                SBUF = RBuf[i];
//                                while(!TI); TI = 0;
         SendByte(RBuf[i]);
                        }                                                       
                        ES = 1;
                        flag = 0;
                        num = 0;
                }
//        cmdRec();
                if((RBuf[0] == 0x1b)&&(RBuf[1] == 0x5b)&&(RBuf[2] == 0x2f)&&(RBuf[3] == 0x31))
                        firstvoice();
                if((RBuf[0] == 0x1b)&&(RBuf[1] == 0x5b)&&(RBuf[2] == 0x2f)&&(RBuf[3] == 0x32))
                        secondvoice();
                if((RBuf[0] == 0x82))
                        lcd_clr();
//                if((RBuf[0] == 0x81))
               
               
               

        }
}




void Uart_Isr() interrupt 4 using 1
{       
        if(RI)
        {       
          RBuf[num] = SBUF;
                while(!RI);
                RI = 0;
                num++;
        }
 楼主| yzcook 发表于 2018-5-28 16:30 | 显示全部楼层
本帖最后由 yzcook 于 2018-5-28 16:36 编辑

用上面的程序在串口实验的时候出现了一个奇怪的现象
在下载程序后的第一次发送数据时会出现这种情况  接收到的第一个数据会出现 E9 但是这个数据并不是我发出去的。
然后第二次发送才接收正常
很奇怪 大神们能否解答一下


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yzcook 发表于 2018-5-28 16:33 | 显示全部楼层
然后我问了别人 别人帮我在程序里面加了个延迟 就能正常接收。

只是在这里加了个1MS的延迟 , 他说可能是芯片BUG 具体也不太清楚。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
chunyang 发表于 2018-5-29 10:43 | 显示全部楼层
这是你编程有误,非芯片bug。加延时只是掩盖了错误,并非正确的解决之道。好好查程序吧。
hcn001 发表于 2018-5-29 16:22 | 显示全部楼层
发送数据之前先把TI=0给清除下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

84

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部