打印

单片机串口通信字符串问题

[复制链接]
1266|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cellagent|  楼主 | 2013-12-13 11:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
stc单片机,程序主要部分注释如下
BYTE configstr[] = {0x23,0xFE,0x33,0x44,0xFF,0x02,0x03,0x01,0x04,0x01,0x01,0x02,0x05,0x0F,0x02,0x01};
while(1)
        {
        while(!UARTSeflag);//等待接收字符串数据完成
        if(recvs[0] == 0x23 && recvs[1] == 0xA0)//如果接收的字符串数据是0x23 0xA0
                {
                SendString(configstr); //
                UARTCount = 0;
                memset(recvs,0,NUMBERS);//清除缓存数组
                }
        }



如上图所示,我发送23 A0,串口助手除了接收到configstr外还有几个多余的字节,这是为什么呢?我的理解是数据存储在一段连续的内存,发送的时候把后面的内容也发送了。那应该怎样定义缓存数组?也有可能是字符串通信函数有问题。请各位指点一下!

相关帖子

沙发
ayb_ice| | 2013-12-13 11:46 | 只看该作者
这个完全取决于SendString函数了

使用特权

评论回复
板凳
cellagent|  楼主 | 2013-12-13 12:05 | 只看该作者
ayb_ice 发表于 2013-12-13 11:46
这个完全取决于SendString函数了

void SendString(BYTE * p)
{
ES = 0;//关闭串口中断
while(*p)
        {
        SBUF = *p;
        p++;
        while(!TI);
        TI = 0;
        }
ES = 1;//打开串口中断
}

使用特权

评论回复
地板
ayb_ice| | 2013-12-13 13:54 | 只看该作者
cellagent 发表于 2013-12-13 12:05
void SendString(BYTE * p)
{
ES = 0;//关闭串口中断

你的字符串没有结束符,先搞清楚什么叫字符串吧

使用特权

评论回复
5
cellagent|  楼主 | 2013-12-13 13:55 | 只看该作者
BYTE configstr[] = {0x23,0xFE,0x33,0x44,0xFF,0x02,0x03,0x01,0x04,0x01,0x01,0x02,0x05,0x0F,0x02,0x01,0x00};主动加个0x00作为结尾,好像就可以了。

使用特权

评论回复
6
ayb_ice| | 2013-12-13 14:34 | 只看该作者
cellagent 发表于 2013-12-13 13:55
BYTE configstr[] = {0x23,0xFE,0x33,0x44,0xFF,0x02,0x03,0x01,0x04,0x01,0x01,0x02,0x05,0x0F,0x02,0x01, ...

对了当然就可以了

使用特权

评论回复
7
puppet21| | 2013-12-13 17:02 | 只看该作者
明显是指针越界的问题,另外,SendString()这样写的话,你永远没办法发送0x00这个数据,因为她遇到0x00,马上退出的循环。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

171

帖子

3

粉丝