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

📄 mf_rc500.lst

📁 RC500 Mifare Chip for 8051 code
💻 LST
📖 第 1 页 / 共 4 页
字号:
1006   3               {
1007   4                  RC_WriteRawData(RegInterruptRq,0x10);    
1008   4                  RC_WriteRawData(RegInterruptEn,0x82);   
1009   4                  if (MpIsrInfo->cmd == PICC_ANTICOLL1)       
1010   4                  {                                        
1011   5                     RC_WriteRC(RegChannelRedundancy,0x02);
1012   5                     RC_WriteRawData(0,0x80);
1013   5                  }   
1014   4               }
1015   3      
1016   3               if (irqBits & 0x0E) 
1017   3               {
1018   4                  nbytes = RC_ReadRawData(RegFIFOLength);
1019   4                  for ( cnt = 0; cnt < nbytes; cnt++)               
1020   4                  {
1021   5                     MpIsrOut[MpIsrInfo->nBytesReceived] = RC_ReadRawData(RegFIFOData);
1022   5                     MpIsrInfo->nBytesReceived++;
1023   5                  }
1024   4                  RC_WriteRawData(RegInterruptRq,0x0A & irqBits); 
1025   4               }   
1026   3         
1027   3               if (irqBits & 0x04) 
1028   3               {
1029   4                  RC_WriteRawData(RegInterruptEn,0x20); 
1030   4                  RC_WriteRawData(RegInterruptRq,0x20); 
1031   4                  irqBits &= ~0x20; 
1032   4                  MpIsrInfo->irqSource &= ~0x20;
1033   4                  RC_WriteRawData(RegInterruptRq,0x04);
1034   4               }
1035   3               if (irqBits & 0x20)     
1036   3               {
1037   4                  RC_WriteRawData(RegInterruptRq,0x20); 
1038   4                  MpIsrInfo->status = MI_NOTAGERR; 
1039   4               }        
1040   3            }
1041   2         }
1042   1      }
1043          //com interrupt server route frandy
1044          void serial_interrupt() interrupt 4 using 1
1045          {   
1046   1              if(RI)
C51 COMPILER V7.08   MF_RC500                                                              01/18/2004 17:34:11 PAGE 18  

1047   1                      {
1048   2                      RI=0;
1049   2                      com_tmr_rx=5;
1050   2                      com_r_busy=1;
1051   2                      datas[com_r_index++]=SBUF;
1052   2                      if(com_r_index>=34)
1053   2                              com_r_index=0;
1054   2                              
1055   2                      if(datas[0]!='B')
1056   2                                      com_r_index=0;
1057   2                      }
1058   1      
1059   1              if(TI)
1060   1                      {       
1061   2                      TI=0;
1062   2                      TX_RX=0;
1063   2                      if(com_t_index<com_t_length)  
1064   2                              {
1065   3                              TX_RX=1;
1066   3                              SBUF=datas[com_t_index++];              
1067   3                              }
1068   2                      else                    
1069   2                              {
1070   3                              com_t_index=com_t_length=0; 
1071   3                              TX_RX=0;
1072   3                              }
1073   2                              
1074   2                              
1075   2                      }
1076   1      
1077   1      } 
1078          
1079          void Sys_Init(void)
1080          {
1081   1           
1082   1              RC500CS = 0;
1083   1              RC500RST=0;        
1084   1              IE=0x00;
1085   1              PCON &= ~0x80;                
1086   1              SCON = 0x50;          //mode 1,ren=1              
1087   1              
1088   1              TMOD=0x21;            //timer 0 is 16 bit
1089   1              TH1   = BAUD_9600;
1090   1              TL1   = BAUD_9600;
1091   1              TR1   = 1;             
1092   1      
1093   1              TH0 = TH0_20ms;       //0x2800 time is 60ms
1094   1              TL0 = TL0_20ms;
1095   1              TR0 = 1;                 //timer 1 run
1096   1              ET0 = 1;    
1097   1              ET1 = 0;
1098   1              ES = 1;    
1099   1              EX0=1;
1100   1              IT0 = 1;        
1101   1          size=0;
1102   1          sec_num=block_num/4;     
1103   1              EA=1;  
1104   1              TX_RX=0;
1105   1      }
1106          
1107          void timer0_int(void) interrupt 1 using 2
1108          {
C51 COMPILER V7.08   MF_RC500                                                              01/18/2004 17:34:11 PAGE 19  

1109   1              TR0=0;
1110   1              TH0=TH0_20ms;
1111   1              TL0=TL0_20ms;
1112   1              if(com_tmr_rx)  com_tmr_rx--;
1113   1              TR0=1;     
1114   1      }
1115          
1116          void  watch_dog()
1117          {
1118   1           WDG=~WDG;
1119   1      }
1120          
1121          void  sound(uchar n)
1122          {
1123   1         uchar i,j;
1124   1         watch_dog();
1125   1         for(i=0;i<n;i++)
1126   1         {
1127   2           watch_dog();
1128   2            SPK=0;   /* enable sound */  
1129   2            /*  the 'OK' LED display */
1130   2                
1131   2            for(j=0;j<5;j++)
1132   2              { 
1133   3              GLED=0;
1134   3                      RLED=1;
1135   3              delay_10ms(8);              /*delay for 0.5s*/
1136   3              watch_dog();
1137   3              }
1138   2            SPK=1;   /* disable sound */
1139   2            for(j=0;j<5;j++)  
1140   2              {
1141   3                      GLED=1;
1142   3                      RLED=0;
1143   3              delay_10ms(8);  
1144   3              watch_dog();
1145   3              }              
1146   2         }                         
1147   1       
1148   1      }
1149          
1150          uchar exec_cmd(uchar cmd_code)
1151          {      
1152   1              uchar i;                
1153   1              switch(cmd_code)
1154   1              {
1155   2                      case CMD_READ_SN:               
1156   2                              for (i=0;i<5;i++)
1157   2                              {
1158   3                                      watch_dog();
1159   3                                      if (MF_Request(ALL, tt)!=0)             continue;                        
1160   3                                      if (MF_Conflict(0,card_snr)!=0)         continue;
1161   3                                      break;
1162   3                              }  
1163   2                              if (i==5)  return 0xff;                        //不成功   
1164   2                              send(cmd_code);                         
1165   2                              break;          
1166   2                      case CMD_READ_BLOCK:   
1167   2                              for (i=0;i<10;i++)
1168   2                              {
1169   3                                      watch_dog();                            
1170   3                                      if (MF_Request(ALL, tt)!=0)             continue;                        
C51 COMPILER V7.08   MF_RC500                                                              01/18/2004 17:34:11 PAGE 20  

1171   3                                      if (MF_Conflict(0,card_snr)!=0)         continue;
1172   3                                      if (MF_Select(card_snr,&size)!=0)       continue;
1173   3                                      if (MF_AuthKey(KEYA,card_snr,&datas[3],datas[2])!=0) continue;
1174   3                                      if (MF_ReadCard(datas[2], datas)!=0)   continue;  
1175   3                                      MF_Halt();
1176   3                                      break;
1177   3                              }
1178   2                              if (i==10)  return 0xff;                        
1179   2                              send(cmd_code);
1180   2                              break;                  
1181   2                      
1182   2                      case CMD_WRITE_BLOCK:    
1183   2                      case CMD_WRITE_PASSWD:   
1184   2                              for (i=0;i<5;i++)
1185   2                              {
1186   3                                      if (MF_Request(ALL, tt)!=0)             continue;                        
1187   3                                      if (MF_Conflict(0,card_snr)!=0)         continue;
1188   3                                      if (MF_Select(card_snr,&size)!=0)       continue;
1189   3                                      if (MF_AuthKey(KEYA,card_snr,&datas[3],datas[2])!=0) continue;                                                          
1190   3                                      if (MF_WriteCard(datas[2], &datas[15])!=0)   continue; 
1191   3                                      MF_Halt();
1192   3                                      break;  
1193   3                              }
1194   2                              if (i==5)  return 0xff;
1195   2                              send(cmd_code);
1196   2                              break;     
1197   2                      default: break;
1198   2              }    
1199   1          return 0;   
1200   1      }           
1201          
1202          void send(uchar cmd_code)
1203          {    
1204   1              uchar sum=0,i;  
1205   1              watch_dog();   
1206   1              
1207   1              switch(cmd_code)
1208   1              {
1209   2                      case CMD_READ_SN:     
1210   2                      {        
1211   3                              datas[0]='B';
1212   3                              datas[1]=5;
1213   3                              datas[2]=card_snr[0];
1214   3                              datas[3]=card_snr[1];
1215   3                              datas[4]=card_snr[2];
1216   3                              datas[5]=card_snr[3];
1217   3                              for (i=2,sum=0;i<6;i++)
1218   3                                      sum += datas[i];                         
1219   3                              datas[6]=sum;
1220   3                              com_t_index=0;
1221   3                              com_t_length=7;
1222   3                              TX_RX=1;
1223   3                              TI=1;
1224   3                              break;
1225   3                      }
1226   2      
1227   2                      case CMD_READ_BLOCK:   
1228   2                      {       
1229   3                              SPK=0;   
1230   3                              for (i=16,sum=0;i>0;i--)
1231   3                              {
1232   4                                      watch_dog();
C51 COMPILER V7.08   MF_RC500                                                              01/18/2004 17:34:11 PAGE 21  

1233   4                                      datas[i+1]=datas[i-1];
1234   4                                      sum += datas[i-1];
1235   4                              }            
1236   3                              datas[0]='B';
1237   3                              datas[1]=17;
1238   3                              datas[18]=sum%256;              
1239   3                              
1240   3                              com_t_index=0;
1241   3                              com_t_length=19;
1242   3                              TX_RX=1;
1243   3                              watch_dog();
1244   3                              TI=1;                           
1245   3                              break;
1246   3                      }
1247   2                      case CMD_WRITE_BLOCK:           
1248   2                      case CMD_WRITE_PASSWD:  
1249   2                      {
1250   3                              datas[0]='B';
1251   3                              datas[1]=1;
1252   3                              datas[2]='Y';
1253   3                              com_t_index=0;
1254   3                              com_t_length=3;
1255   3                              TX_RX=1;
1256   3                              TI=1;
1257   3                              break;
1258   3                      }         
1259   2                      default: break;
1260   2      
1261   2              }
1262   1              
1263   1      }
1264          
1265          
1266          void main(void)
1267          {       
1268   1         
1269   1          uchar i;
1270   1          uchar idata cs_sum;
1271   1              RLED=1;   
1272   1              GLED=1;
1273   1              WP=1;
1274   1              SPK=1;
1275   1              WDG = 0;
1276   1              WDG = 1;
1277   1              RC500CS=0;
1278   1              block_num=BLOCK_NUM_SET;
1279   1              sec_num=BLOCK_NUM_SET/4;     /*block_num/4;*/
1280   1              
1281   1              Sys_Init(); 
1282   1              
1283   1          watch_dog();
1284   1              MF_Config();
1285   1              SPK=0;
1286   1              delay_10ms(10);
1287   1              SPK=1;
1288   1         
1289   1          for (i=0;i<5;i++)  
1290   1                      datas[i]=0x10+i;
1291   1              com_t_index=0;
1292   1              com_t_length=5; 
1293   1              TI=1;
1294   1              while (1)
C51 COMPILER V7.08   MF_RC500                                                              01/18/2004 17:34:11 PAGE 22  

1295   1              {           
1296   2                      watch_dog();
1297   2                      if(com_r_busy&&!com_tmr_rx)
1298   2                      {       
1299   3                      com_r_busy=com_r_index=0;               
1300   3                      if (datas[1]==1&&datas[2]=='Y') 
1301   3                              cmd_code=CMD_READ_SN;
1302   3                      else if(datas[1]==14||datas[1]==30||datas[1]==26)
1303   3                              {
1304   4                              for(i=2,cs_sum=0;i<datas[1]+1;i++)
1305   4                                      cs_sum+=datas[i];       
1306   4                              if(datas[datas[1]+1]==cs_sum%256)                                       
1307   4                                      {
1308   5                                      if(datas[1]==14) cmd_code=CMD_READ_BLOCK;
1309   5                                      if(datas[1]==30) cmd_code=CMD_WRITE_BLOCK;
1310   5                                      if(datas[1]==26) cmd_code=CMD_WRITE_PASSWD;                                             
1311   5                                      }
1312   4                              else
1313   4                                      {
1314   5                                      cmd_code=0;
1315   5                                      sound(2);       
1316   5                                      }
1317   4                              }               
1318   3                      }                       
1319   2      
1320   2                  if (cmd_code)  
1321   2                      {
1322   3                      if (exec_cmd(cmd_code)==0)                              
1323   3                              sound(1);
1324   3                      cmd_code=0;
1325   3                      }  
1326   2              }
1327   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   4194    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     34      48
   IDATA SIZE       =     56      37
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -