找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2217|回复: 1
收起左侧

51编写串口通信协议 发送已经被成功接收,但是一直无法正确接收数据

[复制链接]
ID:94983 发表于 2015-11-8 15:42 | 显示全部楼层 |阅读模式
编写串口通信协议时,发送已经被成功接收,但是一直无法正确接收数据,另一块通信板协议已经是确定OK的,所以肯定是自己编写的程序出现了问题,请高手帮忙分析一下。接收函数.C

void Uart2() interrupt 8 using 1
{
        unsigned char dat;         //串口二数据接收缓存
        EA=0;                                           //禁止中断,防止数据接收出错。
        if(S2CON&0x01)                                           //发送和接收共用一个中断向量,需在程序中判断
        {
      if(Rece_1==1)
                                {
                                 dat=S2BUF;            //从串口缓冲区读取数据                                                  
                                 Rece_Buf_1[Rece_Cnt_1]=dat;         
                                 Rece_Cnt_1++;
                                 In_Send_1=0;               
                                        if(Rece_Cnt_1>=Rece_Len1)
                                        {
                                                CheckSum();
                                                if(HaveData_S2_RxD==1)
                                                {
                                                        DataProcess_R2();
                                                }
                                        }
                                }                        
               
                        else if(S2BUF==DEVICENO1)
                                {
                                        Rece_1=1;
                                        Rece_Buf_1[0]=DEVICENO1;
                                        Rece_Cnt_1=1;
                                }
                        else
                        Rece_Cnt_1=0;
//                S2CON&=~S2RI;                                   //串口接收中断标记需软件清零
    S2CON=S2CON & 0xfe;                //串口接收中断标记需软件清零
        }
        EA=1;                                           //使能中断
}

void CheckSum()
{
        int i;
  unsigned char CheckSum=0;
                 for (i=0;i<=Rece_Len1-2;i++)
      {
                                CheckSum=CheckSum+Rece_Buf_1;
                  }
                                                
      if(CheckSum==Rece_Buf_1[Rece_Len1-1])
                        {        
                  HaveData_S2_RxD=1;         //接收到数据标记有效
                        Rece_Wait_1=0;
                        S2_COMERRT=0;
                        }               
      else
                        HaveData_S2_RxD=0;        
}


发送函数.C

void Uart2_Send(Udat)
{
         In_Send_1=0;
         In_Rece_1=0;
         S2BUF=Udat;                            //将要发送的数据放入串口数据缓冲区
         In_Send_1=1;
         while(!(S2CON&0x02));        //等待发送完成
   S2CON&=~S2TI;        //清零S2TI         
}

void Uart2_SendString()
{
         int i,j;
         unsigned char CheckSum=0;
         Rece_1=0;
         Send_Buf_1[0]=DEVICENO2;
         Send_Buf_1[1]=(Request_rpm+1000)%256;
         Send_Buf_1[2]=(Request_rpm+1000)/256;                                         
         Send_Buf_1[3]=85;
         Send_Buf_1[4]=85;
         for(j=0;j<=Send_Len1-2;j++)
         {
                 CheckSum=CheckSum+Send_Buf_1[j];
         }
         Send_Buf_1[Send_Len1-1]=CheckSum;
         for(i=0;i<Send_Len1;i++)
         {
         Uart2_Send(Send_Buf_1);
         }
         In_Rece_1=0;
}

回复

使用道具 举报

ID:95081 发表于 2015-11-8 18:24 | 显示全部楼层
其实还好    好好坐下 或很快做出来的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表