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 + -
显示快捷键?