📄 m500auc.lst
字号:
#else
1133 1 while (_10ms--)
1134 1 {
1135 2 delay_50us(19);
1136 2 if (CmdValid)
1137 2 return;
1138 2 delay_50us(20);
1139 2 if (CmdValid)
1140 2 return;
1141 2 delay_50us(20);
1142 2 if (CmdValid)
1143 2 return;
1144 2 delay_50us(20);
1145 2 if (CmdValid)
1146 2 return;
1147 2 delay_50us(20);
1148 2 if (CmdValid )
1149 2 return;
1150 2 delay_50us(20);
1151 2 if (CmdValid)
1152 2 return;
1153 2 delay_50us(20);
1154 2 if (CmdValid)
1155 2 return;
1156 2 delay_50us(20);
1157 2 if (CmdValid)
1158 2 return;
1159 2 delay_50us(20);
1160 2 if (CmdValid)
1161 2 return;
1162 2 delay_50us(19);
1163 2 if (CmdValid)
1164 2 return;
1165 2 }
1166 1 #endif
1167 1 }
1168 ///////////////////////////////////////////////////////////////////////
1169 ///////////////////////////////////////////////////////////////////////
1170 void RC500ISR (void) interrupt 0 using 1
1171 {
C51 COMPILER V6.02 M500AUC 02/09/2006 13:25:02 PAGE 20
1172 1 static unsigned char idata irqBits;
1173 1 static unsigned char idata irqMask;
1174 1 static unsigned char idata nbytes;
1175 1 static unsigned char idata cnt;
1176 1
1177 1 IE0 = 0;
1178 1 WriteRawIO(0,0x80);
1179 1 if (MpIsrInfo && MpIsrOut)
1180 1 {
1181 2 while( ReadRawIO(RegPrimaryStatus) & 0x08)
1182 2 {
1183 3 irqMask = ReadRawIO(RegInterruptEn);
1184 3 irqBits = ReadRawIO(RegInterruptRq) & irqMask;
1185 3 MpIsrInfo->irqSource |= irqBits;
1186 3 if (irqBits & 0x01)
1187 3 {
1188 4 nbytes = 64 - ReadRawIO(RegFIFOLength);
1189 4 if ((MpIsrInfo->nBytesToSend - MpIsrInfo->nBytesSent) <= nbytes)
1190 4 {
1191 5 nbytes = MpIsrInfo->nBytesToSend - MpIsrInfo->nBytesSent;
1192 5 WriteRawIO(RegInterruptEn,0x01);
1193 5 }
1194 4 for ( cnt = 0;cnt < nbytes;cnt++)
1195 4 {
1196 5 WriteRawIO(RegFIFOData,MpIsrOut[MpIsrInfo->nBytesSent]);
1197 5 MpIsrInfo->nBytesSent++;
1198 5 }
1199 4 WriteRawIO(RegInterruptRq,0x01);
1200 4 }
1201 3 if (irqBits & 0x10)
1202 3 {
1203 4 WriteRawIO(RegInterruptRq,0x10);
1204 4 WriteRawIO(RegInterruptEn,0x82);
1205 4 if (MpIsrInfo->cmd == PICC_ANTICOLL1)
1206 4 {
1207 5 WriteIO(RegChannelRedundancy,0x02);
1208 5 WriteRawIO(0,0x80);
1209 5 }
1210 4 }
1211 3 if (irqBits & 0x0E)
1212 3 {
1213 4 nbytes = ReadRawIO(RegFIFOLength);
1214 4 for ( cnt = 0; cnt < nbytes; cnt++)
1215 4 {
1216 5 MpIsrOut[MpIsrInfo->nBytesReceived] = ReadRawIO(RegFIFOData);
1217 5 MpIsrInfo->nBytesReceived++;
1218 5 }
1219 4 WriteRawIO(RegInterruptRq,0x0A & irqBits);
1220 4 }
1221 3 if (irqBits & 0x04)
1222 3 {
1223 4 WriteRawIO(RegInterruptEn,0x20);
1224 4 WriteRawIO(RegInterruptRq,0x20);
1225 4 irqBits &= ~0x20;
1226 4 MpIsrInfo->irqSource &= ~0x20;
1227 4 WriteRawIO(RegInterruptRq,0x04);
1228 4 }
1229 3 if (irqBits & 0x20)
1230 3 {
1231 4 WriteRawIO(RegInterruptRq,0x20);
1232 4 MpIsrInfo->status = MI_NOTAGERR;
1233 4 }
C51 COMPILER V6.02 M500AUC 02/09/2006 13:25:02 PAGE 21
1234 3 }
1235 2 }
1236 1 }
1237 ///////////////////////////////////////////////////////////////////////
1238 // MF RC500 Config
1239 ///////////////////////////////////////////////////////////////////////
1240 char MfConfig(void)
1241 {
1242 1 char status=MI_OK;
1243 1
1244 1 M500PcdConfig();
1245 1 M500PcdMfOutSelect(2);
1246 1 return status;
1247 1 }
1248
1249 ///////////////////////////////////////////////////////////////////////
1250 // 系统初始化
1251 ///////////////////////////////////////////////////////////////////////
1252 void init(void)
1253 {
1254 1 RC500RST=0;
1255 1 ET2 = 0;
1256 1 T2CON = 0x04;
1257 1 //PCON = 0x80;
1258 1 PCON = 0x80; //SMOD = 0,不加速串口
1259 1 IP = 0x10; //定义串口为最高优先级
1260 1 SCON = 0x50; //多机模式,串口模式3
1261 1 TMOD = 0x21; //TMOD = 0x22;
1262 1
1263 1 TH1 = 0xFD;
1264 1 TL1 = 0xFD;
1265 1 //TH1 = 0xF3; // 波特率设为2400
1266 1 //TL1 = 0xF3;
1267 1 TR1 = TRUE; // 波特率发生器
1268 1 SM2 = 1;
1269 1
1270 1 //TH0 = 0x60;
1271 1 //TL0 = 0x60;
1272 1 TH0 = 0xB1;
1273 1 TL0 = 0xE0;
1274 1 TR0 = TRUE;
1275 1
1276 1
1277 1 SPEAKER = 0;
1278 1 RLED = FALSE;
1279 1 GLED = FALSE;
1280 1
1281 1 ET0=1;
1282 1 ET1=0;
1283 1 EA=1;
1284 1 EX0=1;
1285 1 IT0 = 1;
1286 1 TR2=0;
1287 1 ES = TRUE;
1288 1 CmdValid=0;
1289 1
1290 1 RECEIVE = 0;
1291 1 isSelect = FALSE;
1292 1 haveRead = TRUE;
1293 1
1294 1 //RLED=0;
1295 1
C51 COMPILER V6.02 M500AUC 02/09/2006 13:25:02 PAGE 22
1296 1 //delay_10ms(30);
1297 1 //RLED=1;
1298 1 //delay_10ms(30);
1299 1 //RLED=0;
1300 1
1301 1 MfConfig();
1302 1 SM2 = 1;
1303 1 }
1304
1305 ///////////////////////////////////////////////////////////////////////
1306 // IC卡处理函数
1307 ///////////////////////////////////////////////////////////////////////
1308 void cmd_execution(void)
1309 {
1310 1 //unsigned char cmd;
1311 1 unsigned char checksum = 0;
1312 1 unsigned char status;
1313 1
1314 1 switch(cmd)
1315 1 {
1316 2 case 1: // 读卡信息
1317 2 if(!haveRead && cardtype == mifare1) // 正确读取卡号
1318 2 {
1319 3 SerBuffer[0] = SLAVEADDR; // 从机地址
1320 3 SerBuffer[1] = 6; // 返回字节数
1321 3 SerBuffer[2] = 1;
1322 3 memcpy(&SerBuffer[3], &CardInfoBuffer[2], 4); // 卡序列号
1323 3 checksum = checksum ^ SerBuffer[0];
1324 3 checksum = checksum ^ SerBuffer[1];
1325 3 checksum = checksum ^ SerBuffer[2];
1326 3 checksum = checksum ^ SerBuffer[3];
1327 3 checksum = checksum ^ SerBuffer[4];
1328 3 checksum = checksum ^ SerBuffer[5];
1329 3 checksum = checksum ^ SerBuffer[6];
1330 3 SerBuffer[7] = checksum; // 异或校验和
1331 3 RLED = FALSE;
1332 3 haveRead = TRUE;
1333 3 }
1334 2 else // 没有卡号或者卡类型不正确
1335 2 {
1336 3 SerBuffer[0] = SLAVEADDR;
1337 3 SerBuffer[1] = 3;
1338 3 SerBuffer[2] = 1;
1339 3 SerBuffer[3] = 0;
1340 3 checksum = checksum ^ SerBuffer[0];
1341 3 checksum = checksum ^ SerBuffer[1];
1342 3 checksum = checksum ^ SerBuffer[2];
1343 3 checksum = checksum ^ SerBuffer[3];
1344 3 SerBuffer[4] = checksum;
1345 3 }
1346 2 break;
1347 2 case 2: // 蜂鸣器
1348 2
1349 2 SerBuffer[0] = SLAVEADDR;
1350 2 SerBuffer[1] = 3;
1351 2 SerBuffer[2] = 2;
1352 2 SerBuffer[3] = 1;
1353 2 checksum = checksum ^ SerBuffer[0];
1354 2 checksum = checksum ^ SerBuffer[1];
1355 2 checksum = checksum ^ SerBuffer[2];
1356 2 checksum = checksum ^ SerBuffer[3];
1357 2 SerBuffer[4] = checksum;
C51 COMPILER V6.02 M500AUC 02/09/2006 13:25:02 PAGE 23
1358 2 break;
1359 2 case 3: // 绿灯开、关
1360 2 if( RevBuffer[1] == 0)
1361 2 {
1362 3 GLED = FALSE;
1363 3 SerBuffer[0] = SLAVEADDR;
1364 3 SerBuffer[1] = 3;
1365 3 SerBuffer[2] = 3;
1366 3 SerBuffer[3] = 1;
1367 3 checksum = checksum ^ SerBuffer[0];
1368 3 checksum = checksum ^ SerBuffer[1];
1369 3 checksum = checksum ^ SerBuffer[2];
1370 3 checksum = checksum ^ SerBuffer[3];
1371 3 SerBuffer[4] = checksum;
1372 3 }
1373 2 else if( RevBuffer[1] == 1)
1374 2 {
1375 3 GLED = TRUE;
1376 3 SerBuffer[0] = SLAVEADDR;
1377 3 SerBuffer[1] = 3;
1378 3 SerBuffer[2] = 3;
1379 3 SerBuffer[3] = 1;
1380 3 checksum = checksum ^ SerBuffer[0];
1381 3 checksum = checksum ^ SerBuffer[1];
1382 3 checksum = checksum ^ SerBuffer[2];
1383 3 checksum = checksum ^ SerBuffer[3];
1384 3 SerBuffer[4] = checksum;
1385 3 }
1386 2 else
1387 2 {
1388 3 SerBuffer[0] = SLAVEADDR;
1389 3 SerBuffer[1] = 3;
1390 3 SerBuffer[2] = 3;
1391 3 SerBuffer[3] = 0;
1392 3 checksum = checksum ^ SerBuffer[0];
1393 3 checksum = checksum ^ SerBuffer[1];
1394 3 checksum = checksum ^ SerBuffer[2];
1395 3 checksum = checksum ^ SerBuffer[3];
1396 3 SerBuffer[4] = checksum;
1397 3 }
1398 2 break;
1399 2 case 4: // 灯闪烁
1400 2 SerBuffer[0] = SLAVEADDR;
1401 2 SerBuffer[1] = 3;
1402 2 SerBuffer[2] = 4;
1403 2 SerBuffer[3] = 1;
1404 2 checksum = checksum ^ SerBuffer[0];
1405 2 checksum = checksum ^ SerBuffer[1];
1406 2 checksum = checksum ^ SerBuffer[2];
1407 2 checksum = checksum ^ SerBuffer[3];
1408 2 SerBuffer[4] = checksum;
1409 2 break;
1410 2 case 5: // 重启状态
1411 2 SerBuffer[0] = SLAVEADDR;
1412 2 SerBuffer[1] = 3;
1413 2 SerBuffer[2] = 5;
1414 2 SerBuffer[3] = 1;
1415 2 checksum = checksum ^ SerBuffer[0];
1416 2 checksum = checksum ^ S
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -