📄 m500auc.lst
字号:
C51 COMPILER V7.06 M500AUC 03/16/2008 20:55:11 PAGE 19
1110 2 delay_50us(20);
1111 2 if (CmdValid)
1112 2 return;
1113 2 delay_50us(20);
1114 2 if (CmdValid)
1115 2 return;
1116 2 delay_50us(19);
1117 2 if (CmdValid)
1118 2 return;
1119 2 }
1120 1 #endif
1121 1 }
1122
1123 ///////////////////////////////////////////////////////////////////////
1124 ///////////////////////////////////////////////////////////////////////
1125 void RC500ISR (void) interrupt 0 using 1
1126 {
1127 1 static unsigned char idata irqBits;
1128 1 static unsigned char idata irqMask;
1129 1 static unsigned char idata nbytes;
1130 1 static unsigned char idata cnt;
1131 1
1132 1 IE0 = 0;
1133 1 WriteRawIO(0,0x80);
1134 1 if (MpIsrInfo && MpIsrOut)
1135 1 {
1136 2 while( ReadRawIO(RegPrimaryStatus) & 0x08)
1137 2 {
1138 3 irqMask = ReadRawIO(RegInterruptEn);
1139 3 irqBits = ReadRawIO(RegInterruptRq) & irqMask;
1140 3 MpIsrInfo->irqSource |= irqBits;
1141 3 if (irqBits & 0x01)
1142 3 {
1143 4 nbytes = 64 - ReadRawIO(RegFIFOLength);
1144 4 if ((MpIsrInfo->nBytesToSend - MpIsrInfo->nBytesSent) <= nbytes)
1145 4 {
1146 5 nbytes = MpIsrInfo->nBytesToSend - MpIsrInfo->nBytesSent;
1147 5 WriteRawIO(RegInterruptEn,0x01);
1148 5 }
1149 4 for ( cnt = 0;cnt < nbytes;cnt++)
1150 4 {
1151 5 WriteRawIO(RegFIFOData,MpIsrOut[MpIsrInfo->nBytesSent]);
1152 5 MpIsrInfo->nBytesSent++;
1153 5 }
1154 4 WriteRawIO(RegInterruptRq,0x01);
1155 4 }
1156 3 if (irqBits & 0x10)
1157 3 {
1158 4 WriteRawIO(RegInterruptRq,0x10);
1159 4 WriteRawIO(RegInterruptEn,0x82);
1160 4 if (MpIsrInfo->cmd == PICC_ANTICOLL1)
1161 4 {
1162 5 WriteIO(RegChannelRedundancy,0x02);
1163 5 WriteRawIO(0,0x80);
1164 5 }
1165 4 }
1166 3 if (irqBits & 0x0E)
1167 3 {
1168 4 nbytes = ReadRawIO(RegFIFOLength);
1169 4 for ( cnt = 0; cnt < nbytes; cnt++)
1170 4 {
1171 5 MpIsrOut[MpIsrInfo->nBytesReceived] = ReadRawIO(RegFIFOData);
C51 COMPILER V7.06 M500AUC 03/16/2008 20:55:11 PAGE 20
1172 5 MpIsrInfo->nBytesReceived++;
1173 5 }
1174 4 WriteRawIO(RegInterruptRq,0x0A & irqBits);
1175 4 }
1176 3 if (irqBits & 0x04)
1177 3 {
1178 4 WriteRawIO(RegInterruptEn,0x20);
1179 4 WriteRawIO(RegInterruptRq,0x20);
1180 4 irqBits &= ~0x20;
1181 4 MpIsrInfo->irqSource &= ~0x20;
1182 4 WriteRawIO(RegInterruptRq,0x04);
1183 4 }
1184 3 if (irqBits & 0x20)
1185 3 {
1186 4 WriteRawIO(RegInterruptRq,0x20);
1187 4 MpIsrInfo->status = MI_NOTAGERR;
1188 4 }
1189 3 }
1190 2 }
1191 1 }
1192
1193 ///////////////////////////////////////////////////////////////////////
1194 // 接收和发送中断
1195 ///////////////////////////////////////////////////////////////////////
1196 void isr_UART(void) interrupt 4 using 1
1197 {
1198 1 unsigned char len, i;
1199 1 unsigned int j=0;
1200 1
1201 1 if(RI)
1202 1 {
1203 2 len=SBUF;
1204 2 RI=0;
1205 2 LED = 1;
1206 2 for(i=0;i<len;i++)
1207 2 {
1208 3 while(!RI)
1209 3 {
1210 4 j++;
1211 4 if(j>1000)
1212 4 {
1213 5 break;
1214 5 }
1215 4 }
1216 3 if(j<1000)
1217 3 {
1218 4 RevBuffer[i]=SBUF;
1219 4 RI=0;
1220 4 j=0;
1221 4 }
1222 3 else
1223 3 {
1224 4 break;
1225 4 }
1226 3 }
1227 2 LED = 0;
1228 2 if(i==len)
1229 2 {
1230 3 REN=0;
1231 3 CmdValid=1;
1232 3 }
1233 2 }
C51 COMPILER V7.06 M500AUC 03/16/2008 20:55:11 PAGE 21
1234 1 else if(!RI && TI)
1235 1 {
1236 2 TI=0;
1237 2 len=RevBuffer[0];
1238 2 LED = 1;
1239 2 for(i=0;i<len+1;i++)
1240 2 {
1241 3 SBUF=RevBuffer[i];
1242 3 while(!TI);
1243 3 TI=0;
1244 3 }
1245 2 LED = 0;
1246 2 REN=1;
1247 2 }
1248 1 }
1249
1250 ///////////////////////////////////////////////////////////////////////
1251 // MF RC500 Config
1252 ///////////////////////////////////////////////////////////////////////
1253 char MfConfig(void)
1254 {
1255 1 char status=MI_OK;
1256 1
1257 1 M500PcdConfig();
1258 1 M500PcdMfOutSelect(2);
1259 1 return status;
1260 1 }
1261
1262 ///////////////////////////////////////////////////////////////////////
1263 // 系统初始化
1264 ///////////////////////////////////////////////////////////////////////
1265 void init(void)
1266 {
1267 1 RC500RST = 0;
1268 1
1269 1 ET2 = 0;
1270 1 T2CON = 0x04;
1271 1 PCON = 0x80;
1272 1 SCON = 0x70;
1273 1 TMOD = 0x21; //TMOD = 0x22;
1274 1
1275 1 TH1 = BAUD_9600;
1276 1 TL1 = TH1;
1277 1 TR1 = TRUE; // 波特率发生器
1278 1
1279 1 TH0 = 0x60;
1280 1 TL0 = 0x60;
1281 1 TR0 = 0;
1282 1
1283 1 ET0=0;
1284 1 ET1=0;
1285 1 EA=1;
1286 1 EX0=1;
1287 1 IT0 = 1;
1288 1 TR2=0;
1289 1 ES = TRUE;
1290 1 CmdValid=0;
1291 1
1292 1 SPEAKER=0;
1293 1 LED = 0;
1294 1
1295 1 delay_10ms(30);
C51 COMPILER V7.06 M500AUC 03/16/2008 20:55:11 PAGE 22
1296 1 SPEAKER=1;
1297 1 LED = 1;
1298 1 delay_10ms(30);
1299 1 SPEAKER=0;
1300 1 LED = 0;
1301 1
1302 1 MfConfig();
1303 1 }
1304
1305 ///////////////////////////////////////////////////////////////////////
1306 // IC卡处理函数
1307 ///////////////////////////////////////////////////////////////////////
1308 void cmd_execution(void)
1309 {
1310 1 unsigned char cmd;
1311 1 unsigned char status;
1312 1
1313 1 cmd = RevBuffer[0];
1314 1 switch(cmd)
1315 1 {
1316 2 case 1: // Halt the card //终止卡的操作
1317 2 status=M500PiccHalt();
1318 2 RevBuffer[0]=1;
1319 2 RevBuffer[1]=status;
1320 2 break;
1321 2 case 2: // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)
1322 2 // 寻卡,防冲突,选择卡 返回卡类型(2 bytes)+ 卡系列号(4 bytes)
1323 2 status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);
1324 2 if(status!=0)
1325 2 {
1326 3 status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);
1327 3 if(status!=0)
1328 3 {
1329 4 RevBuffer[0]=1;
1330 4 RevBuffer[1]=status;
1331 4 break;
1332 4 }
1333 3 }
1334 2 if(RevBuffer[2]==2)
1335 2 cardtype=mifarepro; // Mifare Pro 卡
1336 2 else if(RevBuffer[2]==4)
1337 2 cardtype=mifare1; // Mifare One 卡
1338 2 else if(RevBuffer[2]==16)
1339 2 cardtype=mifarelight; // Mifare Light 卡
1340 2 else
1341 2 cardtype=unknowncard;
1342 2 RevBuffer[0]=3;
1343 2 RevBuffer[1]=status;
1344 2 break;
1345 2
1346 2 case 3: // 防冲突 读卡的系列号 MLastSelectedSnr
1347 2 status = M500PiccCascAnticoll(0,&RevBuffer[2]);
1348 2 if(status!=0)
1349 2 {
1350 3 RevBuffer[0]=1;
1351 3 RevBuffer[1]=status;
1352 3 break;
1353 3 }
1354 2 memcpy(MLastSelectedSnr,&RevBuffer[2],4);
1355 2 RevBuffer[0]=5;
1356 2 RevBuffer[1]=status;
1357 2 break;
C51 COMPILER V7.06 M500AUC 03/16/2008 20:55:11 PAGE 23
1358 2 case 4: // 选择卡 Select Card
1359 2 status=M500PiccCascSelect(MLastSelectedSnr,&RevBuffer[2]);
1360 2 if(status!=MI_OK)
1361 2 {
1362 3 RevBuffer[0]=1;
1363 3 RevBuffer[1]=status;
1364 3 break;
1365 3 }
1366 2 RevBuffer[0]=3;
1367 2 RevBuffer[1]=status;
1368 2 break;
1369 2 case 5: // Key loading into the MF RC500's EEPROM
1370 2 // 校验卡密码(E2)
1371 2 status=M500PiccAuthE2(RevBuffer[1],MLastSelectedSnr,RevBuffer[2],RevBuffer[3]);
1372 2 RevBuffer[0]=1;
1373 2 RevBuffer[1]=status;
1374 2 break;
1375 2 case 6: // Key loading into the MF RC500's EEPROM
1376 2 // 下载密码(E2)
1377 2 status=M500PcdLoadKeyE2(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);
1378 2 RevBuffer[0]=1;
1379 2 RevBuffer[1]=status;
1380 2 break;
1381 2 case 7: // Authentication with direct key loading from the uC
1382 2 // 直接校验密码
1383 2 memcpy(&RevBuffer[9],&RevBuffer[3],6);
1384 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -