📄 mf_rc500.lst
字号:
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 + -