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

📄 sam.lst

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


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

stmt level    source

   1          #include "Hardware.h"
   2          #include "MfErrNo.h"
   3          #include "MfRc500.h"
   4          #include <string.h>
   5          #include "MFREG.h"
   6          #include "PCDUTILS.h"
   7           /***********************************************************************/
   8          
   9          extern void  W_DOG(void);
  10          extern void  SendResponse(uchar status,uchar len,uchar *datapr);
  11          extern uchar I_receive1(uchar *ch);
  12          extern void  I_send1(uchar I_data);
  13          extern uchar idata snr[5];
  14          extern uchar xdata ComBuffer[MAXLEN];
  15          extern uchar xdata Auth_code[48];
  16          
  17          uchar idata sw1,sw2;
  18          uchar idata rec_bytelen;
  19          
  20          void I_send(uchar I_data)
  21             {
  22   1           I_send1(I_data);
  23   1      
  24   1         }
  25          
  26          char I_receive()
  27              {
  28   1            char ch;
  29   1             I_receive1(&ch);
  30   1             return ch;
  31   1          }
  32          
  33          
  34          
  35          void Power_on()
  36          {
  37   1           uint idata i,j;
  38   1      
  39   1           RST1=0;
  40   1           IO1=1;
  41   1           for(i=0;i<200;i++)
  42   1           {
  43   2             W_DOG();
  44   2             for(j=0;j<30;j++)
  45   2             {
  46   3               ;
  47   3             }
  48   2           }
  49   1           RST1=1;
  50   1           SleepMs(100);
  51   1           //SetBitMask(RegTxControl,0x03);
  52   1      }
  53          
  54          void Power_off()
  55          {
  56   1           //PON=1;
  57   1           //mifs_close_rf();     /*2002007.17*/
  58   1           //ClearBitMask(RegTxControl,0x03);
  59   1           SleepMs(50);
C51 COMPILER V4.01,  SAM                                                                   19/08/04  14:33:22  PAGE 2   

  60   1      }
  61          
  62          
  63          void Reset1()
  64          {
  65   1           uint i,j;
  66   1           IO1=1;
  67   1           RST1=0;
  68   1      
  69   1           for(i=0;i<400;i++)
  70   1           {
  71   2             W_DOG();
  72   2             for(j=0;j<30;j++)
  73   2             {
  74   3               ;
  75   3             }
  76   2           }
  77   1           RST1=1;
  78   1      
  79   1      }
  80          
  81          
  82          /***************************************************/
  83          /*          SelectADF
  84          
  85          /***************************************************/
  86          uchar SelectADF(uchar *dir)
  87          {
  88   1          uchar temp_buf[2],i,j;
  89   1      
  90   1          W_DOG();
  91   1      
  92   1          I_send(0x00);
  93   1          I_send(0xa4);
  94   1          I_send(0x00);
  95   1          I_send(0x00);
  96   1          I_send(0x02);
  97   1      
  98   1          sw1=I_receive();
  99   1      
 100   1          for(i=0;i<60;i++)
 101   1          {
 102   2             ;
 103   2          }
 104   1      
 105   1          I_send(dir[0]);
 106   1          I_send(dir[1]);
 107   1      
 108   1          sw1=I_receive();
 109   1          sw2=I_receive();
 110   1      
 111   1          if(sw1!=0x61)
 112   1          {
 113   2             if((sw1==0x90)&&(sw2==0x00)) return MI_OK;
 114   2             else
 115   2             {
 116   3             	  return SAM_ADF_ERROR;
 117   3             }
 118   2          }
 119   1      
 120   1          for(i=0;i<60;i++)
 121   1          {
 122   2             ;
 123   2          }
 124   1      
 125   1          j=sw2+2;
C51 COMPILER V4.01,  SAM                                                                   19/08/04  14:33:22  PAGE 3   

 126   1          I_send(0x00);
 127   1          I_send(0xc0);
 128   1          I_send(0x00);
 129   1          I_send(0x00);
 130   1          I_send(sw2);
 131   1      
 132   1          sw1=I_receive();
 133   1          for(i=0;i<j;i++)
 134   1          {
 135   2             temp_buf[0]=I_receive();
 136   2          }
 137   1      
 138   1          return MI_OK;
 139   1      }
 140          /*
 141          卡片的认证码区格式:
 142          0-1:城市代码 2-3:发行流水号低2字节
 143          4-43:10个认证码
 144          44-47:认证码区的校验码
 145          key_index分成2个部分,低4位为DES加密密钥标识(0-15,当为0时使用认证密钥计算扇区密钥)
 146          高4位为认证密钥标识(1-10)
 147          
 148          key_id1为认证密钥标识,
 149          key_id2为加密密钥标识。
 150          */
 151          uchar Creat_key(uchar keymode,uchar sector_nr,uchar key_index,uchar* new_key )
 152          {
 153   1           uchar idata buf[13],i;
 154   1           uchar key_no,key_id1,key_id2;
 155   1      
 156   1           W_DOG();
 157   1           key_no=(sector_nr<<1);
 158   1           if(keymode!=0x00)            //11.20  0x00-->0x60
 159   1           {
 160   2              key_no+=1;
 161   2              keymode=PICC_AUTHENT1B;
 162   2           }
 163   1           else  keymode=PICC_AUTHENT1A;    //11.20
 164   1           key_id1=(key_index&0xF0)>>4;
 165   1           key_id2=(key_index&0x0F);
 166   1           i=key_id1<<2;
 167   1      
 168   1           memcpy(buf,Auth_code,2);
 169   1           memcpy(buf+2,snr,4);
 170   1           memcpy(buf+6,Auth_code+2,2);
 171   1           memcpy(buf+8,Auth_code+i,4);
 172   1           buf[12]=key_no;
 173   1      
 174   1           I_send(0x80);
 175   1           I_send(0xfc);
 176   1           I_send(key_id2);
 177   1           I_send(key_id1);
 178   1           I_send(0x0d);
 179   1      
 180   1           sw1=I_receive();
 181   1      
 182   1           for(i=0;i<60;i++)
 183   1           {
 184   2             ;
 185   2           }
 186   1      
 187   1           for(i=0;i<13;i++)
 188   1           {
 189   2             I_send(buf[i]);
 190   2           }
 191   1      
C51 COMPILER V4.01,  SAM                                                                   19/08/04  14:33:22  PAGE 4   

 192   1           sw1=I_receive();
 193   1           sw2=I_receive();
 194   1           if(sw1!=0x61)
 195   1           {
 196   2              SendResponse(0x89,1,buf);
 197   2              return SAM_CYPRT_ERROR;
 198   2           }
 199   1           for(i=0;i<60;i++)
 200   1           {
 201   2             ;
 202   2           }
 203   1      
 204   1           I_send(0x00);
 205   1           I_send(0xc0);
 206   1           I_send(0x00);
 207   1           I_send(0x00);
 208   1           I_send(6);
 209   1      
 210   1           //Receive INS
 211   1           sw1=I_receive();
 212   1      
 213   1           buf[0]=I_receive();
 214   1           buf[1]=I_receive();
 215   1           buf[2]=I_receive();
 216   1           buf[3]=I_receive();
 217   1           buf[4]=I_receive();
 218   1           buf[5]=I_receive();
 219   1           buf[6]=I_receive();
 220   1           buf[7]=I_receive();
 221   1           memcpy(new_key,buf,6);
 222   1           return MI_OK;
 223   1      }
 224          
 225          uchar Creat_key2(uchar keymode,uchar sector_nr,uchar key_index,uchar* new_key)
 226          {
 227   1           uchar xdata buf[13],i;
 228   1           uchar key_no,key_id1,key_id2;
 229   1      
 230   1           W_DOG();
 231   1           key_no=(sector_nr<<1);
 232   1      
 233   1           //keymode"分成两部分:前4位为认证码标识,后4位为KEYA/KEYB标识"
 234   1      
 235   1           i=(keymode&0xf0)>>2; //"取认证码标识"
 236   1           if((keymode&0x0f)!=0)
 237   1           {
 238   2              key_no+=1;        //KEYB
 239   2              keymode=PICC_AUTHENT1B;
 240   2           }
 241   1           else keymode=PICC_AUTHENT1A;
 242   1           key_id1=(key_index&0xF0)>>4;
 243   1           key_id2=(key_index&0x0F);
 244   1      
 245   1      
 246   1           memcpy(buf,Auth_code,2);
 247   1           memcpy(buf+2,snr,4);
 248   1           memcpy(buf+6,Auth_code+2,2);
 249   1           memcpy(buf+8,Auth_code+i,4);
 250   1           buf[12]=key_no;
 251   1      
 252   1           I_send(0x80);
 253   1           I_send(0xfc);

⌨️ 快捷键说明

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