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

📄 commtran.lst

📁 此程序为13.56MHz的RFID底层读写卡程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V4.01,  COMMTRAN                                                              19/08/04  14:33:24  PAGE 1   


DOS C51 COMPILER V4.01, COMPILATION OF MODULE COMMTRAN
OBJECT MODULE PLACED IN D:\13505B\105B\COMMTRAN.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE D:\13505B\105B\COMMTRAN.C DB SB OE

stmt level    source

   1          #include <string.h>
   2          #include "Hardware.h"
   3          #include "MfRc500.h"
   4          #include "RcComm.h"
   5          #include "PcdShare.h"
   6          #include "PcdUtils.h"
   7          #include "MfReg.h"
   8          #include "cardhead.h"
   9          #include "MfErrNo.h"
  10          #include <intrins.h>
  11          #include "x5045.h"
  12          #include "newcard.h"
  13          
  14          char code * code send_option[3]={ (char *)I_send4,
  15                                            (char *)I_send1,
  16                                            (char *)I_1send56k
  17                                          };
  18          
  19          char code * code rec_option[3]={ (char *)I_receive4,
  20                                           (char *)I_receive1,
  21                                           (char *)I_1Rda56k,
  22                                         };
  23          
  24          
  25          uchar  xdata  ComBuffer[MAXLEN];
  26          uchar  xdata  TempBuffer[MAXLEN];
  27          uchar  xdata  MADMessage[32];
  28          uchar  xdata  Auth_code[48];
  29          uchar  xdata  CosBuffer[80];
  30          uchar  idata  GPB;
  31          uchar  idata  snr[5];
  32          static uchar  code version_number[11]="JK105B_V1.0";
  33          uchar  xdata  buf2[16];
  34          extern uchar  Block_Index;
  35          extern uchar idata   sw1,sw2;
  36          extern uchar idata rec_bytelen;
  37          ulong  idata  money2 _at_ 0x30;
  38          ulong  xdata  money1 ;
  39          uchar  len_x;
  40          uchar  len_y;
  41          uint   F;
  42          uchar idata D;
  43          uchar idata Baudrate=0x00;
  44          uchar xdata slot1_baud=0xff;
  45           /****************************************************************/
  46          
  47            extern unsigned char ResetAllCard(void);
  48            extern unsigned char RfSwitchOff(void);
  49            extern unsigned char InitPcd(void);
  50            extern char OpenRC(void);
  51            extern void CloseRC(void);
  52            extern char PcdReadE2(unsigned short startaddr,
  53                         unsigned char length,
  54                         unsigned char * DataBuffer);
  55            extern void ModifyBaudrate12(void);    // pps comand /
  56          
  57          /***************************************************************************************************/
  58          
  59                void CommTransact(void)
