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串口接收程式应该怎么写,需要考虑些什么东东。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
26条回答
weng645008699
2020-01-28 12:58
  1. void Uartx(void) interrupt 4
  2. {
  3.         unsigned char ReData,SenData;
  4.        
  5.         if(RI == 1)       //RI½ÓÊÜÖжϱêÖ¾
  6.         {
  7.                 RI = 0;                      //Çå³ýRI½ÓÊÜÖжϱêÖ¾
  8.                 ReData = SBUF;  //SUBF½ÓÊÜ/·¢ËÍ»º³åÆ÷
  9.                 SenData=ReData;
  10.                 SBUF=SenData;          //SUBF½ÓÊÜ/·¢ËÍ»º³åÆ÷
  11.                 while(TI==0);
  12.                 TI=0;
  13.         }
  14. }
复制代码

一周热门 更多>