📄 main.lst
字号:
573 2
574 2 case 0x4C: // Load Key
575 2
576 2 if(SerBuffer[MODE]&0X04) SerBuffer[MODE]=PICC_AUTHENT1B; // keyB
577 2 else SerBuffer[MODE]=PICC_AUTHENT1A; // keyA
578 2 // _____________________________________________________________________________
579 2 //
580 2 // FUNCTION: M500PcdLoadKeyE2
581 2 // IN: key_type PICC_AUTHENT1A or PICC_AUTHENT1B
582 2 // sector key sector number, on which the key should be stored
583 2 // values from 0 to 15 are valid
584 2 // uncoded_keys 6 bytes key
585 2 // OUT: -
586 2 // RETURN:
587 2 // COMMENT: This function stores the keys in the reader internal E2PROM.
588 2 // These keys are available for the function M500PiccAuthE2.
589 2 // ______________________________________________________________________________
590 2 //
591 2 Status = M500PcdLoadKeyE2(SerBuffer[MODE], SerBuffer[SECNR], &SerBuffer[13]);
592 2 ErrNum = Status;
593 2 break;
594 2
595 2
596 2 case 0x4D: // comm check char
597 2
598 2 if (SerBuffer[MODE] == SER_BCC)
599 2 {
600 3 CheckByteCnt = BCC_CHECKBYTECNT;
601 3 }
602 2 else
603 2 {
604 3 CheckByteCnt = CRC_CHECKBYTECNT;
605 3 }
606 2 Status = MI_OK;
607 2 break;
608 2
609 2
610 2 case 0x4E: // Reset
611 2
612 2 M500PcdRfReset(SerBuffer[TIME]);
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 11
613 2 Status = MI_OK;
614 2 break;
615 2
616 2
617 2 case 0x4F: // Get Info
618 2
619 2 if ((len == 0) || (len == 1 && SerBuffer[MODE] == 1))
620 2 {
621 3 for (adr = INFO; adr < INFO_CNT + INFO; adr++)
622 3 {
623 4 SerBuffer[adr] = SW_Rel[adr-INFO];
624 4 }
625 3 SerBuffer[adr++] = ' ';
626 3 SerBuffer[adr++] = '0';
627 3 SerBuffer[adr++] = 'x';
628 3 SerBuffer[adr++] = xtoa_h(Snr_RC500[0]);
629 3 SerBuffer[adr++] = xtoa_l(Snr_RC500[0]);
630 3 SerBuffer[adr++] = xtoa_h(Snr_RC500[1]);
631 3 SerBuffer[adr++] = xtoa_l(Snr_RC500[1]);
632 3 SerBuffer[adr++] = xtoa_h(Snr_RC500[2]);
633 3 SerBuffer[adr++] = xtoa_l(Snr_RC500[2]);
634 3 SerBuffer[adr++] = xtoa_h(Snr_RC500[3]);
635 3 SerBuffer[adr++] = xtoa_l(Snr_RC500[3]);
636 3 SerBuffer[adr++] = '\0';
637 3
638 3 SerBuffer[LENGTH] = adr - INFO;
639 3 }
640 2 else
641 2 {
642 3 if (SerBuffer[MODE] == 2)
643 3 {
644 4 SerBuffer[INFO] = (uchar) Capt;
645 4 SerBuffer[INFO + 1] = (uchar)(Capt >> 8);
646 4 SerBuffer[INFO + 2] = BaudRate;
647 4 SerBuffer[INFO + 3] = DelayRate;
648 4 }
649 3 else
650 3 {
651 4 SerBuffer[INFO] = Snr_RC500[0];
652 4 SerBuffer[INFO + 1] = Snr_RC500[1];
653 4 SerBuffer[INFO + 2] = Snr_RC500[2];
654 4 SerBuffer[INFO + 3] = Snr_RC500[3];
655 4 }
656 3 SerBuffer[LENGTH] = 4;
657 3 }
658 2
659 2 Status = MI_OK;
660 2 break;
661 2
662 2
663 2 case 0x50: // Set Control Bit
664 2 if (SerBuffer[INFO]&0x01)
665 2 Status = MI_OK;
666 2 if (SerBuffer[INFO]&0x02)
667 2 Status = MI_OK;
668 2 if (SerBuffer[INFO]&0x04)
669 2 Status = MI_OK;
670 2
671 2 Status = MI_OK;
672 2 break;
673 2
674 2
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 12
675 2 case 0x51: // Clr Control Bit
676 2
677 2 Status = MI_OK;
678 2 break;
679 2
680 2
681 2 case 0x52: // Config
682 2
683 2 Status = M500PcdConfig();
684 2
685 2 #ifdef AUTODELAY
686 2 DelayRate = 0;
687 2 #endif
688 2 break;
689 2
690 2
691 2 case 0x53: // Check Write
692 2
693 2 Status = MIS_CHK_FAILED;
694 2
695 2 if (M500PiccRequest(PICC_REQALL, tt) != MI_OK)
696 2 {
697 3 if (M500PiccRequest(PICC_REQALL, tt) != MI_OK)
698 3 {
699 4 break;
700 4 }
701 3 }
702 2 if (M500PiccSelect(&SerBuffer[SERNR], &size) != MI_OK)
703 2 {
704 3 if (M500PiccRequest(PICC_REQALL, tt) != MI_OK)
705 3 {
706 4 break;
707 4 }
708 3 if (M500PiccSelect(&SerBuffer[SERNR], &size) != MI_OK)
709 3 {
710 4 break;
711 4 }
712 3 }
713 2 memcpy(card_snr,&SerBuffer[SERNR],4);
714 2 if(SerBuffer[AUTHMODE]&0X04) SerBuffer[AUTHMODE]=PICC_AUTHENT1B; // keyB
715 2 else SerBuffer[AUTHMODE]=PICC_AUTHENT1A; // keyA
716 2
717 2 //if (Status = M500PiccAuth(SerBuffer[AUTHMODE], card_snr,
718 2 // SerBuffer[ADRCHKWR]>>2, SerBuffer[ADRCHKWR]) != MI_OK)
719 2 if (Status = M500PiccAuthE2(SerBuffer[AUTHMODE], card_snr,
720 2 SerBuffer[ADRCHKWR]>>2, SerBuffer[ADRCHKWR]) != MI_OK)
721 2 {
722 3 break;
723 3 }
724 2
725 2 if (M500PiccRead(SerBuffer[ADRCHKWR], tmp) != MI_OK)
726 2 {
727 3 break;
728 3 }
729 2
730 2 if (memcmp(&SerBuffer[DATACHKWR], tmp, 16) != MI_OK)
731 2 {
732 3 Status = MIS_CHK_COMPERR;
733 3 }
734 2 else
735 2 {
736 3 Status = MIS_CHK_OK;
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 13
737 3 }
738 2 break;
739 2
740 2
741 2 case 0x54: // Set Port
742 2
743 2 P1 |= (SerBuffer[PORTBYTE]&0x0f); // set the desired port pin
744 2 P1 &= (SerBuffer[PORTBYTE]|0xf0); // clear the desired port pin
745 2 if (SerBuffer[PORTBYTE]&0x10)
746 2 LED = LED;
747 2 else
748 2
749 2 Status = MI_OK;
750 2 break;
751 2
752 2
753 2 case 0x55: // Get Port
754 2
755 2 SerBuffer[PORTBYTE] = P1&0xf;
756 2 SerBuffer[LENGTH] = 1;
757 2 Status = MI_OK;
758 2 break;
759 2
760 2 case 0x56: // Authentication2
761 2
762 2 if(SerBuffer[MODE]&0X04) SerBuffer[MODE]=PICC_AUTHENT1B; // keyB
763 2 else SerBuffer[MODE]=PICC_AUTHENT1A; // keyA
764 2
765 2 //Status = M500PiccAuth(SerBuffer[MODE], card_snr,
766 2 // SerBuffer[SECNR], SerBuffer[AUTHADD]);
767 2 Status = M500PiccAuthE2(SerBuffer[MODE], card_snr,
768 2 SerBuffer[SECNR], SerBuffer[AUTHADD]);
769 2 break;
770 2
771 2
772 2 case 0x57: // Decrement+Transfer
773 2
774 2 Status = M500PiccValue(PICC_DECREMENT, SerBuffer[ADR], &SerBuffer[VALUE], SerBuffer[ADR]);
775 2 break;
776 2
777 2 default:
778 2
779 2 Status = MI_NY_IMPLEMENTED;
780 2 break;
781 2
782 2
783 2 } // end switch (Command)
784 1
785 1 SerBuffer[STATUS] = ~Status+1;
786 1
787 1 if (cmd < 0x48 || cmd > 0x4A)
788 1 {
789 2 EnableTransferCmd = FALSE;
790 2 }
791 1 else
792 1 {
793 2 EnableTransferCmd = TRUE;
794 2 }
795 1 }
796
797
798 /****************************************************************************
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 14
799 * *
800 * Function: auto_baud *
801 * *
802 * Input: - *
803 * Output: - *
804 * *
805 * Description: *
806 * *
807 * Mi醫 die Zeitspanne zwischen Start- und Stopbit des ersten empfangenen *
808 * Zeichens (STX) und ermittelt daraus die Baudrate. *
809 * *
810 ****************************************************************************/
811
812 void auto_baud (void)
813 {
814 1 //int temp;
815 1
816 1 if (AutoBaud && !RXD) // If autobaud is enable and RXD pin is low
817 1 {
818 2 TR0 = TRUE; // Start timer0
819 2
820 2 do
821 2 {
822 3 if (RXD) // When RXD pin is high
823 3 {
824 4 Capt_L = TL0;
825 4 Capt_H = TH0;
826 4
827 4 do
828 4 {
829 5 if (!RXD)
830 5 {
831 6 break;
832 6 }
833 5 } while (!TF0);
834 4 }
835 3 } while (!TF0);
836 2
837 2 TR0 = FALSE;
838 2 TF0 = FALSE;
839 2
840 2 Capt = ((uint)Capt_H << 5) | ((uint)Capt_L & 0x001F);
841 2
842 2 for (BaudRate = BAUD_CNT; BaudRate >= 0; BaudRate--)
843 2 {
844 3 if (Capt >= CmpTable[BaudRate])
845 3 {
846 4 break;
847 4 }
848 3 }
849 2
850 2 if (BaudRate < 0 || BaudRate == BAUD_CNT) // Error baud count
851 2 {
852 3 TH0 = 0;
853 3 TL0 = 0;
854 3 Capt_L = 0;
855 3 Capt_H = 0;
856 3 return;
857 3 }
858 2
859 2 TMOD = 0x21; // Timer 0, mode 1, 16-bit counter
860 2 TH1 = BaudRateTable[BaudRate];
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 15
861 2 TL1 = TH1;
862 2 TR1 = TRUE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -