標題: 單片機多機通信程序 主機為什么統(tǒng)計有時不準? [打印本頁]

作者: liduofu    時間: 2022-4-22 22:54
標題: 單片機多機通信程序 主機為什么統(tǒng)計有時不準?
請哪位大師幫忙看一下錯在哪里?謝謝!
主機發(fā)送從機號,從機收到+1,
extern uchar  Slave_PCS=-1;//從機計數(shù)初值 ,為0時第一次會少數(shù)

void ZOHJI_NUM()   //============================發(fā)從機代碼=0-255==========
{
static uchar  TX_ZHONGJI_COUT=0;//發(fā)送從機的編碼
        uchar  SLAVE_COUT=0;//從機從計數(shù)//
          //===接收到的數(shù)據(jù)等于發(fā)射的數(shù)據(jù)
      if(ZHONGJI_Dat==TX_ZHONGJI_COUT)
     {
           ERR_SALVE_TIM=0;  //沒收到開始計時   
           TX_ZHONGJI_COUT++; //發(fā)送從機號,0-255XTD!
           SLAVE_COUT++;  //從機返回來編號0-255XDNX!收到也開始計數(shù)
     Slave_PCS++;    //開始統(tǒng)計從機數(shù)量
     }
     
   if(ZHONGJI_Dat!=TX_ZHONGJI_COUT)
     
      {
     
        TX_ZHONGJI_COUT;  //發(fā)從機號出去,從機沒有收到,重發(fā)不變的代碼TX_ZHONGJI_COUT
        SLAVE_COUT;     //從機沒有收到,重發(fā)不計數(shù)
   
        ERR_SALVE_TIM++;  //從機未收到超時計時
     
      }
    if(ERR_SALVE_TIM==4)
        {      
         TX_ZHONGJI_COUT++;  //發(fā)從機號出去,3次從機沒有到,發(fā)下一個從機代碼
      SLAVE_COUT++;         //統(tǒng)計從機數(shù)量加一次。保持跟發(fā)送的代碼同步
        }
        
     if(ERR_SALVE_TIM==7)   //如果3次從機也沒有收到就結束
        {
         ERR_SALVE_TIM=0;      
         TX_ZHONGJI_COUT=1;  //如果還沒有從機返回來重新開始,表一輪結束//從1開始發(fā)
     
       SLAVE_COUT=0; //從機計數(shù)清0
                  ZHONGJI_PCS_A=Slave_PCS;//把計數(shù)發(fā)送到遙控器上顯示
                  Slave_PCS=0; //從機總計數(shù)清0   
   
        }
   
   TX_ZHONGJI_NUM[0]=TX_ZHONGJI_COUT/100+0x30;
      TX_ZHONGJI_NUM[1]=TX_ZHONGJI_COUT%100/10+0x30;
   TX_ZHONGJI_NUM[2]=TX_ZHONGJI_COUT%100%10+0x30;
   TX_ZHONGJI_NUM[3]='X';
      TX_ZHONGJI_NUM[4]='T';
   TX_ZHONGJI_NUM[5]='D';
   TX_ZHONGJI_NUM[6]='!';   
     
SendString(TX_ZHONGJI_NUM);//發(fā)代碼1-255個數(shù)   
     
  memset(S_tab,0,sizeof(S_tab));  
   
}

作者: 快樂眼淚    時間: 2022-11-15 20:52
樓主找到原因了嗎?
作者: Hephaestus    時間: 2022-11-16 14:40
先把主機和從機的問題區(qū)分開來,先用PC端串口助手自動發(fā)送功能模擬主機,看看從機響應如何。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1