打印

串口多机通信,从机接收数据问题,求大神指教

[复制链接]
290|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
河童|  楼主 | 2019-11-1 17:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
rcv_buf[uart1_rx_count++] = SBUF;           //将接收数据保存 上面是在串口接收中断里的,下面是在主函数里。        

        if((uart1_rx_count>=(Date_length-1)))    //判断接收的数据是否达到长度
                {
                   while(rcv_buf!=addr)                   //寻找地址位
                           {
                                            i++; //send_UART_one(0);
                                         if(i>=(Date_length-1))           //数据超过长度,重新计数
                                         {
                                           i=0;uart1_rx_count=0;         //接收数据从头开始接收
                                         }
                           }                     
                        if((i==0)&&(rcv_buf[4]==1))
                         {                                        send_UART_one(rcv_buf[0]);
                                  for(ck=1;ck<Date_length-2;ck++)                  //校验和计算
                                 {
                                          check_sum = check_sum + rcv_buf[ck];        //将地址位和数据相加,得到第四个数据                                                                  
                                 }
                                 send_UART_one(check_sum);
                                 send_UART_one(rcv_buf[1]);
                                 send_UART_one(rcv_buf[2]);
                                 if((check_sum == rcv_buf[Date_length-2]))                //判断校验和
                                 {        
                                    send_UART_one(rcv_buf[0]);
                                    send_UART_one(rcv_buf[1]);
                                
                                        uart1_rx_count=0;      //为下一次中断做准备
                                    check_sum=0;                            //校验和清零,准备下一次校验

                                if(rcv_buf[1]==0x01)
                                                {        
                                                    PWM_Var = rcv_buf[2];
                                                           send_UART_one(_OK_);          //从机校验成功,反馈给主机0xff命令,回复应答
                                                           CCAP0H = CCAP0L = PWM_Var;
                                                }


                                 }
                                 else
                                 {
                                 uart1_rx_count=0;check_sum=0;      //校验和不正确,可能发生帧错误,重新开始
                                 }
                         }

                   }

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

452

主题

452

帖子

0

粉丝