📄 main.lst
字号:
305 2 0x56: // Authentication2
306 2 0x57: // Decrement+Transfer
307 2 */
308 2 CommandNum = SerBuffer[0]; //命令码
309 2 SectorNum = SerBuffer[1]; //mifare1卡:扇区号
310 2 BlockNum = SerBuffer[2]; //mifare1卡:块号
311 2 memcpy(KeyData,&SerBuffer[3],6);//mifare1卡:块密码6字节
312 2 memcpy(CardData,&SerBuffer[3],16);//mifare1卡:待写的16字节数据
313 2
314 2 FrameOk = 0;
315 2 if(CommandNum == 0x4c)
316 2 {
317 3
318 3 SerBuffer[1] = 0x4c;
319 3 SerBuffer[MODE] = PICC_AUTHENT1A; //MODE = 3
320 3 SerBuffer[SECNR] = SectorNum; //SECNR = 4
321 3 memcpy(&SerBuffer[13],KeyData,6);
322 3 cmd_execution();
323 3 if(!ErrNum)
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 6
324 3 {
325 4 SerBuffer[3] = 0x0;
326 4 TransHexAsi(&SerBuffer[3],SendBuffer,1);
327 4 SendDataToPc(SendBuffer,2);
328 4 RingOn();
329 4 }
330 3
331 3 }
332 2
333 2 else
334 2 {
335 3 memcpy(SerBuffer,CmdData_1,7); //命令码:0x40 执行PICC_REQALL 返回卡型2字节
336 3
337 3 cmd_execution();
338 3
339 3 if(!ErrNum)
340 3 {
341 4
342 4 memcpy(SerBuffer,CmdData_2,8);
343 4
344 4 cmd_execution();//命令码:0x42: 执行 Anticoll 返回序列号
345 4
346 4 AccOk = FALSE ;
347 4
348 4 memcpy(card_snr,&SerBuffer[SERNR],4);
349 4 //--------------------------------------------------------------------------
350 4 // | 02 | 10 ASCII Data |Characters Checksum | CR | LF | 03 |
351 4 //--------------------------------------------------------------------------
352 4 SnrErr = CheckSnrNum();
353 4 if(SnrErr == 0)
354 4 {
355 5 if(SendCardSnrFlag == 1)
356 5 {
357 6 SendSnrNum(); //发送序列号:02+10字节(0xff+0x + + + + )+checksum(2字节)+0d + 0a + 03
358 6 SendCardSnrFlag = 0;
359 6 FlashLED();
360 6 }
361 5
362 5 }
363 4 /*
364 4 if(!ErrNum)
365 4 {
366 4 SerBuffer[1] = 0x43;
367 4
368 4 cmd_execution();// 命令码: 0x43: 选择卡片 返回卡片的 SIZE 字节 0x88h
369 4
370 4 AccOk = FALSE ;
371 4
372 4 SerBuffer[1] = 0x44;
373 4 SerBuffer[2] = BlockNum;
374 4
375 4 SerBuffer[3] = 0 ;
376 4
377 4 SerBuffer[4] = SectorNum; //卡扇区号(0-15):= 2(含块8,9,10)
378 4
379 4 cmd_execution();//命令码:0x44: 密码认证操作
380 4
381 4 if(!ErrNum)
382 4 {
383 4 if(AuthOk == 0)
384 4 {
385 4 switch (CommandNum)
386 4 {
387 4 case 0x46:
388 4 SerBuffer[1] = 0x46; //读卡命令
389 4 SerBuffer[3] = BlockNum ; //卡块号(0-63): =8(8,9,10)
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 7
390 4 cmd_execution();
391 4 TransHexAsi(&SerBuffer[3],SendBuffer,16);
392 4 SendDataToPc(SendBuffer,32);
393 4 break;
394 4
395 4 case 0x47:
396 4 SerBuffer[1] = 0x47; //写卡命令
397 4 SerBuffer[3] = BlockNum ; //卡块号
398 4
399 4 memcpy(&SerBuffer[4],CardData,16);// 16字节 写卡数据
400 4
401 4 cmd_execution();
402 4 if(!ErrNum)
403 4 {
404 4 SerBuffer[3] = 0x0;
405 4 TransHexAsi(&SerBuffer[3],SendBuffer,1);
406 4 SendDataToPc(SendBuffer,2);
407 4 RingOn();
408 4 }
409 4 break;
410 4
411 4 default:
412 4 break;
413 4
414 4 }
415 4
416 4 }
417 4
418 4 }
419 4
420 4 }
421 4
422 4 */
423 4
424 4 }
425 3
426 3 }
427 2
428 2 // delay_10ms(50);
429 2
430 2
431 2 if(ErrNum)
432 2 {
433 3 delay_10ms(5);
434 3 /*
435 3 SerBuffer[3] = ErrNum ;
436 3 TransHexAsi(&SerBuffer[3],SendBuffer,1);
437 3 SendDataToPc(SendBuffer,2);
438 3 */
439 3 }
440 2
441 2 }
442 1
443 1 }
444
445 /****************************************************************************
446 * *
447 * Function: init *
448 * *
449 * Input: - *
450 * Output: - *
451 * *
452 * Description: *
453 * *
454 * *
455 ****************************************************************************/
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 8
456
457 void init (void)
458 {
459 1
460 1 AuthOk = 0xff;
461 1
462 1 AccOk = FALSE;
463 1 //EnOnChipSram(); // Enable w77e58 on chip 1k sram
464 1
465 1 #ifdef w77e58
DME0 = TRUE;
PMR = 0x41;
EIE = 0x0;
#endif
470 1
471 1
472 1 #ifdef sm8958
//OME = 1 : 768片上字节使能位;
//ALE1 = 0 : ALEALE输出使能; ALE1 = 1 : ALE输出禁止,可降低EMI;
SCONF = 0x02; //00000010b
//解锁WDTC
WDTKEY = 0x1e;
WDTKEY = 0xe1;
//WDTE: 看门狗定时器使能,启动看门狗计数器
//PS2~PS0: 时钟源分频选择512
WDTC = 0x87;//0x86; //10000110b
//保护WDTC
WDTKEY = 0xe1;
WDTKEY = 0x1e;
#endif
488 1
489 1 #ifdef sst89e554
490 1 AUXR = 0;
491 1 WDTC = 0x0a;
492 1 WDTD = 0x80; //4s
493 1 #endif
494 1
495 1 LED = ON;
496 1 BEEP = BeepOn;
497 1 BEEP = BeepOff;
498 1 RC500RST = FALSE;
499 1 //RC500_CS = TRUE; // Enable the CS for RC500
500 1
501 1 CmdReceived = FALSE;
502 1 CmdValid = FALSE;
503 1 Quit = FALSE;
504 1 LLfReady = TRUE;
505 1 SendReady = TRUE;
506 1 Idle = TRUE;
507 1
508 1 RepCnt = 0;
509 1
510 1 RecvState = RECV_STX;
511 1
512 1 EnableTransferCmd = FALSE;
513 1
514 1 CheckByteCnt = BCC_CHECKBYTECNT;
515 1
516 1 #ifdef AUTODELAY
517 1 DelayRate = 0;
518 1 DelayRateLocked = TRUE;
519 1 #endif
520 1
521 1 FrameEnd = 0;
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 9
522 1 FrameHead = 0;
523 1 FrameOk = 0;
524 1 DataNum = 0;
525 1 ChkSum = 0;
526 1
527 1 PCON = 0x00; // SMOD = 1;
528 1 SCON = 0x50; // Mode 1, 8-bit UART, enable receiption
529 1
530 1 // EIE = 0x0 ;
531 1 // AutoBaud = TRUE;
532 1 TMOD = 0x20; // Timer 1, mode 2, 8-bit auto reload,
533 1 // Timer 0, mode 0, 13-bit counter
534 1 Capt_L = 0;
535 1 Capt_H = 0;
536 1
537 1 TH1 = 0xfd ;
538 1 TL1 = 0xfd ;
539 1
540 1 ES = 1 ;
541 1 TR1 = 1;
542 1
543 1 // LED = 0;
544 1 // delay_10ms(10);
545 1 // LED = 1;
546 1
547 1
548 1 PX1 = 1;
549 1 IT1 = 1; // Config ext1 as edge trigger for RC500
550 1 EX1 = 1; // Enable ext1 interrupt for RC500
551 1 RC500RST = TRUE;
552 1 EA = TRUE; // Enable all interrupts
553 1 OpenIO();
554 1 }
555
556
557 /****************************************************************************
558 * *
559 * Function: cmd_execution *
560 * *
561 * Input: SerBuffer[] *
562 * Output: SerBuffer[] *
563 * *
564 * Description: *
565 * *
566 * *
567 ****************************************************************************/
568
569 void cmd_execution (void)
570 {
571 1 uchar xdata Status;
572 1 uchar xdata len;
573 1 uchar xdata cmd;
574 1 uchar xdata adr;
575 1 uchar xdata tmp[16];
576 1 //uchar xdata snr[4];
577 1 uchar xdata size;
578 1 uchar xdata tt[2];
579 1 static uchar xdata mode,value[4],addr;
580 1 Temp = SerBuffer;
581 1
582 1 cmd = SerBuffer[COMMAND]; //COMMAND == 1
583 1
584 1 switch (cmd)
585 1 {
586 2 case 0x40: //PICC_REQALL
587 2
C51 COMPILER V4.01, MAIN 29/08/06 08:02:00 PAGE 10
588 2 Status = M500PiccRequest(PICC_REQALL, tt); //Get Picc tt[]: Tagtype 2 Byte
589 2 ErrNum = Status;
590 2 if (Status != MI_OK)
591 2 {
592 3 AccOk = 0;
593 3
594 3 }
595 2 else
596 2 {
597 3 // RingOn();
598 3 AccOk = 1;
599 3 }
600 2 ErrNum = Status;
601 2 break;
602 2
603 2
604 2
605 2 case 0x41: // Request
606 2
607 2 if(SerBuffer[MODE]&0X01) SerBuffer[MODE]=PICC_REQALL; // ALL
608 2 else SerBuffer[MODE]=PICC_REQSTD; // IDLE
609 2
610 2 Status = M500PiccRequest(SerBuffer[MODE], &SerBuffer[TAGTYPE]);
611 2
612 2 if (Status == MI_OK)
613 2 {
614 3 SerBuffer[LENGTH] = 2;
615 3 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -