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

📄 duxiexitongrc500.lst

📁 #include <stc12c2052AD.H>// 标准库的头文件 #include <intrins.h> #include <absacc.h> #d
💻 LST
📖 第 1 页 / 共 5 页
字号:
 568   3        }
 569   2      temp = ErrorFlag;
 570   2      // if((temp & 0x02)==0x02)
 571   2      // return(RC500_PARITYERR);
 572   2      // if((temp & 0x04)==0x04)
 573   2      // return(RC500_FRAMINGERR);
 574   2      temp=FIFO_Length;
 575   2      //sen(temp);
 576   2         if (temp==0)
 577   2         {
 578   3      //sen(0x30);
 579   3         return RC500_BYTECOUNTERR;//
 580   3         }
 581   2      Read_FIFO(buffer);//05
 582   2      Save_UID(row, col, temp); //将收到的UID放入UID数组中
 583   2      temp = ErrorFlag;         //判断接収数据是否出错
 584   2      temp = temp & 0x01;
 585   2        if(temp == 0x00)
 586   2        {
 587   3          temp = Check_UID(); //校验收到的UID
 588   3        if(temp == FALSE)
 589   3            {
 590   4      //sen(0x30);
 591   4            return(RC500_SERNRERR);
 592   4            }
 593   3        //sen(0x03);
 594   3        return(RC500_OK);
 595   3            }
 596   2      else
 597   2        {
 598   3      
 599   3      temp = CollPos; //读取冲突检测寄存器
 600   3      //sen(0x30);
 601   3      row = temp / 8;
 602   3      col = temp % 8;
 603   3      buffer[0] = RF_CMD_ANTICOL;
 604   3      Set_BitFraming(row + pre_row, col); //设置待发送数据的字节数
 605   3      pre_row = pre_row + row;
 606   3      for(i = 0; i < pre_row + 1; i++)
 607   3          {
 608   4         buffer[i + 2] = UID[i];
 609   4          }
 610   3         if(col != 0x00)
 611   3            {
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 11  

 612   4             row = pre_row + 1;
 613   4             }
 614   3         else
 615   3            {
 616   4            row = pre_row;
 617   4            }
 618   3           temp = Command_Send(row + 2, buffer, Transceive);
 619   3            }
 620   2         }
 621   1      }
 622          /****************************************************************/
 623          /*名称: powerdown */
 624          /*功能: 该函数实现RC500处于软件掉电模式  */
 625          /***************************************************************/
 626          /*uchar Powerdown(void)
 627          {  
 628           
 629            CRCPresetLSB=0x63;
 630            CWConductance=0x3f;
 631            ChannelRedundancy=0x03;
 632            MFOUTSelect=0x02;//调整输出功率以及电流消耗和操作距离.
 633            TxControl=0x50;//TX2/1上的输出信号能量载波
 634            Control=0x10;
 635            DelayMS(200);
 636             //Control=0x10;
 637            DelayMS(1000);
 638             //NCS = 1;//guanpianxuan
 639            CardStatus=0x01;
 640            return(CardStatus);
 641           
 642          
 643            }*/
 644          
 645          /****************************************************************/
 646          /*名称: MIF_Halt */
 647          /*功能: 该函数实现暂停MIFARE卡 */
 648          /*输出: RC500_OK: 应答正确 */
 649          /* RC500_PARITYERR: 奇偶校验错 */
 650          /* RC500_CRCERR: CRC校验错 */
 651          /* RC500_NOTAGERR: 无卡 */
 652          /****************************************************************/
 653          uchar MIF_Halt(void)
 654             { 
 655   1         uchar temp;
 656   1         uint i;
 657   1        CRCPresetLSB=0x63;
 658   1        CWConductance=0x3f;
 659   1        ChannelRedundancy=0x03;
 660   1        *buffer=RF_CMD_HALT;
 661   1        *(buffer+1)=0x00;
 662   1        temp=Command_Send(2,buffer,Transmit);
 663   1       if
 664   1          (temp==TRUE)
 665   1          { 
 666   2           for(i=0;i<0x50;i++)
 667   2             {
 668   3              _nop_();
 669   3             }        
 670   2                //sen(0x01);
 671   2            return RC500_OK;
 672   2                 }
 673   1               else
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 12  

 674   1               {
 675   2                  //sen(temp);
 676   2                      //sen(0x10);
 677   2              temp=ErrorFlag;
 678   2               if((temp&0x02)==0x02)
 679   2              { 
 680   3                 return RC500_PARITYERR;
 681   3                      }
 682   2                  if((temp&0x04)==0x04)
 683   2              {
 684   3               return RC500_FRAMINGERR;
 685   3                       }
 686   2                       return RC500_NOTAGERR;
 687   2               }
 688   1      }
 689          ////////////////////////////////////////////////////////
 690          uchar Select_Card(void)
 691          {  
 692   1         uchar temp,i;
 693   1         CRCPresetLSB=0x63;
 694   1         CWConductance=0x3f;
 695   1         buffer[0] =RF_CMD_SELECT;//0x93
 696   1         buffer[1]=0x70;
 697   1         for(i=0;i<5;i++)
 698   1         {
 699   2         buffer[i+2]=UID[i];
 700   2         //sen(buffer[i+2]);
 701   2          }
 702   1         //Bit_Frame=0x07;
 703   1         ChannelRedundancy=0x0f;//对发送数据进行CRC/接收帧的最后字节被解释为CRC 
 704   1      temp=Command_Send(7,buffer,Transceive);
 705   1          if(temp==FALSE)
 706   1          {
 707   2      //sen(0x40);
 708   2              return(RC500_NOTAGERR);
 709   2           }
 710   1      else
 711   1          {
 712   2              temp=ErrorFlag;
 713   2              //sen(ErrorFlag);//40
 714   2          if((temp&0x02)==0x02)
 715   2          //return(RC500_PARITYERR);//卡片奇偶校验错误
 716   2      
 717   2          if((temp&0x04)==0x04)
 718   2              //sen(RC500_FRAMINGERR);
 719   2          return (RC500_FRAMINGERR);//FM1715帧错误
 720   2          if((temp&0x08)==0x08)
 721   2          return (RC500_CRCERR);    //卡片CRC校验错误
 722   2              temp=FIFO_Length;
 723   2              //sen(FIFO_Length);
 724   2          if(temp!=1)
 725   2      return(RC500_BYTECOUNTERR);////从卡片接收到的字节数错误
 726   2           Read_FIFO(buffer);//01
 727   2           temp=*buffer;
 728   2           //sen(temp);   //08
 729   2      if((temp==0x08)||(temp==0x88)||(temp==0x53))
 730   2            { 
 731   3                //sen(0x04);
 732   3                return(RC500_OK);
 733   3                }
 734   2      else  {
 735   3      //sen(0x40);
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 13  

 736   3              return(RC500_SELERR);
 737   3              }
 738   2         }
 739   1      }
 740          //////////////////////////////////////////////////////
 741          uchar RC500_Bus_Sel(void)  //zhong线选择;通过
 742            {
 743   1               uchar i;
 744   1               Page_Sel=0x80;
 745   1               for(i=0;i<RF_TimeOUT;i++)
 746   1               {
 747   2                 if(Command ==0x00)
 748   2                  {
 749   3                      Page_Sel=0x00;
 750   3                    //for (j=0;j<5;j++)
 751   3                    //sen(tongxunceshixinxi[j]);
 752   3                      //sen(0x99);
 753   3                  return TRUE;
 754   3             }
 755   2            }
 756   1                 return FALSE;
 757   1               //for (j=0;j<5;j++)
 758   1               // sen(cuowufanhui[i]);
 759   1          }
 760          ////////////////////////////////////////////////////////////密码认证的过程
 761          uchar mimarenzhen(uchar idata *UID,uchar SecNR,uchar mode)
 762          {
 763   1      uchar idata i;
 764   1      uchar idata temp,temp1;
 765   1      CRCPresetLSB = 0x63;
 766   1      CWConductance = 0x3f;
 767   1      //ModConductance = 0x3f;
 768   1      temp1 = Control;
 769   1           //sen(temp1);  //00
 770   1      temp1 = temp1 & 0xf7;
 771   1      Control = temp1;
 772   1      CardStatus=0; 
 773   1      if (mode == 1)   
 774   1      buffer[0] = RF_CMD_AUTH_LB;
 775   1      else
 776   1      //sen(0x06);
 777   1      buffer[0] = RF_CMD_AUTH_LA;
 778   1      buffer[1] = SecNR * 4 + 3;//2008年4月26日改SECNR为块号原先为扇区号!                                      
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                  
 779   1      for (i = 0; i < 4; i++)
 780   1       {
 781   2      buffer[2 + i] = UID[i];
 782   2      /////sen(buffer[2 + i]);
 783   2      }
 784   1      ChannelRedundancy = 0x0f; //开启CRC,奇偶校验校验
 785   1      temp = Command_Send(6, buffer, Authent1);//验证命令认证过程第1步
 786   1      ////sen(temp);//01
 787   1      if (temp == FALSE)
 788   1      {//sen(0x60);
 789   2      CardStatus=0; 
 790   2      return RC500_NOTAGERR;
 791   2      }
 792   1      temp = ErrorFlag;
 793   1      //sen(ErrorFlag);//40//00
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 14  

 794   1      if ((temp & 0x02) == 0x02)
 795   1      return RC500_PARITYERR;//
 796   1      if((temp & 0x04) == 0x04)
 797   1      return RC500_FRAMINGERR;//
 798   1      if ((temp & 0x08) == 0x08)
 799   1      return RC500_CRCERR;
 800   1      //for (i = 0; i < 4; i++)
 801   1      // {
 802   1      //buffer[2 + i] = 0x00;}
 803   1      temp = Command_Send(0, buffer, Authent2); //验证命令认证过程第2步
 804   1      if(temp == FALSE)
 805   1      {CardStatus=0; 
 806   2      // P13=1;
 807   2       //P14=1;
 808   2      return RC500_NOTAGERR;
 809   2      }
 810   1      temp = ErrorFlag;
 811   1      //sen(ErrorFlag);//00
 812   1      if ((temp & 0x02) == 0x02)
 813   1      return RC500_PARITYERR;
 814   1      if((temp & 0x04) == 0x04)
 815   1      return RC500_FRAMINGERR;
 816   1      if ((temp & 0x08) == 0x08)
 817   1      return RC500_CRCERR;
 818   1      temp1 = Control;
 819   1      temp1 = temp1 & 0x08; //Crypto1on=1验证通过
 820   1      if (temp1 == 0x08)
 821   1      {
 822   2      CardStatus=0x01; 
 823   2      return RC500_OK;
 824   2      }
 825   1      CardStatus=0; 
 826   1      return RC500_AUTHERR;
 827   1      }
 828          /****************************************************************/
 829          /*名称: Load_keyE2 */
 830          /*功能: 该函数实现把修改后的密码存入FM1715的keybuffer中 */
 831          /*输入: Secnr: EE起始地址 */
 832          /*输出: True: 密钥装载成功 */
 833          /* False: 密钥装载失败 */
 834          /****************************************************************/
 835          /*uchar Load_keyE2_CPY(uchar Secnr,uchar Mode)
 836          {
 837          uchar temp;
 838          uchar msb = 0;
 839          uchar lsb = 0;
 840          temp = Secnr * 12;
 841          if (Mode == 0)
 842          {
 843          sen(temp);//84
 844            if (temp >= 0x80) //计算密码存放地址
 845              {
 846           lsb = temp - 0x80;//0x04
 847           msb = 0x01;
 848              }
 849          else
 850              {
 851          msb = 0x00;
 852          lsb = temp + 0x80;
 853              }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -