📄 duxiexitongrc500.lst
字号:
854 }
855 else
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 15
856 {
857 msb = 0x01;
858 lsb = temp + 0x40;//0x80
859 }
860 buffer[0] = lsb;
861 buffer[1] = msb;
862 temp =Command_Send(2, buffer, LoadKeyE2);
863
864 temp = ErrorFlag & 0x40;
865 if (temp == 0x40)
866 {
867 return FALSE;
868 }
869 return TRUE;
870 }*/
871
872 uchar Load_keyE2_CPY(uchar Secnr,uchar Mode)
873 {
874 1 uchar temp;
875 1 uint i;
876 1 uchar msb = 0;
877 1 uchar lsb = 0;
878 1 CardStatus=0;
879 1 //sen(0x05);
880 1 //sen(Secnr);//06
881 1 temp = Secnr * 12;//
882 1 //sen(temp);
883 1 if (Mode == 0)
884 1 {
885 2 if (temp >= 0x80) //计算密码存放地址
886 2 {
887 3 lsb = temp - 0x80;
888 3 msb = 0x01;
889 3 }
890 2 else
891 2 {
892 3 msb = 0x00;
893 3 lsb = temp + 0x80;
894 3 }
895 2 }
896 1 else
897 1 {
898 2 msb = 0x01;
899 2 lsb = temp + 0x40;
900 2 }
901 1 for(i=0;i<4;i++) //要装入的密钥可根据你所改的密码填写
902 1
903 1 //{buffer[i]=0x0f;}
904 1 //buffer[4]=0xe1;
905 1 //buffer[5]=0xd2;
906 1 //for(i=6;i<12;i++)
907 1 //{buffer[i]=0x0f;}
908 1 for(i=0;i<12;i++)
909 1 {buffer[i]=0x0f;}
910 1
911 1 temp =Command_Send(12, buffer, LoadKey);//此处已修改用LoadKey命令
912 1 temp = ErrorFlag & 0x40;
913 1 if (temp == 0x40)
914 1 {
915 2 return FALSE;
916 2 }
917 1 temp= RC500_OK;
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 16
918 1 CardStatus=0x01;
919 1 //for (j=0;j<6;j++)
920 1 //sen(gonggongxinxi[j]);
921 1 //return TRUE;
922 1 }
923 /****************************************************************/
924 /*名称: MIF_Read */
925 /*功能: 该函数实现读MIFARE卡块的数值 */
926 /*输入: buff: 缓冲区首地址 */
927 /* Block_Adr: 块地址 */
928 /*输出: RC500_NOTAGERR: 无卡 */
929 /* RC500_PARITYERR: 奇偶校验错 */
930 /*RC500_CRCERR: CRC校验错 */
931 /* RC500_BYTECOUNTERR: 接收字节错误 */
932 /* RC500-OK: 应答正确 */
933 /****************************************************************/
934 uchar MIF_READ(uchar idata *buff,uchar Block_Adr)
935 {
936 1 uchar idata temp;
937 1 CRCPresetLSB = 0x63;
938 1 CWConductance = 0x3f;
939 1 //ModConductance = 0X3f;
940 1 ChannelRedundancy = 0x0f;
941 1 //Int_Req=0x7f;
942 1 buff[0] = RF_CMD_READ;
943 1 buff[1] = Block_Adr;
944 1 CardStatus=0;
945 1 temp = Command_Send(2, buff, Transceive);
946 1 //sen(temp);//01
947 1 if (temp == 0)
948 1 {
949 2 CardStatus=0;
950 2 return RC500_NOTAGERR;
951 2 }
952 1 temp = ErrorFlag;
953 1 //sen(ErrorFlag);//00
954 1 if ((temp & 0x02) == 0x02)
955 1 return RC500_PARITYERR;
956 1 if((temp & 0x04) == 0x04)
957 1 return RC500_FRAMINGERR;
958 1 if ((temp & 0x08) == 0x08)
959 1 return RC500_CRCERR;
960 1
961 1 temp = FIFO_Length;//0x10
962 1 //sen(temp);
963 1 if (temp == 0x10) //8K卡读数据长度为16
964 1 {
965 2 Read_FIFO(buff);//10
966 2 READ_data(temp);
967 2 //sen(0x58);
968 2 CardStatus=0x01;
969 2 return RC500_OK;
970 2 }
971 1 else if (temp == 0x04) //Token卡读数据长度为16
972 1 {
973 2 Read_FIFO(buff);
974 2
975 2 CardStatus=0x01;
976 2 return RC500_OK;
977 2 }
978 1 else
979 1 {
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 17
980 2 CardStatus=0;
981 2 return RC500_BYTECOUNTERR;
982 2 }
983 1 }
984 /****************************************************************/
985 /*名称: MIF_Write */
986 /*功能: 该函数实现写MIFARE卡块的数值 */
987 /*输入: buff: 缓冲区首地址 */
988 /* Block_Adr: 块地址 */
989 /*输出: RC500_NOTAGERR: 无卡 */
990 /* RC500_BYTECOUNTERR: 接收字节错误 */
991 /* RC500_NOTAUTHERR: 未经权威认证 */
992 /* RC500_EMPTY: 数据溢出错误 */
993 /* RC500_CRCERR: CRC校验错 */
994 /* RC500_PARITYERR: 奇偶校验错 */
995 /* RC500_WRITEERR: 写卡块数据出错 */
996 /* RC500_OK: 应答正确 */
997 /****************************************************************/
998 uchar MIF_Write(uchar idata *buff,uchar Block_Adr)
999 {
1000 1 uchar idata temp;
1001 1 //uint i;
1002 1 uchar idata *F_buff;
1003 1 CRCPresetLSB = 0x63;
1004 1 CWConductance = 0x3f;
1005 1 F_buff = buff + 0x10;
1006 1 ChannelRedundancy = 0x07;//选择RF 信道上数据完整性检测的类型和模式
1007 1 *F_buff =RF_CMD_WRITE;
1008 1 *(F_buff + 1)=Block_Adr;
1009 1 CardStatus=0;
1010 1
1011 1 temp = Command_Send(2, F_buff, Transceive);
1012 1 //sen(0x07);
1013 1 if (temp == FALSE)
1014 1 {CardStatus=0;
1015 2 return(RC500_NOTAGERR);
1016 2 }
1017 1 temp = FIFO_Length;
1018 1
1019 1 if (temp == 0)
1020 1 {CardStatus=0;
1021 2 return(RC500_BYTECOUNTERR);
1022 2 }
1023 1 Read_FIFO(F_buff);//01
1024 1 temp = *F_buff;
1025 1 READ_data(temp);
1026 1 //sen(temp);
1027 1 switch (temp)
1028 1 {
1029 2 case 0x00 :
1030 2 return(RC500_NOTAUTHERR); //暂时屏蔽掉写错误
1031 2 case 0x04:
1032 2 return(RC500_EMPTY);
1033 2 case 0x0a:
1034 2 break;
1035 2 case 0x01:
1036 2 return(RC500_CRCERR);
1037 2 case 0x05:
1038 2 return(RC500_PARITYERR);
1039 2 default:
1040 2 return(RC500_WRITEERR);
1041 2 }
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 18
1042 1 //for(i=0;i<6;i++) ///
1043 1 //{ buffer[i]=0xff;}
1044 1 //buffer[6]=0x7F;
1045 1 //buffer[7]=0x07;
1046 1 //buffer[8]=0x88;
1047 1 // buffer[9]=0x69;
1048 1 //for(i=10;i<16;i++)
1049 1 //{ buffer[i]=0xff;}
1050 1 temp = Command_Send(16, buff, Transceive);
1051 1 if (temp == TRUE)
1052 1 {
1053 2
1054 2 CardStatus=0x01;
1055 2 return(RC500_OK);
1056 2 }
1057 1 else
1058 1 {CardStatus=0;
1059 2 temp = ErrorFlag;
1060 2 //sen(temp);
1061 2
1062 2 if ((temp & 0x02)==0x02)
1063 2 return(RC500_PARITYERR);
1064 2 else
1065 2 if((temp & 0x04)==0x04)
1066 2 return(RC500_FRAMINGERR);
1067 2 else
1068 2 if ((temp & 0x08)==0x08)
1069 2 return(RC500_CRCERR);
1070 2 else
1071 2 return(RC500_WRITEERR);
1072 2 }
1073 1 }
1074
1075 /****************************************************************/
1076 /*名称: HL_Active */
1077 /*功能: 该函数实现高级MIFARE卡激活命令 */
1078 /*输入: Secnr: 扇区号 */
1079 /* Block_Adr: 块地址 */
1080 /*输出: 操作状态码 */
1081 /* 读出数据存于buffer中 */
1082 /****************************************************************/
1083 uchar HL_Active(uchar Block_Adr,uchar Mode)
1084 {
1085 1 uchar temp;
1086 1 CardStatus=0;
1087 1 Secnr = Block_Adr/4;
1088 1 MIF_Halt(); //暂停MIFARE卡71 01
1089 1 temp = Request(RF_CMD_REQUEST_STD); //监测ALL的卡片请求
1090 1 if(temp != RC500_OK)
1091 1 {CardStatus=0;
1092 2 return(RC500_REQERR);
1093 2 }
1094 1 temp = AntiColl(); //卡片的防冲突检测读出卡号 71 length 05 6A 8B 2E 0E C1 03
1095 1 if(temp != RC500_OK)
1096 1 {CardStatus=0;
1097 2 return(RC500_ANTICOLLERR);
1098 2 }
1099 1 temp = Select_Card(); //71 40 01
1100 1 if(temp != RC500_OK)
1101 1 {CardStatus=0;
1102 2 return(RC500_SELERR);
1103 2 }
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 19
1104 1 Load_keyE2_CPY((Secnr%16), Mode); //LoadKey
1105 1 temp = mimarenzhen(UID, Secnr, Mode);
1106 1 if(temp != RC500_OK)
1107 1 {CardStatus=0;
1108 2 return(RC500_AUTHERR);
1109 2 }
1110 1 CardStatus=0x01;
1111 1 return RC500_OK;
1112 1 }
1113
1114 /****************************************************************/
1115 /*名称: HL_Read */
1116 /*功能: 该函数实现高级读命令 */
1117 /*输入: Secnr: 扇区号 */
1118 /* Block_Adr: 块地址 */
1119 /*输出: 操作状态码 */
1120 /* 读出数据存于buffer中 */
1121 /****************************************************************/
1122 uchar HL_Read(uchar idata *buff,uchar Block_Adr,uchar Mode)
1123 {
1124 1 uchar temp;
1125 1 CardStatus=0;
1126 1 temp = HL_Active(Block_Adr, Mode);
1127 1 if(temp != RC500_OK)
1128 1 {
1129 2 CardStatus=0;
1130 2 return temp;
1131 2 }
1132 1 temp = MIF_READ(buff,Block_Adr);
1133 1 if(temp != RC500_OK)
1134 1 {
1135 2 CardStatus=0;
1136 2 return temp;
1137 2 }
1138 1
1139 1 //DelayMS(1000);
1140 1 //P14=0;
1141 1 //DelayMS(1000); //控制小喇叭
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -