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

📄 m500auc.lst

📁 51+rc500阅读器源码程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -