📄 rf_manchester.lst
字号:
464 2 DataHeadbuf.intHigh++; //是高电平就自动加1,找出字头(9个1)
465 2 }
466 1 else if(HFHData==0)
467 1 {
468 2 DataHeadbuf.intLow++; //是低电平判断高电平是否有9个连续的1
469 2 if(DataHeadbuf.intHigh!=9)
470 2 {
471 3 DataHeadbuf.intHigh=0; //无连续9个1,说明数据头不对,丢弃从新检测
472 3 DataHeadbuf.intLow=0;
473 3 }
474 2 else
475 2 {
476 3 OS_Status=Start_Check; //是字头则改变状态到数据接收检测,并清高电平个数从新计数
477 3 DataHeadbuf.intHigh=0;
478 3 Push_Data(0x00); //数据保存
479 3 }
480 2 }
481 1 else if(HFHData==3)
482 1 { //检测错误,清0从新检测
483 2 DataHeadbuf.intHigh=0;
484 2 DataHeadbuf.intLow=0;
485 2 mcsbuf.Head=mcsHeadNull;
486 2 }
487 1 }
488
489
C51 COMPILER V7.50 RF_MANCHESTER 05/31/2006 22:17:06 PAGE 9
490 /*--------------------------------------------------------------------------------
491 函数: DataRecvHandle(uchar DRHData)
492 功能: 处理数据接收(9个1之后的55位数据)
493 引用值:uchar DRHData
494 返回值:无
495 --------------------------------------------------------------------------------*/
496 void DataRecvHandle(uchar DRHData)
497 {
498 1 if(DRHData==1)
499 1 {
500 2 DataHeadbuf.intHigh++; //是高电平就自动加1,找出字头(9个1)
501 2 Push_Data(0x01); //数据保存
502 2 }
503 1 else if(DRHData==0)
504 1 {
505 2 DataHeadbuf.intLow++; //是低电平判断高电平是否有9个连续的1
506 2 Push_Data(0x00); //数据保存
507 2 }
508 1 else if(DRHData==3)
509 1 { //检测错误,清0从新检测
510 2 OS_Status=Start_Find;
511 2 DataHeadbuf.intHigh=0;
512 2 DataHeadbuf.intLow=0;
513 2 mcsbuf.Head=mcsHeadNull;
514 2 }
515 1 }
516
517 /*--------------------------------------------------------------------------------
518 函数:
519 功能:
520 引用值:
521 返回值:
522 --------------------------------------------------------------------------------*/
523
524 void Main(void)
525 {
526 1 uchar temp;
527 1 InitReg();
528 1 TR0 = 1;
529 1 EA = 1;
530 1 High_Timer = 0;
531 1 Low_Timer = 0;
532 1
533 1 FeedDog();
534 1
535 1 while(1)
536 1 {
537 2 IRbitPri = IRbitNext;
538 2 IRbitPri = IRbitNext;
539 2 IRbitNext = IRout;
540 2 IRbitNext = IRout;
541 2
542 2 FeedDog();
543 2
544 2 if(IRbitPri!=IRbitNext) //有跳变处理
545 2 {
546 3 IRbitNext = IRout;
547 3 IRbitNext = IRout;
548 3 IRbitNext = IRout;
549 3 IRbitNext = IRout;
550 3 IRbitNext = IRout;
551 3 IRbitNext = IRout;
C51 COMPILER V7.50 RF_MANCHESTER 05/31/2006 22:17:06 PAGE 10
552 3 IRbitNext = IRout;
553 3 IRbitNext = IRout;
554 3 IRbitNext = IRout;
555 3
556 3 if(IRbitPri!=IRbitNext) //有跳变处理
557 3 {
558 4 FeedDog();
559 4
560 4 Low_Timer=TH0;
561 4 temp=TL0;
562 4 High_Timer=TH0; //低电平时间计算
563 4 if(Low_Timer==High_Timer)
564 4 {
565 5 Low_Timer=temp+High_Timer*256;
566 5 }
567 4 else
568 4 {
569 5 Low_Timer=TL0+High_Timer*256;
570 5 }
571 4 High_Timer=Low_Timer;
572 4 TL0=0x00;
573 4 TH0=0x00;
574 4
575 4 if((IRbitPri==0)&&(IRbitNext==1)) //如果前一位为低电平
576 4 {
577 5 temp=Manchster(mcsLowTimer);
578 5 }
579 4 else if((IRbitPri==1)&&(IRbitNext==0)) //如果前一位是高电平
580 4 {
581 5 temp=Manchster(mcsHighTimer);
582 5 }
583 4
584 4 if(OS_Status==Start_Find)
585 4 { //数据头检测
586 5 HeadFindHandle(temp);
587 5 }
588 4 else if(OS_Status==Start_Check)
589 4 {
590 5 DataRecvHandle(temp);
591 5 }
592 4 }
593 3 }
594 2 }
595 1 }
596
597 /*--------------------------------------------------------------------------------
598 函数:
599 功能:
600 引用值:
601 返回值:
602 --------------------------------------------------------------------------------*/
603 /*
604 if(IRbit)
605 {
606 IRbitPri = IRbitNext;
607 IRbitNext = IRbit;
608 IRbitNext = IRbit;
609 IRbitNext = IRbit;
610 IRbitNext = IRbit;
611 IRbitNext = IRbit;
612
613 if(IRbitPri!=IRbitNext) //有跳变处理
C51 COMPILER V7.50 RF_MANCHESTER 05/31/2006 22:17:06 PAGE 11
614 {
615 Low_Timer=TH0;
616 temp=TL0;
617 High_Timer=TH0; //低电平时间计算
618 if(Low_Timer==High_Timer)
619 {
620 Low_Timer=temp+High_Timer*256;
621 }
622 else
623 {
624 Low_Timer=TL0+High_Timer*256;
625 }
626
627 TL0=0x00;
628 TH0=0x00;
629
630 temp=Manchster(mcsLowTimer);
631
632 if(OS_Status==Start_Find)
633 { //数据头检测
634 HeadFindHandle(temp);
635 }
636 else if(OS_Status==Start_Check)
637 {
638
639 }
640 }
641 }
642 else// if((IRbit1==0)&&(OS_Change!=HL_NoChange))
643 {
644 IRbitPri = IRbitNext;
645 IRbitNext = IRbit;
646 IRbitNext = IRbit;
647 IRbitNext = IRbit;
648 IRbitNext = IRbit;
649 IRbitNext = IRbit;
650 if(IRbitPri!=IRbitNext) //有跳变处理
651 {
652 Low_Timer=TH0;
653 temp=TL0;
654 High_Timer=TH0;
655 if(Low_Timer==High_Timer)
656 {
657 High_Timer=temp+High_Timer*256;
658 }
659 else
660 {
661 High_Timer=TL0+High_Timer*256;
662 }
663
664 TL0=0x00;
665 TH0=0x00;
666
667 temp=Manchster(mcsHighTimer);
668
669 if(OS_Status==Start_Find)
670 { //数据头检测
671 HeadFindHandle(temp);
672 }
673 else if(OS_Status==Start_Check)
674 {
675
C51 COMPILER V7.50 RF_MANCHESTER 05/31/2006 22:17:06 PAGE 12
676 }
677 }
678 }*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1574 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -