串口接收的数据怎么总是少一位

2020-01-23 14:34发布

单独做个程序就正常,这是怎么回事
while(1)
           {
                  if(RI)                                       //查询---串口接收中断标志位
                  {          

                          delay_ms(1000);        //延时---等待串口接收完成
                          Print_Str(RxBuf);                  
                          RI=0;
                  }

这是main里面的一个循环体,现象是
上位机发送一个abcd,但在while里面单片机向上位机发送bcd还换行。
要是单独做个小程序,在这就不会出错。
这是什么问题呢,都一样的程序
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
tigeroser
1楼-- · 2020-01-25 00:35
dlmaowf 发表于 2014-6-27 15:01
51单片机么?这样写不太对吧

是的 51,上位机发送的数据不带有结束标志信息,也可能带有回车。但长度有限。现在的处理办法是建立一个大点的数组,把数据接收进来,然后判断有用的

dlmaowf
2楼-- · 2020-01-25 02:12
我一般是这样处理的
但我自己约定的协议一般是有起始字节和结束字节
tigeroser
3楼-- · 2020-01-25 05:27
 精彩回答 2  元偷偷看……
tigeroser
4楼-- · 2020-01-25 05:36
tigeroser 发表于 2014-6-27 15:31
void Clear_RxBuf()
{
   unsigned char j=0;

发送大写A
接收十六进制显示是
41 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A
dlmaowf
5楼-- · 2020-01-25 09:43
你写的程序,我有些看不懂
tigeroser
6楼-- · 2020-01-25 12:23
dlmaowf 发表于 2014-6-27 15:39
你写的程序,我有些看不懂

这是程序中的串口片断:
void Clear_RxBuf()
{
   unsigned char j=0;
   RxPoint=0;
   for(  ;j<Rx_N;j++)
   {
       RxBuf[RxPoint++]=0X00;
   }
   RxPoint=0;      //地址归零
}
main()
{
          .......
       while(1)
           {
                  if(RI)                                       //查询---串口接收中断标志位
            {         

                          delay_ms(1000);        //延时---等待串口接收完成
                  Print_Str(RxBuf);   //
                          Clear_RxBuf               
                          RI=0;
                 }
                else;
主程序中等待串口中断,接收到不同的内容执行不同的操作,这里用Print_Str(RxBuf);  代替(因为操作不对)
如果我用个收发标志位,如以*开始,以#结束,就正常,上面的程序会输出6个回车0D0A.不知怎么回事

一周热门 更多>