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

📄 duxiexitongrc500.lst

📁 #include <stc12c2052AD.H>// 标准库的头文件 #include <intrins.h> #include <absacc.h> #d
💻 LST
📖 第 1 页 / 共 5 页
字号:
 854           }
 855          else
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 15  

 856           {
 857          msb = 0x01;
 858          lsb = temp + 0x40;//0x80
 859          }
 860          buffer[0] = lsb;
 861          buffer[1] = msb;
 862          temp =Command_Send(2, buffer, LoadKeyE2);
 863          
 864          temp = ErrorFlag & 0x40;
 865          if (temp == 0x40)
 866          {
 867          return FALSE;
 868          }
 869          return TRUE;
 870          }*/
 871          
 872          uchar Load_keyE2_CPY(uchar Secnr,uchar Mode)
 873          {
 874   1      uchar temp;
 875   1      uint i;
 876   1      uchar msb = 0;
 877   1      uchar lsb = 0;
 878   1      CardStatus=0; 
 879   1      //sen(0x05);
 880   1      //sen(Secnr);//06
 881   1      temp = Secnr * 12;//
 882   1      //sen(temp);
 883   1      if (Mode == 0)
 884   1      {
 885   2        if (temp >= 0x80) //计算密码存放地址
 886   2           {
 887   3            lsb = temp - 0x80;
 888   3            msb = 0x01;
 889   3            }
 890   2          else
 891   2            {
 892   3            msb = 0x00;
 893   3            lsb = temp + 0x80;
 894   3           }
 895   2        }
 896   1        else
 897   1         {
 898   2          msb = 0x01;
 899   2          lsb = temp + 0x40;
 900   2        }
 901   1        for(i=0;i<4;i++) //要装入的密钥可根据你所改的密码填写
 902   1      
 903   1      //{buffer[i]=0x0f;}
 904   1      //buffer[4]=0xe1;
 905   1      //buffer[5]=0xd2;
 906   1      //for(i=6;i<12;i++)
 907   1      //{buffer[i]=0x0f;}
 908   1      for(i=0;i<12;i++)
 909   1      {buffer[i]=0x0f;}
 910   1      
 911   1      temp =Command_Send(12, buffer, LoadKey);//此处已修改用LoadKey命令
 912   1      temp = ErrorFlag & 0x40;
 913   1      if (temp == 0x40)
 914   1      {
 915   2        return FALSE;
 916   2      }
 917   1      temp= RC500_OK;
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 16  

 918   1      CardStatus=0x01;
 919   1      //for (j=0;j<6;j++)
 920   1      //sen(gonggongxinxi[j]);
 921   1      //return TRUE;
 922   1      }
 923          /****************************************************************/
 924          /*名称: MIF_Read */
 925          /*功能: 该函数实现读MIFARE卡块的数值 */
 926          /*输入: buff: 缓冲区首地址 */
 927          /* Block_Adr: 块地址 */
 928          /*输出: RC500_NOTAGERR: 无卡 */
 929          /* RC500_PARITYERR: 奇偶校验错 */
 930          /*RC500_CRCERR: CRC校验错 */
 931          /* RC500_BYTECOUNTERR: 接收字节错误 */
 932          /* RC500-OK: 应答正确 */
 933          /****************************************************************/
 934          uchar MIF_READ(uchar idata *buff,uchar Block_Adr)
 935          {
 936   1      uchar idata temp;
 937   1      CRCPresetLSB = 0x63;
 938   1      CWConductance = 0x3f;
 939   1      //ModConductance = 0X3f;
 940   1      ChannelRedundancy = 0x0f;
 941   1             //Int_Req=0x7f;
 942   1      buff[0] = RF_CMD_READ;
 943   1      buff[1] = Block_Adr;
 944   1      CardStatus=0; 
 945   1      temp = Command_Send(2, buff, Transceive);
 946   1      //sen(temp);//01
 947   1      if (temp == 0)
 948   1      {
 949   2      CardStatus=0; 
 950   2      return RC500_NOTAGERR;
 951   2      }
 952   1      temp = ErrorFlag;
 953   1      //sen(ErrorFlag);//00
 954   1      if ((temp & 0x02) == 0x02) 
 955   1      return RC500_PARITYERR;
 956   1      if((temp & 0x04) == 0x04) 
 957   1      return RC500_FRAMINGERR;
 958   1      if ((temp & 0x08) == 0x08)
 959   1      return RC500_CRCERR;
 960   1      
 961   1      temp = FIFO_Length;//0x10
 962   1      //sen(temp);
 963   1      if (temp == 0x10)      //8K卡读数据长度为16
 964   1      {
 965   2      Read_FIFO(buff);//10
 966   2      READ_data(temp);
 967   2      //sen(0x58);
 968   2      CardStatus=0x01; 
 969   2      return RC500_OK;
 970   2      }
 971   1      else if (temp == 0x04) //Token卡读数据长度为16
 972   1      {
 973   2      Read_FIFO(buff);
 974   2      
 975   2      CardStatus=0x01; 
 976   2      return RC500_OK;
 977   2      }
 978   1      else
 979   1      {
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 17  

 980   2      CardStatus=0; 
 981   2      return RC500_BYTECOUNTERR;
 982   2      }
 983   1      }
 984          /****************************************************************/
 985          /*名称: MIF_Write */
 986          /*功能: 该函数实现写MIFARE卡块的数值 */
 987          /*输入: buff: 缓冲区首地址 */
 988          /* Block_Adr: 块地址 */
 989          /*输出: RC500_NOTAGERR: 无卡 */
 990          /* RC500_BYTECOUNTERR: 接收字节错误 */
 991          /* RC500_NOTAUTHERR: 未经权威认证 */
 992          /* RC500_EMPTY: 数据溢出错误 */
 993          /* RC500_CRCERR: CRC校验错 */
 994          /* RC500_PARITYERR: 奇偶校验错 */
 995          /* RC500_WRITEERR: 写卡块数据出错 */
 996          /* RC500_OK: 应答正确 */
 997          /****************************************************************/
 998          uchar MIF_Write(uchar idata *buff,uchar Block_Adr)
 999          {
1000   1      uchar idata temp;
1001   1      //uint i;
1002   1      uchar idata *F_buff;
1003   1      CRCPresetLSB = 0x63;
1004   1      CWConductance = 0x3f;
1005   1      F_buff = buff + 0x10;
1006   1      ChannelRedundancy = 0x07;//选择RF 信道上数据完整性检测的类型和模式
1007   1      *F_buff =RF_CMD_WRITE;
1008   1      *(F_buff + 1)=Block_Adr;
1009   1      CardStatus=0;
1010   1      
1011   1      temp = Command_Send(2, F_buff, Transceive);
1012   1      //sen(0x07);
1013   1      if (temp == FALSE)
1014   1      {CardStatus=0;
1015   2      return(RC500_NOTAGERR);
1016   2      }
1017   1      temp = FIFO_Length;
1018   1      
1019   1      if (temp == 0)
1020   1      {CardStatus=0;
1021   2      return(RC500_BYTECOUNTERR);
1022   2      }
1023   1      Read_FIFO(F_buff);//01
1024   1      temp = *F_buff;
1025   1      READ_data(temp);
1026   1      //sen(temp);
1027   1      switch (temp)
1028   1      {
1029   2      case 0x00 :
1030   2      return(RC500_NOTAUTHERR); //暂时屏蔽掉写错误
1031   2      case 0x04:
1032   2      return(RC500_EMPTY);
1033   2      case 0x0a:
1034   2      break;
1035   2      case 0x01:
1036   2      return(RC500_CRCERR);
1037   2      case 0x05:
1038   2      return(RC500_PARITYERR);
1039   2      default:
1040   2      return(RC500_WRITEERR);
1041   2      }
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 18  

1042   1      //for(i=0;i<6;i++)                       ///
1043   1            //{ buffer[i]=0xff;}
1044   1                 //buffer[6]=0x7F;
1045   1             //buffer[7]=0x07;
1046   1             //buffer[8]=0x88;
1047   1            // buffer[9]=0x69;
1048   1      //for(i=10;i<16;i++)
1049   1           //{  buffer[i]=0xff;}
1050   1      temp = Command_Send(16, buff, Transceive);
1051   1      if (temp == TRUE)
1052   1      {
1053   2      
1054   2      CardStatus=0x01;
1055   2      return(RC500_OK);
1056   2      }
1057   1      else
1058   1      {CardStatus=0;
1059   2      temp = ErrorFlag;
1060   2      //sen(temp); 
1061   2      
1062   2      if ((temp & 0x02)==0x02)
1063   2      return(RC500_PARITYERR);
1064   2      else 
1065   2      if((temp & 0x04)==0x04)
1066   2      return(RC500_FRAMINGERR);
1067   2      else
1068   2      if ((temp & 0x08)==0x08)
1069   2      return(RC500_CRCERR);
1070   2      else
1071   2      return(RC500_WRITEERR);
1072   2      }
1073   1      }
1074          
1075          /****************************************************************/
1076          /*名称: HL_Active */
1077          /*功能: 该函数实现高级MIFARE卡激活命令 */
1078          /*输入: Secnr: 扇区号 */
1079          /* Block_Adr: 块地址 */
1080          /*输出: 操作状态码 */
1081          /* 读出数据存于buffer中 */
1082          /****************************************************************/
1083          uchar HL_Active(uchar Block_Adr,uchar Mode)
1084          {
1085   1      uchar temp;
1086   1      CardStatus=0;
1087   1      Secnr = Block_Adr/4;
1088   1      MIF_Halt();                         //暂停MIFARE卡71 01
1089   1      temp = Request(RF_CMD_REQUEST_STD); //监测ALL的卡片请求
1090   1      if(temp != RC500_OK)
1091   1      {CardStatus=0;
1092   2      return(RC500_REQERR);
1093   2      }
1094   1      temp = AntiColl();                  //卡片的防冲突检测读出卡号 71 length  05    6A 8B 2E 0E C1     03
1095   1      if(temp != RC500_OK)
1096   1      {CardStatus=0;
1097   2      return(RC500_ANTICOLLERR);
1098   2      }
1099   1      temp = Select_Card();               //71  40  01
1100   1      if(temp != RC500_OK)
1101   1      {CardStatus=0;
1102   2      return(RC500_SELERR);
1103   2      }
C51 COMPILER V7.06   DUXIEXITONGRC500                                                      06/29/2008 08:54:14 PAGE 19  

1104   1      Load_keyE2_CPY((Secnr%16), Mode); //LoadKey
1105   1      temp = mimarenzhen(UID, Secnr, Mode);
1106   1      if(temp != RC500_OK)
1107   1      {CardStatus=0;
1108   2      return(RC500_AUTHERR);
1109   2      }
1110   1      CardStatus=0x01;
1111   1      return RC500_OK;
1112   1      }
1113          
1114          /****************************************************************/
1115          /*名称: HL_Read */
1116          /*功能: 该函数实现高级读命令 */
1117          /*输入: Secnr: 扇区号 */
1118          /* Block_Adr: 块地址 */
1119          /*输出: 操作状态码 */
1120          /* 读出数据存于buffer中 */
1121          /****************************************************************/
1122          uchar HL_Read(uchar idata *buff,uchar Block_Adr,uchar Mode)
1123          {
1124   1      uchar temp;
1125   1      CardStatus=0;
1126   1      temp = HL_Active(Block_Adr, Mode);
1127   1      if(temp !=  RC500_OK)
1128   1      {
1129   2      CardStatus=0;
1130   2      return temp;
1131   2      }
1132   1      temp = MIF_READ(buff,Block_Adr);
1133   1      if(temp !=  RC500_OK)
1134   1      {
1135   2      CardStatus=0;
1136   2      return temp;
1137   2      }
1138   1       
1139   1      //DelayMS(1000);
1140   1      //P14=0;
1141   1      //DelayMS(1000);        //控制小喇叭

⌨️ 快捷键说明

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