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