📄 duxiexitongrc500.lst
字号:
1142 1 //P14=1;
1143 1 CardStatus=0x01;
1144 1 return RC500_OK;
1145 1 }
1146 /////////////////////////////////////////
1147
1148 /****************************************************************/
1149 /*名称: HL_Write */
1150 /*功能: 该函数实现高级写命令 */
1151 /*输入: buff: 待写入数据的首地址 */
1152 /* Secnr: 扇区号 */
1153 /* Block_Adr: 块地址 */
1154 /*输出:操作状态码 */
1155 /****************************************************************/
1156 /*uchar HL_Write(uchar idata *buff,uchar Block_Adr,uchar Mode)// 写卡
1157 {
1158 uchar temp; ///
1159 CardStatus=0;
1160 temp = HL_Active(Block_Adr, Mode);
1161 if(temp != RC500_OK)
1162 {CardStatus=0;
1163 return temp;
1164 }
1165
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 20
1166 temp = MIF_Write(buff,Block_Adr);
1167 if(temp != RC500_OK)
1168 {CardStatus=0;
1169 return temp;
1170 }
1171 CardStatus=0x01;
1172 return RC500_OK;
1173 }
1174
1175 */
1176
1177 /*--------------------------------------------------------------------
1178 FUNCTION: TurnOff_Card,关卡
1179 INPUT:
1180 OUTPUT: CardStatus
1181 --------------------------------------------------------------------*/
1182 void TurnOff_Card(void)
1183 {
1184 1 uchar temp;
1185 1 CardStatus=0;
1186 1 temp = MIF_Halt();
1187 1 if(temp != RC500_OK)
1188 1 {
1189 2 CardStatus=0;
1190 2 }
1191 1 else{
1192 2 CardStatus=0x01;
1193 2 }
1194 1 }
1195 /************************************************
1196 一、 通讯测试,测试单片机与模块通讯是否正常
1197 ************************************************/
1198 void Commu_test(void)
1199 { uchar temp ;
1200 1 uint i;
1201 1 //uchar Block_Adr=4;
1202 1 CardStatus=0;
1203 1 NCS = FALSE;
1204 1 MFRST=1;
1205 1 for (i=0;i<0x1fff; i++)
1206 1 {
1207 2 _nop_();
1208 2 }
1209 1 MFRST=0;
1210 1 for(i=0;i<0x1fff;i++)
1211 1 {
1212 2 _nop_();
1213 2 }
1214 1 while(Command!=0);
1215 1 RC500_Bus_Sel();
1216 1 TimerClock=0x0b;
1217 1 TimerControl=0x02;
1218 1 TimerReload=0x42;
1219 1 InterruptEn=0x7f;
1220 1 temp=InterruptEn;
1221 1 Int_Req=0x7f;
1222 1 MFOUTSelect=0x02;//调整输出功率以及电流消耗和操作距离.
1223 1 TxControl=0x5b;//TX2/1上的输出信号将传递由发送数据调制的13.56MHz能量载波
1224 1 CardStatus=0x01;
1225 1 }
1226 /************************************************
1227 一、
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 21
1228 寻卡请求
1229 ************************************************/
1230 uchar xunka(void)
1231 { uchar temp;
1232 1 CardStatus=0;
1233 1 MIF_Halt(); //暂停MIFARE卡71 01
1234 1 temp = Request(RF_CMD_REQUEST_ALL);//监测ALL的卡片请求
1235 1 if(temp != RC500_OK)
1236 1 {
1237 2 CardStatus=0;
1238 2 return(RC500_REQERR);
1239 2 //for(i=0;i<6;i++)
1240 2 //sen(cuowufanhui[i]);
1241 2 }
1242 1 temp = AntiColl();
1243 1
1244 1 //卡片的防冲突检测读出卡号
1245 1 if(temp != RC500_OK)
1246 1 {CardStatus=0;
1247 2 return(RC500_ANTICOLLERR);
1248 2 }
1249 1 else{ CardStatus=0x01;
1250 2 }
1251 1 }
1252 /////////////////////////////////////////
1253 uchar xiamima(uchar Secnr,uchar Mode)
1254 {
1255 1 uchar temp;
1256 1 CardStatus=0;
1257 1 xunka();//2
1258 1 temp = Select_Card(); //71 40 01
1259 1 if(temp != RC500_OK)
1260 1 {
1261 2 CardStatus=0;
1262 2 return(RC500_SELERR);
1263 2 }
1264 1 Load_keyE2_CPY((Secnr%16), Mode); //LoadKey
1265 1 if(CardStatus)
1266 1 {
1267 2 CardStatus=0x01;
1268 2 }
1269 1 else{
1270 2 CardStatus=0;
1271 2 return(RC500_SELERR);
1272 2 }
1273 1 }
1274 ////////////////////////////////////////////////////////
1275 uchar mimarenzheng(uchar idata *UID,uchar Secnr,uchar mode)
1276 { uchar temp;
1277 1 CardStatus=0;
1278 1 temp=mimarenzhen(UID, Secnr, mode);
1279 1 if(temp != RC500_OK)
1280 1 {
1281 2 CardStatus=0;
1282 2 return(RC500_SELERR);
1283 2 }
1284 1 else{ CardStatus=0x01;
1285 2 }
1286 1
1287 1 }
1288
1289 ///////////////////////////////////////////
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 22
1290 uchar xiangsheng(void)
1291 {
1292 1 uchar j;
1293 1 DelayMS(100);
1294 1 P14=0;
1295 1 DelayMS(1000); //控制小喇叭
1296 1 P14=1;
1297 1 for (j=0;j<6;j++)
1298 1 sen(gonggongxinxi[j]);
1299 1 return(CardStatus);
1300 1 }
1301 //////////////////////////////////////////////////////////////////////////////////////////
1302 void main(void)
1303 {
1304 1 uchar i,j;
1305 1 uchar shuju[30];
1306 1 //uchar CardDataBuf[16];
1307 1 PCON = 0x00; //波特率控制,SMOD=0
1308 1 TMOD = 0x20; // //定时器1定时方式2
1309 1 TH1 = 0xfa; //9600Baud,
1310 1 TL1 = 0xfa;
1311 1 SCON = 0x50; //串口方式 1,8bit UART ,SM2=0,REN=1
1312 1 TI = 0; //发送中断标志位置零
1313 1 RI = 0; //接收中断标志位置零
1314 1 TR1 = 1;//启动定时器
1315 1 //TL1=0xFA;
1316 1 //TH1 = 0xFA;
1317 1 //TL0=0xff;
1318 1 //TH0=0x00;
1319 1 //TMOD=0x21;
1320 1 //SCON = 0x50; // 串口工作方式1,允许接收
1321 1 //PCON = 0x80;
1322 1 //REN = 1;
1323 1 //TI = 0; //发送中断标志位置零
1324 1 ///RI = 0; //接收中断标志位置零
1325 1 //TR1 = 1;
1326 1 //TR0=1;
1327 1 NCS = FALSE;
1328 1 P14=1;
1329 1 ET0=1;
1330 1 ES=0;
1331 1 EA = 1;
1332 1 while(1)
1333 1 {
1334 2 RI=0;
1335 2 //Commu_test();
1336 2 start:
1337 2 for (i=0;i<30;i++) //循环次数超过最大数据长度
1338 2 {
1339 3 //RI=0;
1340 3 while(!RI); //当没有串口信息时等待
1341 3 shuju[i]=SBUF; //启动速度初值
1342 3 if (shuju[i]==0x81) i--; //高手标志
1343 3 RI=0;
1344 3
1345 3 //判断接收的数据,根据不同情况进行不同处理
1346 3 //如果开头不是0x3c就返回重新接收数据
1347 3 if (shuju[0]!=0x3c)goto start;
1348 3
1349 3 // sen(i);
1350 3 //如果第二个字节不是合法字符就返回重新接收数据
1351 3 if ( (i==1) && ( shuju[1]!=0x04 && shuju[1]!=0x08 && shuju[1]!=0x0a && shuju[1]!=0x13 && shuju[1]!
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 23
-=0x03 )) {goto start;};
1352 3 //根据第三个字节进行不同的处理
1353 3 if( (i>=1) && (shuju[1]==0x04 ))
1354 3 {
1355 4 //如果第3位不是0x01 就返回重新接收数据
1356 4 if ( (i==2) && (shuju[2]!=0x00 && shuju[2]!=0x01 )) goto start;
1357 4 //如果第3位是0x00 就进行通讯测试,问RC500工作正常吗?
1358 4 if ( (i>=2) &&(shuju[2]==0x00) )
1359 4 {
1360 5 //如果数据指令正确则进行通讯测试,否则重新接收数据
1361 5 if ( (i==7) && ((shuju[3]==0x60) && (shuju[4]==0x00) && (shuju[5]==0x00) && (shuju[7]==0x0d)))
1362 5 {
1363 6 //通讯测试返回信息
1364 6 Commu_test();//1
1365 6 for (j=0;j<5;j++)
1366 6 sen(tongxunceshixinxi[j]);
1367 6 goto start;
1368 6 //goto tongxunceshi;
1369 6 }
1370 5 else if (i==7)
1371 5 {sen(0x22); goto start;};
1372 5
1373 5
1374 5 };
1375 4 //如果第3位是0x01 就寻卡、关闭卡片或者读卡操作
1376 4 if ( (i>=2) &&(shuju[2]==0x01) )
1377 4 {
1378 5 if ( (i==3) && ((shuju[3]!=0x70) && (shuju[3]!=0x66) && (shuju[3]!=0x68))) goto start;
1379 5 //寻卡
1380 5 if ( (i>=3) &&(shuju[3]==0x70))
1381 5 {
1382 6 //如果数据指令正确则进行寻卡操作,否则重新接收数据
1383 6 if ( (i==7) && ( (shuju[5]==0x00) && (shuju[7]==0x0d)))
1384 6 { Commu_test();
1385 7 xunka();//2
1386 7 if (CardStatus)
1387 7 { // for (j=0;j<9;j++)
1388 8 //sen(xunkaxinxi[j]);
1389 8 sendata[0]=0x3C;
1390 8 sendata[1]=0x05;
1391 8 sendata[2]=UID[0];
1392 8 sendata[3]=UID[1];
1393 8 sendata[4]=UID[2];
1394 8 sendata[5]=UID[3];
1395 8 sendata[6]=0x00;
1396 8 sendata[7]=0;
1397 8 for(j=0;j<6;j++) sendata[7]^=sendata[j];
1398 8 sendata[8]=0x0d;
1399 8 for(j=0;j<9;j++)
1400 8 sen(sendata[j]);
1401 8 //DelayMS(10);
1402 8 //P14=0;
1403 8 //DelayMS(1000); //控制小喇叭
1404 8 //P14=1;
1405 8 //DelayMS(10);
1406 8 //P14=0;
1407 8 //DelayMS(1000); //控制小喇叭
1408 8 //P14=1;
1409 8 goto start;
1410 8
1411 8 }
1412 7 else
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 24
1413 7 for(j=0;j<5;j++)
1414 7 sen(cuowufanhui[j]);
1415 7
1416 7 goto start;
1417 7 //for (j=0;j<9;j++)
1418 7 //sen(xunkaxinxi[j]);
1419 7 //goto xunka;
1420 7 // goto start;
1421 7 }
1422 6 else if (i==7)
1423 6 { goto start;};
1424 6 };
1425 5 //读卡
1426 5 if ( (i>=3) &&(shuju[3]==0x66))
1427 5 { //if ( (i==4) && (shuju[4]!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -