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条回答
zh3251241
2020-01-25 21:47
//发送串口数据
void SendData(BYTE dat)
{
        while(busy);
        ACC=dat;
       
        busy=1;
        SBUF=ACC;
}

//发送字符串
void SendString(char *s)
{
        while(*s)
        {
                SendData(*s++);
        }
}

//UART中断服务函数
void Uart() interrupt 4 using 1
{
        if(RI)
        {
                RI=0;
               

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

一周热门 更多>