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

📄 main.lst

📁 射频卡读卡头的程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -