📄 m500auc.lst
字号:
588 ///////////////////////////////////////////////////////////////////////
589 void delay_10ms(unsigned int _10ms)
590 {
591 1 #ifndef NO_TIMER2
RCAP2LH = RCAP2_10ms;
T2LH = RCAP2_10ms;
TR2 = TRUE;
while (_10ms--)
{
while (!TF2);
TF2 = FALSE;
}
TR2 = FALSE;
#else
603 1 while (_10ms--)
604 1 {
605 2 delay_50us(19);
606 2 if (CmdValid)
607 2 return;
608 2 delay_50us(20);
609 2 if (CmdValid)
610 2 return;
611 2 delay_50us(20);
612 2 if (CmdValid)
613 2 return;
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 11
614 2 delay_50us(20);
615 2 if (CmdValid)
616 2 return;
617 2 delay_50us(20);
618 2 if (CmdValid )
619 2 return;
620 2 delay_50us(20);
621 2 if (CmdValid)
622 2 return;
623 2 delay_50us(20);
624 2 if (CmdValid)
625 2 return;
626 2 delay_50us(20);
627 2 if (CmdValid)
628 2 return;
629 2 delay_50us(20);
630 2 if (CmdValid)
631 2 return;
632 2 delay_50us(19);
633 2 if (CmdValid)
634 2 return;
635 2 }
636 1 #endif
637 1 }
638
639 ///////////////////////////////////////////////////////////////////////
640 ///////////////////////////////////////////////////////////////////////
641 void RC500ISR (void) interrupt 0 using 1
642 {
643 1 static unsigned char idata irqBits;
644 1 static unsigned char idata irqMask;
645 1 static unsigned char idata nbytes;
646 1 static unsigned char idata cnt;
647 1
648 1 IE0 = 0;
649 1 WriteRawIO(0,0x80);
650 1 if (MpIsrInfo && MpIsrOut)
651 1 {
652 2 while( ReadRawIO(RegPrimaryStatus) & 0x08)
653 2 {
654 3 irqMask = ReadRawIO(RegInterruptEn);
655 3 irqBits = ReadRawIO(RegInterruptRq) & irqMask;
656 3 MpIsrInfo->irqSource |= irqBits;
657 3 if (irqBits & 0x01)
658 3 {
659 4 nbytes = 64 - ReadRawIO(RegFIFOLength);
660 4 if ((MpIsrInfo->nBytesToSend - MpIsrInfo->nBytesSent) <= nbytes)
661 4 {
662 5 nbytes = MpIsrInfo->nBytesToSend - MpIsrInfo->nBytesSent;
663 5 WriteRawIO(RegInterruptEn,0x01);
664 5 }
665 4 for ( cnt = 0;cnt < nbytes;cnt++)
666 4 {
667 5 WriteRawIO(RegFIFOData,MpIsrOut[MpIsrInfo->nBytesSent]);
668 5 MpIsrInfo->nBytesSent++;
669 5 }
670 4 WriteRawIO(RegInterruptRq,0x01);
671 4 }
672 3 if (irqBits & 0x10)
673 3 {
674 4 WriteRawIO(RegInterruptRq,0x10);
675 4 WriteRawIO(RegInterruptEn,0x82);
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 12
676 4 if (MpIsrInfo->cmd == PICC_ANTICOLL1)
677 4 {
678 5 WriteIO(RegChannelRedundancy,0x02);
679 5 WriteRawIO(0,0x80);
680 5 }
681 4 }
682 3 if (irqBits & 0x0E)
683 3 {
684 4 nbytes = ReadRawIO(RegFIFOLength);
685 4 for ( cnt = 0; cnt < nbytes; cnt++)
686 4 {
687 5 MpIsrOut[MpIsrInfo->nBytesReceived] = ReadRawIO(RegFIFOData);
688 5 MpIsrInfo->nBytesReceived++;
689 5 }
690 4 WriteRawIO(RegInterruptRq,0x0A & irqBits);
691 4 }
692 3 if (irqBits & 0x04)
693 3 {
694 4 WriteRawIO(RegInterruptEn,0x20);
695 4 WriteRawIO(RegInterruptRq,0x20);
696 4 irqBits &= ~0x20;
697 4 MpIsrInfo->irqSource &= ~0x20;
698 4 WriteRawIO(RegInterruptRq,0x04);
699 4 }
700 3 if (irqBits & 0x20)
701 3 {
702 4 WriteRawIO(RegInterruptRq,0x20);
703 4 MpIsrInfo->status = MI_NOTAGERR;
704 4 }
705 3 }
706 2 }
707 1 }
708
709 ///////////////////////////////////////////////////////////////////////
710 // 接收和发送中断
711 ///////////////////////////////////////////////////////////////////////
712 void isr_UART(void) interrupt 4 using 1
713 {
714 1 unsigned char len, i;
715 1 unsigned int j=0;
716 1
717 1 if(RI)
718 1 {
719 2 len=SBUF;
720 2 RI=0;
721 2 for(i=0;i<len;i++)
722 2 {
723 3 while(!RI)
724 3 {
725 4 j++;
726 4 if(j>1000)
727 4 {
728 5 break;
729 5 }
730 4 }
731 3 if(j<1000)
732 3 {
733 4 RevBuffer[i]=SBUF;
734 4 RI=0;
735 4 j=0;
736 4 }
737 3 else
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 13
738 3 {
739 4 break;
740 4 }
741 3 }
742 2 if(i==len)
743 2 {
744 3 REN=0;
745 3 CmdValid=1;
746 3 }
747 2 }
748 1 else if(!RI && TI)
749 1 {
750 2 TI=0;
751 2 len=RevBuffer[0];
752 2 for(i=1;i<len+1;i++)
753 2 {
754 3 SBUF=RevBuffer[i];
755 3 while(!TI);
756 3 TI=0;
757 3 }
758 2 REN=1;
759 2 }
760 1 }
761
762 ///////////////////////////////////////////////////////////////////////
763 // MF RC500 Config
764 ///////////////////////////////////////////////////////////////////////
765 char MfConfig(void)
766 {
767 1 char status=MI_OK;
768 1
769 1 M500PcdConfig();
770 1 M500PcdMfOutSelect(2);
771 1 return status;
772 1 }
773
774 ///////////////////////////////////////////////////////////////////////
775 // 系统初始化
776 ///////////////////////////////////////////////////////////////////////
777 void init(void)
778 {
779 1 RC500RST=0;
780 1 ET2 = 0;
781 1 T2CON = 0x04;
782 1 PCON = 0x80;
783 1 SCON = 0x70;
784 1 TMOD = 0x21; //TMOD = 0x22;
785 1
786 1 TH1 = BAUD_9600;
787 1 TL1 = TH1;
788 1 TR1 = TRUE; // 波特率发生器
789 1
790 1 TH0 = 0x60;
791 1 TL0 = 0x60;
792 1 TR0 = 0;
793 1
794 1 ET0=0;
795 1 ET1=0;
796 1 EA=1;
797 1 EX0=1;
798 1 IT0 = 1;
799 1 TR2=0;
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 14
800 1 ES = TRUE;
801 1 CmdValid=0;
802 1 AUXR=0x02;
803 1
804 1 SPEAKER=0;
805 1 delay_10ms(30);
806 1 SPEAKER=1;
807 1 delay_10ms(30);
808 1 SPEAKER=0;
809 1
810 1 MfConfig();
811 1 }
812
813 ///////////////////////////////////////////////////////////////////////
814 // IC卡处理函数
815 ///////////////////////////////////////////////////////////////////////
816 void cmd_execution(void)
817 {
818 1 unsigned char i;
819 1 unsigned char status,Temp[4];
820 1 unsigned char Connect_Status=00;
821 1 //寻找卡
822 1 RevBuffer[1]=0x26;//,26为RegMfOutSele
823 1 status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);
824 1 if(status==0)
825 1 {
826 2 // 防冲突 读卡的系列号 MLastSelectedSnr
827 2 status = M500PiccCascAnticoll(0,&RevBuffer[2]);
828 2 if(status==0)
829 2 {
830 3 RevBuffer[0]=7;
831 3 RevBuffer[1]=0xFE;
832 3 RevBuffer[7]=0x7F;
833 3 Temp[0]=RevBuffer[5];
834 3 Temp[1]=RevBuffer[4];
835 3 Temp[2]=RevBuffer[3];
836 3 Temp[3]=RevBuffer[2];
837 3 RevBuffer[2]=Temp[0];
838 3 RevBuffer[3]=Temp[1];
839 3 RevBuffer[4]=Temp[2];
840 3 RevBuffer[5]=Temp[3];
841 3 CALL_isr_UART(); //触发串口中断
842 3 M500PiccHalt(); //终止IC卡操作
843 3 SPEAKER=1;
844 3 delay_10ms(20);
845 3 SPEAKER=0;
846 3 i=0;
847 3 do{
848 4 status=M500PiccCommonRequest(0x52,&RevBuffer[2]);
849 4 if(status==0)i=0;
850 4 else i++;
851 4 }while(i<5);
852 3 }
853 2 }
854 1 }
855
856 ///////////////////////////////////////////////////////////////////////
857 // 主函数
858 ///////////////////////////////////////////////////////////////////////
859
860 void main(void)
861 {
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 15
862 1 init();
863 1 while(1)
864 1 {
865 2 cmd_execution(); // 进入IC卡处理程序
866 2 }
867 1 }
868
869
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2842 ----
CONSTANT SIZE = 6 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 27 21
IDATA SIZE = 47 28
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -