📄 main.lst
字号:
499 TL2 = 0xff;//(uchar)(~maxCaptureTimeLow);
500 TH2= 0xcf;//(uchar)((~maxCaptureTimeLow)>>8) ;
501 currentMaxTimeHi = 0xcf;//~maxCaptureTimeHi;
502 flag_tag_datarate_bigger=0;
503
504 for(j=0;j<32;j++)
505 {
506 autodection_data[j]=0;
507 }
508 for(i=0;i<0xf8;i++)
509 {
510 if(DEMOD_OUT == 0) //等待低电平,超时退出
511 break;
512 }
513 if(i>=0xf0)
514 {
515 return_00();
516 return;
517 }
518 for(i=0;i<0xf8;i++)
519 {
520 if(DEMOD_OUT == 1) //等待高电平,超时退出
521 break;
522 }
523 if(i>=0xf0)
524 {
525 return_00();
526 return;
527 }
528 ET2=1;
529 TR2=1; //counter 2 start run,interrupt enable
530 flag_wait=1;
531
532 while(flag_wait) //counter 2 is runing
533 {
534 for(i=0;i<0xf8;i++)
535 {
536 if(DEMOD_OUT == 0) //等待低电平,超时退出
537 break;
538 }
539 if(i>=0xf0)
540 {
541 return_00();
542 return;
543 }
544
545
546 icr=count_module();
547 capt=icr-last_capture;
548 last_capture=icr;
C51 COMPILER V7.50 MAIN 08/14/2006 15:15:34 PAGE 10
549 if ((capt>MaxCaptureHalfDateRate)&&(capt<MaxCaptureDateRate))
550 break; //1p hi,64个时钟
551 for(i=0;i<0xf8;i++)
552 {
553 if(DEMOD_OUT == 1) //等待高电平,超时退出
554 break;
555 }
556 if(i>=0xf0)
557 {
558 return_00();
559 return;
560 }
561
562 icr=count_module();
563 capt=icr-last_capture;
564 last_capture=icr;
565 }
566
567 flag_RO_last_capt_half=0;
568 flag_invalid_edge_manchester=0;
569 count_autodection_bit=0;
570 array_subscript=0;
571 bit_subscript=0;
572
573 // //manchester
574 times_capture_manchester=0;
575 while(flag_wait) //counter 2 is runing
576 {
577 for(i=0;i<0xf8;i++)
578 {
579 if(DEMOD_OUT == 1) //,test low time 等待高电平,超时退出
580 break;
581 }
582
583 if(i>=0xf0)
584 {
585 return_00();
586 return;
587 }
588
589 icr=count_module();
590 capt=icr-last_capture;
591 last_capture=icr;
592 if((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==0))
593 { //0.5p low
594 flag_invalid_edge_manchester=1;
595 if((times_capture_manchester%2)==0)
596 {
597 array_subscript=(count_autodection_bit>>3);
598 bit_subscript=(count_autodection_bit%8);
599 autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));
600 }
601 count_autodection_bit++;
602 }
603 else if ((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==1))
604 { //0.5p low
605 flag_invalid_edge_manchester=0;
606 }
607 else if ((capt>MaxCaptureHalfDateRate)&&(capt<MaxCaptureDateRate))
608 { //1p low
609 if((times_capture_manchester%2)==0)
610 {
C51 COMPILER V7.50 MAIN 08/14/2006 15:15:34 PAGE 11
611 array_subscript=(count_autodection_bit>>3);
612 bit_subscript=(count_autodection_bit%8);
613 autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));
614 }
615 count_autodection_bit++;
616 }
617 times_capture_manchester++;
618 //-----
619 for(i=0;i<0xf8;i++)
620 {
621 if(DEMOD_OUT == 0) //等待低电平,超时退出
622 break;
623 }
624 if(i>=0xf0)
625 {
626 return_00();
627 return;
628 }
629
630 icr=count_module();
631 capt=icr-last_capture;
632 last_capture=icr;
633 if((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==0))
634 { //0.5p hi
635 flag_invalid_edge_manchester=1;
636 if((times_capture_manchester%2)==0)
637 {
638 array_subscript=(count_autodection_bit>>3);
639 bit_subscript=(count_autodection_bit%8);
640 autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));
641 }
642 count_autodection_bit++;
643 }
644 else if ((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==1))
645 { //0.5p hi
646 flag_invalid_edge_manchester=0;
647 }
648 else if ((capt>MaxCaptureHalfDateRate)&&(capt<MaxCaptureDateRate))
649 { //1p hi
650 if((times_capture_manchester%2)==0)
651 {
652 array_subscript=(count_autodection_bit>>3);
653 bit_subscript=(count_autodection_bit%8);
654 autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));
655 }
656 count_autodection_bit++;
657 }
658 times_capture_manchester++;
659 }
660
661
662 //数据提取:找标志头、找停止位、检查校验和,一旦正确提取数据退出循环
663 if(count_autodection_bit>64)
664 {
665 flag_header_found=0;
666 for (j=0;j<(count_autodection_bit-54);j++) //找标志头9 bit 1
667 {
668 array_subscript=(j>>3);
669 bit_subscript=(j%8);
670 if ((autodection_data[array_subscript]&(1<<bit_subscript))==0) //不等于0,即可判断此位为1
671 {
672 flag_header_found=1;
C51 COMPILER V7.50 MAIN 08/14/2006 15:15:34 PAGE 12
673 for (k=(j+1);k<(j+10);k++)
674 {
675 array_subscript=(k>>3);
676 bit_subscript=(k%8);
677 if ((autodection_data[array_subscript]&(1<<bit_subscript))==0)
678 {
679 flag_header_found=0;
680 break;
681 }
682 }
683 if(flag_header_found==1) break;
684 }
685 }
686
687 flag_stop_found=0;
688 if (flag_header_found==1)//停止位
689 {
690 array_subscript=((j+64)>>3);
691 bit_subscript=((j+64)%8);
692 if ((autodection_data[array_subscript]&(1<<bit_subscript))==0) flag_stop_found=1;
693 }
694
695 flag_line_check=0;
696 if (flag_stop_found==1) //行校验
697 {
698 for (k=(j+10);k<(j+60);k=(k+5))
699 {
700 check=0;
701 for(l=k;l<(k+4);l++)
702 {
703 array_subscript=(l>>3);
704 bit_subscript=(l%8);
705 check=check^((autodection_data[array_subscript]>>bit_subscript)&1);
706 }
707 array_subscript=(l>>3);
708 bit_subscript=(l%8);
709 if ((autodection_data[array_subscript]&(1<<bit_subscript))!=(check<<bit_subscript))
710 {
711 flag_line_check=0;
712 break;
713 }
714 flag_line_check=1;
715 }
716 }
717
718 flag_column_check=0;
719 if (flag_line_check==1) //列校验
720 {
721 for(k=(j+10);k<(j+14);k++)
722 {
723 check=0;
724 for(l=k;l<(k+50);l=(l+5))
725 {
726 array_subscript=(l>>3);
727 bit_subscript=(l%8);
728 check=check^((autodection_data[array_subscript]>>bit_subscript)&1);
729 }
730 array_subscript=(l>>3);
731 bit_subscript=(l%8);
732 if ((autodection_data[array_subscript]&(1<<bit_subscript))!=(check<<bit_subscript))
733 {
734 flag_column_check=0;
C51 COMPILER V7.50 MAIN 08/14/2006 15:15:34 PAGE 13
735 break;
736 }
737 flag_column_check=1;
738 }
739 }
740
741 if (flag_column_check==1) //提取数据
742 {
743 custID=0;
744 DataItem[0]=0;DataItem[1]=0;DataItem[2]=0;DataItem[3]=0;
745 //客户ID
746 bit_number=7;
747 for (k=(j+10);k<(j+14);k++)
748 {
749 array_subscript=(k>>3);
750 bit_subscript=(k%8);
751 custID=(custID|(((autodection_data[array_subscript]&(1<<bit_subscript))>>bit_subscript)<<bit_number));
752 bit_number--;
753 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -