⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfrc500.lst

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -