51串口问题求助

2020-01-25 15:38发布

程序大部分已经ok了。单片机发送abcd,pc接收到abcd。没问题。
一句话发送没问题,但是接收好像有点问题。
接收一个字符ok,多个字符就不对了,有时候只接收到第一个字符,有时候是其他字符,有时候是乱码。
--------------------------------------------------------------------------------------------------------
说下我的思路,pc发送字符给单片机,然后单片机直接回传值给pc。比方说pc发送a给单片机,那么此时单片机就把收到的a发给pc。
如果发送一个字符,ok。
此时pc发送abcd,就出错了。pc接收到的不是abcd,有可能是a,有可能是其他东西,但是可以肯定pc接收到的也是4个字符,这种问题原因是什么?
以下是中断函数
void usarthandle() interrupt 4
{
              if(RI)
              {   
                            RI =0;
           P1 =SBUF;
            SendOneByte(P1);//接收到什么,直接发送回去

                     }
            if(TI)
            {
                        TI =0;
                        ucBusy =0;
            }

}
个人觉得应该是51单片机接收程式这边写的有问题,否则只可以接收到pc发过来的第一个字符,后面几个字符却乱码了。而且51单片机发送一串字符给pc,pc也接收正确,所以应该是单片机接收pc时出现了错误,求大神点拨点拨。到底51串口接收程式应该怎么写,需要考虑些什么东东。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
25条回答
ypm
1楼-- · 2020-01-26 11:57
dlmaowf 发表于 2013-11-19 09:14
开一个数组,先把接收的数据都存起来,然后再发送出去

这种方法有想到过,可是想想其实会有新的问题。若定义数组长度5,pc传7个字符,51单片机回传7个会比较麻烦。第一数组满5个,我们做个触发条件,回传给pc,剩下的2个怎么办,所以又得加触发条件,目前觉得timeout的时间可以加,但是这样做是不是显得稍微复杂了一点。
hgjdwjz699
2楼-- · 2020-01-26 16:04
发送前,有1至2字节的缓存应该就行
tragedy
3楼-- · 2020-01-26 16:22
是这个问题吧 SendOneByte(P1);
lusson
4楼-- · 2020-01-26 16:32
P1...........
lusson
5楼-- · 2020-01-26 21:25
 精彩回答 2  元偷偷看……
ypm
6楼-- · 2020-01-26 23:03
zh3251241 发表于 2013-11-19 09:34
在上位机用串口调试助手发送一个字符X,单片机收到字符后返回给上位机“I get X”,波特率9600 8 n 1

仿真了下不行,等晚上回去用单片机再确定下看看

一周热门 更多>