找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2406|回復: 1
打印 上一主題 下一主題
收起左側

51編寫串口通信協(xié)議 發(fā)送已經(jīng)被成功接收,但是一直無法正確接收數(shù)據(jù)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:94983 發(fā)表于 2015-11-8 15:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
編寫串口通信協(xié)議時,發(fā)送已經(jīng)被成功接收,但是一直無法正確接收數(shù)據(jù),另一塊通信板協(xié)議已經(jīng)是確定OK的,所以肯定是自己編寫的程序出現(xiàn)了問題,請高手幫忙分析一下。接收函數(shù).C

void Uart2() interrupt 8 using 1
{
        unsigned char dat;         //串口二數(shù)據(jù)接收緩存
        EA=0;                                           //禁止中斷,防止數(shù)據(jù)接收出錯。
        if(S2CON&0x01)                                           //發(fā)送和接收共用一個中斷向量,需在程序中判斷
        {
      if(Rece_1==1)
                                {
                                 dat=S2BUF;            //從串口緩沖區(qū)讀取數(shù)據(jù)                                                  
                                 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;         //接收到數(shù)據(jù)標記有效
                        Rece_Wait_1=0;
                        S2_COMERRT=0;
                        }               
      else
                        HaveData_S2_RxD=0;        
}


發(fā)送函數(shù).C

void Uart2_Send(Udat)
{
         In_Send_1=0;
         In_Rece_1=0;
         S2BUF=Udat;                            //將要發(fā)送的數(shù)據(jù)放入串口數(shù)據(jù)緩沖區(qū)
         In_Send_1=1;
         while(!(S2CON&0x02));        //等待發(fā)送完成
   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;
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:95081 發(fā)表于 2015-11-8 18:24 | 只看該作者
其實還好    好好坐下 或很快做出來的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表