标题: 51编写串口通信协议 发送已经被成功接收,但是一直无法正确接收数据 [打印本页]

作者: sqy_astray    时间: 2015-11-8 15:42
标题: 51编写串口通信协议 发送已经被成功接收,但是一直无法正确接收数据
编写串口通信协议时,发送已经被成功接收,但是一直无法正确接收数据,另一块通信板协议已经是确定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;
}


作者: kjay    时间: 2015-11-8 18:24
其实还好    好好坐下 或很快做出来的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1