rfserver.lst

来自「MCS51的实现无线接收发送(315M或433M)源程序代码。」· LST 代码 · 共 1,348 行 · 第 1/5 页

LST
1,348
字号
 261   3                      #endif
 262   3                         PostToUartSendQ(0);
 263   3                              
 264   3                      RfSendDataLen=0;
 265   3                         RfSendDataBuf[RfSendDataLen++]=FLAG1;
 266   3                         MovXX(RfSendDataBuf+RfSendDataLen,RfRecvDataBuf+1+IDSERIALLEN,IDSERIALLEN);
 267   3                         RfSendDataLen+=IDSERIALLEN;
 268   3                         MovCX(RfSendDataBuf+RfSendDataLen,(INT8UC *)ADDR_ID_SERIAL,IDSERIALLEN);
 269   3                         RfSendDataLen+=IDSERIALLEN;
 270   3               RfSendDataBuf[RfSendDataLen++]=0XC0;
 271   3                         RfSendDataBuf[RfSendDataLen++]=GetChkSum(RfSendDataBuf+1,RfSendDataLen-1);
 272   3                         RfSendDataBuf[RfSendDataLen++]=FLAG2;
 273   3                         #if DEBUG_RFSERVER
 274   3                      MDebugExMemHex(RfSendDataBuf,RfSendDataLen);
 275   3                      #endif
 276   3                           
 277   3                      //StartTmr(RFSERVERTMRID,2);
 278   3              }
 279   2               }
 280   1         else if(Identity==HOST)
 281   1                  {
 282   2                   if(CmpXCString(RfRecvDataBuf+1,(INT8UC *)ADDR_ID_SERIAL,IDSERIALLEN)!=STR_EQUAL)
 283   2                     {
 284   3                         #if DEBUG_RFSERVER
 285   3                      MDebugStrLF((INT8UC *)"不是我的ID");
 286   3                      #endif
 287   3                      return;
 288   3                     }
 289   2                   for(i=0;i<AmuNum;i++)
 290   2                     {
 291   3                      if(CmpString(RfRecvDataBuf+1+IDSERIALLEN,AmuData[i],IDSERIALLEN)==STR_EQUAL) break;
 292   3                     }
 293   2                   if(i==AmuNum)
 294   2                     {
 295   3                         #if DEBUG_RFSERVER
 296   3                      MDebugStrLF((INT8UC *)"不是我的成员");
 297   3                      #endif
 298   3                      return;
 299   3                     }  
 300   2                   #if DEBUG_RFSERVER
 301   2                   //MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
 302   2                   #endif
 303   2                   
 304   2            Data=(INT8U *)(RfRecvDataBuf+1+IDSERIALLEN+IDSERIALLEN);
 305   2            switch(*Data)
 306   2              {
 307   3                      case 0x81:
 308   3                    if(*(Data+1)==0x40)
 309   3                      {
 310   4                         #if DEBUG_RFSERVER
 311   4                              MDebugStrLF((INT8UC *)"报警触发应答");
 312   4                              #endif
 313   4                              AmuData[i][4]=1;
 314   4                      }
 315   3                    else
 316   3                      {
 317   4                         #if DEBUG_RFSERVER
 318   4                              MDebugStrLF((INT8UC *)"查询状况应答");
 319   4                              #endif
 320   4                              AmuData[i][4]=0;
 321   4                      }
 322   3                      #if DEBUG_RFSERVER
 323   3                           //MDebugExMemHex((INT8UX *)AmuData,AmuNum*5);
 324   3                           #endif
 325   3                           break;
 326   3                           
 327   3                      case 0xc0:
 328   3                      #if DEBUG_RFSERVER
 329   3                           MDebugStrLF((INT8UC *)"收到SOSS报警应答");
 330   3                           #endif
 331   3      
 332   3                           break;
 333   3              }
 334   2               }       
 335   1      }
 336          //=========================================================
 337          void HdlRfData(void)
 338          {
 339   1                INT8U Temp;
 340   1                
 341   1                #if DEBUG_RFSERVER
 342   1                //MDebugStrLF((INT8UC *)"HdlRfData()");
 343   1                //MDebugExMemHex(Int0RecvBuf,Int0WrIndex);
 344   1                //Int0RdIndex=Int0WrIndex=0;
 345   1                #endif
 346   1      
 347   1         RfRecvDataLen=0;
 348   1         while(Int0RdIndex!=Int0WrIndex)
 349   1           {
 350   2              RfRecvDataBuf[RfRecvDataLen++]=Int0RecvBuf[Int0RdIndex];
 351   2              if(++Int0RdIndex>=INT0RECVBUFSIZE) Int0RdIndex=0;
 352   2           }
 353   1                #if DEBUG_RFSERVER
 354   1                //MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
 355   1                #endif
 356   1                
 357   1                if((RfRecvDataBuf[0]!=FLAG1)||(RfRecvDataBuf[RfRecvDataLen-1]!=FLAG2))
 358   1                  {
 359   2                   #if DEBUG_RFSERVER
 360   2                   //MDebugStrLF((INT8UC *)"帧出错");
 361   2                   //MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
 362   2                   #endif
 363   2                   return;
 364   2                  }
 365   1                Temp=GetChkSum(RfRecvDataBuf+1,RfRecvDataLen-3);
 366   1                if(RfRecvDataBuf[RfRecvDataLen-2]!=Temp)
 367   1                  {
 368   2                      #if DEBUG_RFSERVER
 369   2                   //MDebugStrLF((INT8UC *)"校验和出错");
 370   2                   //MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
 371   2                   #endif
 372   2                   return;
 373   2                  }
 374   1                HdlRfFrame();
 375   1      }
 376          //=========================================================
 377          void HdlUartData(void)
 378          {
 379   1                INT8U i,j,Temp;
 380   1                
 381   1                #if DEBUG_RFSERVER
 382   1                //MDebugStrLF((INT8UC *)"HdlUartData()");
 383   1                //MDebugExMemHex(UartRecvBuf,UartWrIndex);
 384   1                #endif
 385   1                
 386   1                Temp=RdRom(ADDR_IDENTITY);
 387   1                if(Temp==HOST)
 388   1                  {
 389   2            if(UartRecvBuf[0]!=0x7f)
 390   2              {
 391   3                      #if DEBUG_RFSERVER
 392   3                      MDebugStrLF((INT8UC *)"帧出错");
 393   3                      MDebugExMemHex(UartRecvBuf,UartWrIndex);
 394   3                      #endif
 395   3                 return;
 396   3              }
 397   2            if(UartRecvBuf[1]!=UartWrIndex-2)
 398   2              {
 399   3                      #if DEBUG_RFSERVER
 400   3                      MDebugStrLF((INT8UC *)"长度出错");
 401   3                      MDebugExMemHex(UartRecvBuf,UartWrIndex);
 402   3                      #endif
 403   3                 return;
 404   3              }
 405   2                   if(UartRecvBuf[UartWrIndex-1]!=GetChkSum(UartRecvBuf+1,UartWrIndex-2))
 406   2                     {
 407   3                         #if DEBUG_RFSERVER
 408   3               MDebugStrLF((INT8UC *)"校验和出错");
 409   3                      MDebugExMemHex(UartRecvBuf,UartWrIndex);
 410   3                      MDebugPara("校验和=",GetChkSum(UartRecvBuf+1,UartWrIndex-2));
 411   3                      #endif
 412   3                      return;
 413   3                     }
 414   2                   Temp=UartRecvBuf[3];
 415   2                   switch(UartRecvBuf[2])
 416   2                     {
 417   3                      case 0x01:
 418   3                              #if DEBUG_RFSERVER
 419   3                           MDebugPara("增加AMU=",Temp);
 420   3                           #endif
 421   3                           
 422   3                           UartSendLen=0;
 423   3                    UartSendBuf[UartSendLen++]=0X7F;
 424   3                    UartSendBuf[UartSendLen++]=3+(IDSERIALLEN+1)*Temp;
 425   3                    UartSendBuf[UartSendLen++]=0X81;
 426   3                    UartSendBuf[UartSendLen++]=Temp;
 427   3                    
 428   3                           for(i=0;i<Temp;i++)
 429   3                             {
 430   4                                 #if DEBUG_RFSERVER
 431   4                       //MDebugExMemHex(UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
 432   4                              #endif
 433   4                              MovXX(UartSendBuf+UartSendLen,UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
 434   4                                 UartSendLen+=IDSERIALLEN;
 435   4                              for(j=0;j<AmuNum;j++)
 436   4                                {
 437   5                                      if(CmpString(UartRecvBuf+4+i*IDSERIALLEN,AmuData[j],IDSERIALLEN)==STR_EQUAL) break;
 438   5                                }
 439   4                              if(j==AmuNum)
 440   4                                {
 441   5                                    UartSendBuf[UartSendLen++]=0x01;
 442   5                                      MovXX(AmuData[AmuNum],UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
 443   5                                      AmuData[AmuNum][4]=0x03;  //通讯失败
 444   5                                      AmuNum++;
 445   5                                }
 446   4                              else UartSendBuf[UartSendLen++]=0x02;
 447   4                             }
 448   3                              UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
 449   3                              #if DEBUG_RFSERVER
 450   3                           MDebugExMemHex(UartSendBuf,UartSendLen);
 451   3                           #endif
 452   3                              PostToUartSendQ(0);
 453   3                              
 454   3                           #if DEBUG_RFSERVER
 455   3                           MDebugPara("AmuNum:",AmuNum);
 456   3                           MDebugExMemHex((INT8UX *)AmuData,AmuNum*5);
 457   3                           #endif
 458   3                           break;
 459   3                      case 0x02:
 460   3                              #if DEBUG_RFSERVER
 461   3                           MDebugPara("取消AMU=",Temp);
 462   3                           #endif
 463   3                           
 464   3                           UartSendLen=0;
 465   3                    UartSendBuf[UartSendLen++]=0X7F;
 466   3                    UartSendBuf[UartSendLen++]=3+(IDSERIALLEN+1)*Temp;
 467   3                    UartSendBuf[UartSendLen++]=0X82;
 468   3                    UartSendBuf[UartSendLen++]=Temp;
 469   3                    
 470   3                           for(i=0;i<Temp;i++)
 471   3                             {
 472   4                                 #if DEBUG_RFSERVER
 473   4                       //MDebugExMemHex(UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
 474   4                              #endif
 475   4                              MovXX(UartSendBuf+UartSendLen,UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
 476   4                                 UartSendLen+=IDSERIALLEN;
 477   4                              for(j=0;j<AmuNum;j++)
 478   4                                {
 479   5                                      if(CmpString(UartRecvBuf+4+i*IDSERIALLEN,AmuData[j],IDSERIALLEN)==STR_EQUAL) break;
 480   5                                }
 481   4                              if(j==AmuNum)  UartSendBuf[UartSendLen++]=0x02;
 482   4                              else
 483   4                                {
 484   5                                    UartSendBuf[UartSendLen++]=0x01;
 485   5                                    MovXX(AmuData[j],AmuData[j+1],(AmuNum-1)*IDSERIALLEN);
 486   5                                    AmuNum--;
 487   5                                }
 488   4                             }
 489   3                              UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
 490   3                              #if DEBUG_RFSERVER
 491   3                           MDebugExMemHex(UartSendBuf,UartSendLen);
 492   3                           #endif
 493   3                              PostToUartSendQ(0);
 494   3                              
 495   3                           #if DEBUG_RFSERVER
 496   3                           MDebugPara("AmuNum:",AmuNum);
 497   3                           MDebugExMemHex((INT8UX *)AmuData,AmuNum*5);
 498   3                           #endif
 499   3                           break;
 500   3                      case 0x03:
 501   3                              #if DEBUG_RFSERVER
 502   3                           MDebugPara("查询AMU=",Temp);
 503   3                           #endif
 504   3                           
 505   3                           UartSendLen=0;
 506   3                    UartSendBuf[UartSendLen++]=0X7F;
 507   3                    UartSendBuf[UartSendLen++]=3+(IDSERIALLEN+1)*Temp;
 508   3                    UartSendBuf[UartSendLen++]=0X83;
 509   3                    UartSendBuf[UartSendLen++]=Temp;
 510   3                    
 511   3                           for(i=0;i<Temp;i++)
 512   3                             {
 513   4                                 #if DEBUG_RFSERVER
 514   4                       //MDebugExMemHex(UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
 515   4                              #endif
 516   4                              MovXX(UartSendBuf+UartSendLen,UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
 517   4                                 UartSendLen+=IDSERIALLEN;
 518   4                              for(j=0;j<AmuNum;j++)
 519   4                                {
 520   5                                      if(CmpString(UartRecvBuf+4+i*IDSERIALLEN,AmuData[j],IDSERIALLEN)==STR_EQUAL) break;
 521   5                                }
 522   4                              if(j==AmuNum)  UartSendBuf[UartSendLen++]=0x02;  //处于自由工作状态
 523   4                              else UartSendBuf[UartSendLen++]=AmuData[j][4];
 524   4                             }
 525   3                              UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
 526   3                              #if DEBUG_RFSERVER
 527   3                           MDebugExMemHex(UartSendBuf,UartSendLen);
 528   3                           #endif
 529   3                              PostToUartSendQ(0);
 530   3                           break;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?