MSP 430f5438A 接收数据包的问题

2019-03-24 08:53发布

本人初学430.接收数据包,老是接收到最后一个,前面的被覆盖掉了吗???收到的数据用串口助手显示是EF 01 FF FF FF FF 07 00 03 00 00 0A,但是从缓存器里取出来的只有一位0A,难道是我程序错了,还是缓存器里的值不能用循环来取,在线急等
do /////////////////////////////do的内容////////////////////////////////
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
MLL123
1楼-- · 2019-03-24 16:36
是串口异步通讯
huaiqiao
2楼-- · 2019-03-24 19:31
< :TI_MSP430_内容页_SA7 --> 你可以这样,把接收的数据存在一个buff数组中,debug模式下,单步调结合你的程序看看具体其他数据在执行什么语句之后不见了。
lcccx12
3楼-- · 2019-03-25 01:08
 精彩回答 2  元偷偷看……
MLL123
4楼-- · 2019-03-25 06:35
lcccx12 发表于 2016-9-15 23:54
贴程序出来,不然没法知道你什么问题

                do /////////////////////////////do的内容////////////////////////////////
                 {       
                          restart0:                               
                         if (UCA0IFG==1)//如果接收到数据
                              {                                
                           tmpdat=UCA0RXBUF;//先把接收到的数据放到tmpdat中
                               UCA0IFG=0;
                               if ((tmpdat==0xef)&&(start==FALSE))//这个数据为第一个传回来的数据,也就是“指令应答”的第一个字节
                                    {
                                          count=0;
                                          FIFO[0]=tmpdat;//读入第一个应答字节(0XEF),存在第“0”个元素中   
                                          flag=1;       
                                             goto
                                                restart0;//可以用中断方式进行                       
                                          
                                      }
                          if(flag==1)//第一个字节已经回来,所以flag==1成立
                                 {  
                                          if(tmpdat!=0x01)  //接收数据错误,将重新从缓冲区接收数据
                                          {         
                                              flag=0;//接收应答失败
                                              result=FALSE;
                                              start =FALSE;
                                              stop=FALSE;
                                              count=0;
                                                  goto
                                                      restart0;                                       
                                           }
                                              //如果成功接收到0xef01,可以开始接收数据
                                              flag=2;//flag=2;表示应答成功,可以开始接收数据了
                                              count++;//现在count=1;
                                              FIFO[count]=tmpdat;//读入第二个应答字节(0X01),存在第“1”个元素中   
                                              start=TURE;        //应答成功可以开始接收数据
                                                  goto
                                                      restart0;       
                                 }                  
                             if((flag==2)&&(start==TURE))//flag=2;表示应答成功,可以开始接收数据了
                                     {                                                              
                                           count++; //数据元素下标++
                                           FIFO[count]=tmpdat;//存入数据
                                                if(count>=6)
                                                  {
                                                      checksum=FIFO[count]+checksum; //计算校验和
                                                   }
                                                if(count==8)
                                                  {
                                                      package=FIFO[7]*0X100+FIFO[8];        //计算包长度                                                       
                                                      stop= TURE;
                                                   }
                                                if(stop)
                                                    {                                               
                                                      if(count==package+8)
                                                         {
                                                            checksum=checksum-FIFO[count-1];
                                                            if(checksum!=FIFO[count]&0xff)
                                                                    result=FALSE; //校验失败,置结果标志为0                                                       
                                                            else
                                                                    result=TURE;
                                                            flag=0;
                                                            break;
                                                         }
                                                    }
                                     }
                                }
          }/////////////////////////////do的内容----------------结束////////////////////////////////          
        while ((clk0<=MaxTime)&&(count<=MAX_NUMBER)&&(changeflag==0)); //由定时器以及最大接收数据来控制,保证不会在此一直循环                  
        FifoNumber=count;        //保存接收到的数据个数
MLL123
5楼-- · 2019-03-25 07:59
huaiqiao 发表于 2016-9-13 23:31
你可以这样,把接收的数据存在一个buff数组中,debug模式下,单步调结合你的程序看看具体其他数据在执行什 ...

                do /////////////////////////////do的内容////////////////////////////////
                 {       
                          restart0:                               
                         if (UCA0IFG==1)//如果接收到数据
                              {                                
                           tmpdat=UCA0RXBUF;//先把接收到的数据放到tmpdat中
                               UCA0IFG=0;
                               if ((tmpdat==0xef)&&(start==FALSE))//这个数据为第一个传回来的数据,也就是“指令应答”的第一个字节
                                    {
                                          count=0;
                                          FIFO[0]=tmpdat;//读入第一个应答字节(0XEF),存在第“0”个元素中   
                                          flag=1;       
                                             goto
                                                restart0;//可以用中断方式进行                       
                                          
                                      }
                          if(flag==1)//第一个字节已经回来,所以flag==1成立
                                 {  
                                          if(tmpdat!=0x01)  //接收数据错误,将重新从缓冲区接收数据
                                          {         
                                              flag=0;//接收应答失败
                                              result=FALSE;
                                              start =FALSE;
                                              stop=FALSE;
                                              count=0;
                                                  goto
                                                      restart0;                                       
                                           }
                                              //如果成功接收到0xef01,可以开始接收数据
                                              flag=2;//flag=2;表示应答成功,可以开始接收数据了
                                              count++;//现在count=1;
                                              FIFO[count]=tmpdat;//读入第二个应答字节(0X01),存在第“1”个元素中   
                                              start=TURE;        //应答成功可以开始接收数据
                                                  goto
                                                      restart0;       
                                 }                  
                             if((flag==2)&&(start==TURE))//flag=2;表示应答成功,可以开始接收数据了
                                     {                                                              
                                           count++; //数据元素下标++
                                           FIFO[count]=tmpdat;//存入数据
                                                if(count>=6)
                                                  {
                                                      checksum=FIFO[count]+checksum; //计算校验和
                                                   }
                                                if(count==8)
                                                  {
                                                      package=FIFO[7]*0X100+FIFO[8];        //计算包长度                                                       
                                                      stop= TURE;
                                                   }
                                                if(stop)
                                                    {                                               
                                                      if(count==package+8)
                                                         {
                                                            checksum=checksum-FIFO[count-1];
                                                            if(checksum!=FIFO[count]&0xff)
                                                                    result=FALSE; //校验失败,置结果标志为0                                                       
                                                            else
                                                                    result=TURE;
                                                            flag=0;
                                                            break;
                                                         }
                                                    }
                                     }
                                }
          }/////////////////////////////do的内容----------------结束////////////////////////////////          
        while ((clk0<=MaxTime)&&(count<=MAX_NUMBER)&&(changeflag==0)); //由定时器以及最大接收数据来控制,保证不会在此一直循环                  
        FifoNumber=count;        //保存接收到的数据个数
xiaoliping1945
6楼-- · 2019-03-25 09:23
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章