C51 COMPILER V4.01,  COMMTRAN                                                              19/08/04  14:33:24  PAGE 2   

  60                  {
  61   1      
  62   1              uchar  Status,flag1=0;
  63   1              uchar idata key_type,keytest;
  64   1              uchar idata i,j,key_index,cardsequ,k;
  65   1      	uchar idata len_index,LEN1,LEN2;
  66   1      	uchar idata sector_n,block_n,flag=0;
  67   1              uchar idata block_ob,Requestmode,piccvaluecmd;
  68   1              uchar xdata buf[25],key[6],temp[4];
  69   1              uchar ICProtol;
  70   1              uint  RAM_address;
  71   1              uchar xdata  wdtkey[6];
  72   1              uint  xdata  freq;
  73   1                                 if(flag)
  74   1                                 {
  75   2                                  Status=cpucard_send(0x00,(void *)(send_option[0]));
  76   2                                  Status=cpucard_rec(&sw1,(void *)(rec_option[cardsequ]));
  77   2                                  block_n=ResetAllCard();
  78   2                                  block_n=RfSwitchOff();
  79   2                                  block_n=InitPcd();
  80   2                                  block_n=OpenRC();
  81   2                                  CloseRC();
  82   2                                  block_n=PcdReadE2(00,10,buf);
  83   2                                 }
  84   1      
  85   1      
  86   1              if((ComBuffer[2]==0x39)||(ComBuffer[2]==0x3b)||(ComBuffer[2]==0x52)
  87   1            	                       ||(ComBuffer[2]==0x54)||(ComBuffer[2]==0x56)
  88   1                                     ||(ComBuffer[2]==0x60)) //readfile  writefile decrement increment
  89   1      	{
  90   2      	    Status=CheckMad(&sector_n);       /*get sector no.*/
  91   2            	    if(Status!=MI_OK) return;
  92   2      
  93   2            	    //"当ComBuffer[5]==0时,直接使用KEYSET1的密钥认证
  94   2            	    //"当ComBuffer[5]!=0时, 使用SAM卡导出密钥认证
  95   2            	    if((ComBuffer[2]==0x39)||(ComBuffer[2]==0x60)) //writefile    and increment
  96   2            	         keytest=0x04;    //KEYB
  97   2            	    else keytest=0x00;    //KEYA
  98   2      
  99   2            	    if(ComBuffer[5]!=0x00)
 100   2                  {
 101   3                      Status=Creat_key(keytest,sector_n,ComBuffer[5],key);
 102   3                      flag1=1;
 103   3                      if(Status!=MI_OK) return;
 104   3                  }
 105   2                  if(keytest==0x04)
 106   2                  {
 107   3                   key_type=PICC_AUTHENT1B;
 108   3                  }
 109   2                  else key_type=PICC_AUTHENT1A;
 110   2                  block_n=sector_n<<2;
 111   2                  if(flag1)
 112   2                  {
 113   3                   Status=MF1_authkey(key_type,key,block_n);
 114   3                  }
 115   2                  else Status=MF1_auth(key_type,sector_n,block_n);
 116   2                  if(Status!=MI_OK)
 117   2                  {
 118   3                      SendResponse(0x81,1,buf);
 119   3                      return;
 120   3                  }
 121   2              }
 122   1              if((ComBuffer[2]==0x51)||(ComBuffer[2]==0x53)||(ComBuffer[2]==0x55)||ComBuffer[2]==0x59)
 123   1              {   /*" 格式:3-密钥类型  4-扇区号 */
 124   2                  if(ComBuffer[3]==0x01)
 125   2      	    {
C51 COMPILER V4.01,  COMMTRAN                                                              19/08/04  14:33:24  PAGE 3   

 126   3      	        keytest=PICC_AUTHENT1B;
 127   3      	    }
 128   2      	    else keytest=PICC_AUTHENT1A;
 129   2      
 130   2      	    sector_n=ComBuffer[4];
 131   2                  block_n=sector_n<<2;
 132   2      	    Status=MF1_auth(keytest,sector_n,block_n);
 133   2                  if(Status!=MI_OK)
 134   2                  {
 135   3                      SendResponse(0x81,1,buf);
 136   3                      return;
 137   3                  }
 138   2           	}
 139   1      	switch(ComBuffer[2])
 140   1      	{
 141   2      	  case 0x35:          /* open reader */
 142   2      
 143   2                       Power_on();
 144   2                       SleepMs(100);
 145   2                       SendResponse(0x01,1,buf);
 146   2                       break;
 147   2      
 148   2      	  case 0x36:                 /* close reader */
 149   2         	 	 Power_off();
 150   2         	 	 SleepMs(10);
 151   2         	 	 SendResponse(0x01,1,buf);
 152   2      	         SetBaud(Baud115200);
 153   2                       break;
 154   2      
 155   2      	  case 0x37:		     /* Select ADF */
 156   2      	         if(ComBuffer[1]==3)
 157   2      	         {
 158   3      	            buf[0]=ComBuffer[3];
 159   3      	            buf[1]=ComBuffer[4];
 160   3      	         }
 161   2      	         else
 162   2      	         {
 163   3      	            buf[0]=0x10;
 164   3      	            buf[1]=0x03;
 165   3                       }
 166   2      	         Status=SelectADF(buf);
 167   2      	         SleepMs(10);
 168   2      	         if(Status==MI_OK)  SendResponse(0x01,1,buf);
 169   2      	         else SendResponse(0x91,1,buf);    /*ADF error*/
 170   2                       break;
 171   2      
 172   2      
 173   2              case 0x31:       	         // opencard
 174   2                     if(ComBuffer[4]==0x00)
 175   2      	         {
 176   3      	          key_index=0xF0;
 177   3      	         }
 178   2      	         else
 179   2      	         {
 180   3      	          if(ComBuffer[3]==0x26)
 181   3      	          {
 182   4      	           key_index=0;
 183   4      	          }
 184   3      	          else key_index=1;
 185   3      	         }
 186   2      	         Status=OpenCard(key_index);
 187   2      
 188   2      	         if(Status!=MI_OK) return;
 189   2      
 190   2                        Read_Ram(0x0000,wdtkey,6);                  //read key from dog's E2ROM
 191   2                        Status=MF1_authkey(PICC_AUTHENT1A,wdtkey,0);
C51 COMPILER V4.01,  COMMTRAN                                                              19/08/04  14:33:24  PAGE 4   

 192   2      
 193   2      	    	 if(Status!=MI_OK)
 194   2      	    	 {
 195   3                         SendResponse(0x81,6,snr);                 // authentication error
 196   3                         return;
 197   3                       }
 198   2                       for(i=1;i<3;i++)                           //get mad message
 199   2                       {
 200   3                          Status=MF1_read_key(PICC_AUTHENT1A,i,MADMessage+((i-1)<<4),wdtkey);
 201   3                          if(Status!=MI_OK) break;
 202   3                       }
 203   2                       if(Status==MI_OK)
 204   2                       {
 205   3                          Status=MF1_read_key(PICC_AUTHENT1A,3,buf,wdtkey);
 206   3                          if(Status==MI_OK)
 207   3                          {
 208   4                          	GPB=buf[9];
 209   4                          	Read_Ram(0x0010,wdtkey,6);
 210   4                              Status=MF1_authkey(PICC_AUTHENT1A,wdtkey,60);    //2003.1.15
 211   4                          	if(Status==MI_OK)
 212   4                          	{
 213   5                          	   for(i=0;i<3;i++)
 214   5                          	   {
 215   6                          	      Status=MF1_read_key(PICC_AUTHENT1A,60+i,Auth_code+(i<<4),wdtkey);
 216   6                          	      if(Status!=MI_OK) break;
 217   6                          	   }
 218   5                          	}
 219   4                          }
 220   3                       }
 221   2                       if(Status==MI_OK) SendResponse(0x01,6,snr);
 222   2                       else SendResponse(0x80,6,snr);
 223   2                       break;
 224   2      
 225   2      
 226   2                  case 0xF1:       	     //"为浙江作的程序,认证码区的由标识来确定,要求
 227   2      	                             //"使用loadkey方式将32-47(KEYSET1)密钥下载
 228   2      	         //"格式:60 05 f1 (卡片打开方式1字节(all或idle))(多卡标志1字节)(认证码区标识2字节)
 229   2      	         //      0   1  2              3                           4             5 6
 230   2      	         if(ComBuffer[4]==0x00)
 231   2      	         {
 232   3      	            key_index=0xF0;
 233   3      	         }
 234   2      	         else
 235   2      	         {
 236   3      	            if(ComBuffer[3]==0x26)
 237   3      	            {
 238   4      	               key_index=0;
 239   4      	            }
 240   3      	            else key_index=1;
 241   3      	         }
 242   2      	         Status=OpenCard(key_index);
 243   2      
 244   2      	         if(Status!=MI_OK) return;
 245   2      
 246   2      
 247   2                       Read_Ram(0x0000,wdtkey,6);                   //read key from dog's E2ROM 2003.1.15
 248   2                       Status=MF1_authkey(PICC_AUTHENT1A,wdtkey,0); //
 249   2      	    	 if(Status!=MI_OK)
 250   2      	    	 {
 251   3                         SendResponse(0x81,6,snr);                  // authentication error */
 252   3                         return;

⌨️ 快捷键说明

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