📄 mfrc500.lst
字号:
1141 5 }
1142 4 }
1143 3 }
1144 2 }
1145 1
1146 1 if ( status == MI_OK)
1147 1 {
1148 2
1149 2 M500PcdSetTmo(3);
1150 2
1151 2 ResetInfo(&MInfo);
1152 2 memcpy(SndBuffer,DataBuff,16);
1153 2 MInfo.nBytesToSend = 16;
1154 2 status = M500PcdCmd(PCD_TRANSCEIVE, SndBuffer, RcvBuffer, &MInfo);
1155 2
1156 2 if (status != MI_NOTAGERR)
1157 2 {
1158 3
1159 3 if (MInfo.nBitsReceived != 4)
1160 3 {
1161 4 status = MI_BITCOUNTERR;
1162 4 }
1163 3 else
1164 3 {
1165 4 RcvBuffer[0] &= 0x0f;
1166 4 if ((RcvBuffer[0] & 0x0a) == 0)
1167 4 {
1168 5 status = MI_WRITEERR;
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 20
1169 5 }
1170 4 else
1171 4 {
1172 5 if (RcvBuffer[0] == 0x0a)
1173 5 {
1174 6 status = MI_OK;
1175 6 }
1176 5 else
1177 5 {
1178 6 status = MI_CODEERR;
1179 6 }
1180 5 }
1181 4 }
1182 3 }
1183 2 }
1184 1 return status;
1185 1 }
1186
1187 uchar M500Increment(uchar addr, uchar *value, uchar bakaddr)
1188 {
1189 1 uchar i;
1190 1 if((i=M500Value(PICC_INCREMENT, addr, value, addr)) != MI_OK)
1191 1 return i;
1192 1
1193 1 if(addr != bakaddr)
1194 1 return M500Copy(addr, bakaddr);
1195 1 else
1196 1 return MI_OK;
1197 1 }
1198
1199 uchar M500Decrement(uchar addr, uchar *value, uchar bakaddr)
1200 {
1201 1 uchar i;
1202 1 if((i=M500Value(PICC_DECREMENT, addr, value, addr)) != MI_OK)
1203 1 return i;
1204 1
1205 1 if(addr != bakaddr)
1206 1 return M500Copy(addr, bakaddr);
1207 1 else
1208 1 return MI_OK;
1209 1 }
1210
1211 uchar M500Copy(uchar srcaddr, uchar desaddr)
1212 {
1213 1 uchar i;
1214 1
1215 1 if((i=M500Restore(srcaddr)) != MI_OK)
1216 1 return i;
1217 1 else
1218 1 return M500Transfer(desaddr);
1219 1 }
1220
1221 uchar M500Restore(uchar Address)
1222 {
1223 1 uchar status = MI_OK;
1224 1
1225 1 M500PcdSetTmo(1);
1226 1 ResetInfo(&MInfo);
1227 1 SndBuffer[0] = PICC_RESTORE;
1228 1 SndBuffer[1] = Address;
1229 1 MInfo.nBytesToSend = 2;
1230 1 status = M500PcdCmd(PCD_TRANSCEIVE, SndBuffer, RcvBuffer, &MInfo);
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 21
1231 1
1232 1 if (status != MI_NOTAGERR)
1233 1 {
1234 2 if (MInfo.nBitsReceived != 4)
1235 2 {
1236 3 status = MI_BITCOUNTERR;
1237 3 }
1238 2 else
1239 2 {
1240 3 RcvBuffer[0] &= 0x0f;
1241 3 switch(RcvBuffer[0])
1242 3 {
1243 4 case 0x00:
1244 4 status = MI_NOTAUTHERR;
1245 4 break;
1246 4 case 0x0a:
1247 4 status = MI_OK;
1248 4 break;
1249 4 case 0x01:
1250 4 status = MI_VALERR;
1251 4 break;
1252 4 default:
1253 4 status = MI_CODEERR;
1254 4 break;
1255 4 }
1256 3 }
1257 2 }
1258 1 if ( status == MI_OK)
1259 1 {
1260 2
1261 2 M500PcdSetTmo(3);
1262 2 ResetInfo(&MInfo);
1263 2 SndBuffer[0]=0;
1264 2 SndBuffer[1]=0;
1265 2 SndBuffer[2]=0;
1266 2 SndBuffer[3]=0;
1267 2 MInfo.nBytesToSend = 4;
1268 2 status = M500PcdCmd(PCD_TRANSCEIVE, SndBuffer, RcvBuffer, &MInfo);
1269 2 if (status == MI_OK)
1270 2 {
1271 3 if (MInfo.nBitsReceived != 4)
1272 3 {
1273 4 status = MI_BITCOUNTERR;
1274 4 }
1275 3 else
1276 3 {
1277 4 RcvBuffer[0] &= 0x0f;
1278 4 switch(RcvBuffer[0])
1279 4 {
1280 5 case 0x00:
1281 5 status = MI_NOTAUTHERR;
1282 5 break;
1283 5 case 0x01:
1284 5 status = MI_VALERR;
1285 5 break;
1286 5 default:
1287 5 status = MI_CODEERR;
1288 5 break;
1289 5 }
1290 4 }
1291 3 }
1292 2 else
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 22
1293 2 if (status == MI_NOTAGERR )
1294 2 status = MI_OK;
1295 2 }
1296 1 return status;
1297 1 }
1298
1299 uchar M500Transfer(uchar Address)
1300 {
1301 1 uchar status = MI_OK;
1302 1
1303 1 ResetInfo(&MInfo);
1304 1 M500PcdSetTmo(3);
1305 1 SndBuffer[0] = PICC_TRANSFER;
1306 1 SndBuffer[1] = Address;
1307 1 MInfo.nBytesToSend = 2;
1308 1 status = M500PcdCmd(PCD_TRANSCEIVE, SndBuffer, RcvBuffer, &MInfo);
1309 1 if (status != MI_NOTAGERR)
1310 1 {
1311 2 if (MInfo.nBitsReceived != 4)
1312 2 {
1313 3 status = MI_BITCOUNTERR;
1314 3 }
1315 2 else
1316 2 {
1317 3 RcvBuffer[0] &= 0x0f;
1318 3 switch(RcvBuffer[0])
1319 3 {
1320 4 case 0x00:
1321 4 status = MI_NOTAUTHERR;
1322 4 break;
1323 4 case 0x0a:
1324 4 status = MI_OK;
1325 4 break;
1326 4 case 0x01:
1327 4 status = MI_VALERR;
1328 4 break;
1329 4 default:
1330 4 status = MI_CODEERR;
1331 4 break;
1332 4 }
1333 3 }
1334 2 }
1335 1 return status;
1336 1 }
1337
1338
1339 ///////////////////////////////////////////////////////////////////////
1340 // V A L U E M A N I P U L A T I O N
1341 ///////////////////////////////////////////////////////////////////////
1342 char M500Value(unsigned char dd_mode,
1343 unsigned char addr,
1344 unsigned char *value,
1345 unsigned char trans_addr)
1346 {
1347 1 char status = MI_OK;
1348 1
1349 1 M500PcdSetTmo(3);//255); // 106
1350 1 // ************* Cmd Sequence **********************************
1351 1 ResetInfo(&MInfo);
1352 1 SndBuffer[0] = dd_mode; // Inc,Dec command code
1353 1 SndBuffer[1] = addr;
1354 1 MInfo.nBytesToSend = 2;
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 23
1355 1 status = M500PcdCmd(PCD_TRANSCEIVE,
1356 1 SndBuffer,
1357 1 RcvBuffer,
1358 1 &MInfo);
1359 1
1360 1 if (status != MI_NOTAGERR) // no timeout error
1361 1 {
1362 2 if (MInfo.nBitsReceived != 4) // 4 bits are necessary
1363 2 {
1364 3 status = MI_BITCOUNTERR;
1365 3 }
1366 2 else // 4 bit received
1367 2 {
1368 3 RcvBuffer[0] &= 0x0f; // mask out upper nibble
1369 3 switch(RcvBuffer[0])
1370 3 {
1371 4 case 0x00:
1372 4 status = MI_NOTAUTHERR;
1373 4 break;
1374 4 case 0x0a:
1375 4 status = MI_OK;
1376 4 break;
1377 4 case 0x01:
1378 4 status = MI_VALERR;
1379 4 break;
1380 4 default:
1381 4 status = MI_CODEERR;
1382 4 break;
1383 4 }
1384 3 }
1385 2 }
1386 1
1387 1 if ( status == MI_OK)
1388 1 {
1389 2 M500PcdSetTmo(4);//255); // long timeout 1000
1390 2
1391 2 ResetInfo(&MInfo);
1392 2 memcpy(SndBuffer,value,4);
1393 2 MInfo.nBytesToSend = 4;
1394 2 status = M500PcdCmd(PCD_TRANSCEIVE,
1395 2 SndBuffer,
1396 2 RcvBuffer,
1397 2 &MInfo);
1398 2
1399 2 if (status == MI_OK) // no timeout occured
1400 2 {
1401 3 if (MInfo.nBitsReceived != 4) // 4 bits are necessary
1402 3 {
1403 4 status = MI_BITCOUNTERR;
1404 4 }
1405 3 else // 4 bit received
1406 3 {
1407 4 RcvBuffer[0] &= 0x0f; // mask out upper nibble
1408 4 switch(RcvBuffer[0])
1409 4 {
1410 5 case 0x00:
1411 5 status = MI_NOTAUTHERR;
1412 5 break;
1413 5 case 0x01:
1414 5 status = MI_VALERR;
1415 5 break;
1416 5 default:
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 24
1417 5 status = MI_CODEERR;
1418 5 break;
1419 5 }
1420 4 }
1421 3 }
1422 2 else
1423 2 if (status == MI_NOTAGERR )
1424 2 status = MI_O
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -