单片机如何接收上位机传来的字符串?

2020-01-23 14:31发布

问题是:如何完整的接收上位机发送过来的字符串(如:abcdef),而不是单字符,上位机如果发送字符串是不是连续不停的发送?即使我们在取SBUF寄存器的数据,但在这时上位机还在不停的发送后一个字节的数据。求高手过招..给个整个理解过程,有代码就更为好了!小弟在此谢过了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
34条回答
i55x
1楼-- · 2020-01-26 17:49
 精彩回答 2  元偷偷看……
lu976046395
2楼-- · 2020-01-26 19:46
一般用什么样的协议来保证传送数据的准确性
lu976046395
3楼-- · 2020-01-26 21:17
laujc 发表于 2013-2-26 23:11
字符是一个bit一个bit发来的,接收时,接收8bit就收到一个字节的内容,会放到缓存中.
缓存大小有不同,有的单片 ...

那么如何来确保我发送到数据的准确性,确保数据并没有丢失!
13hoop
4楼-- · 2020-01-27 01:31
本帖最后由 13hoop 于 2013-4-30 15:47 编辑

大家都说到了
单片机收到数据进入中断  中断中清buf
取出char
在接收第二个
如此反复....

还有如果上位机是自己的  注意波特率
不光要和下位机一致

还要注意到windows设备管理器中查看  你的串口的波特率
有时候只在软件中设置不行  
最好能保证所有波特率一致
SunnyTrip
5楼-- · 2020-01-27 02:33
void UART_Interrupt (void) interrupt 4
{
        uchar i,l;
        uint n;
        if (RI==1)
        {
                i=0;
                l=0;
                while((RI==1)&&(l==0))
                {
                        RI=0;
                        UART_rcv_buf[i] = SBUF;
                        i++;
                        n=0;
                        if(i >= 4) {l=1;}            
                        while((RI==0)&&(l==0))                                                                  //判断是否超时
                        {
                                if(n>10000){l=1;}
                                n++;
                    }             
            }
        }
        TI = 0;
        RI = 0;
        if((UART_rcv_buf[0]==0xA0)&&(UART_rcv_buf[3]==0xFF))
        {                  
           UART_r_process();                  
        }
}
BigWolf
6楼-- · 2020-01-27 05:23
 精彩回答 2  元偷偷看……

一周热门 更多>