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