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

📄 rfid.lst

📁 c8051f310xmodembootloader.rar
💻 LST
字号:
C51 COMPILER V8.16   RFID                                                                  12/10/2009 11:17:10 PAGE 1   


C51 COMPILER V8.16, COMPILATION OF MODULE RFID
OBJECT MODULE PLACED IN rfid.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE rfid.c LARGE BROWSE INTVECTOR(0X1000) DEBUG OBJECTEXTEND

line level    source

   1          #include "global.h"
   2          
   3          /******************************************************************************
   4          ** 函数: Process_Frame()
   5          ** 入参: rxdata
   6          ** 返回: 
   7          ** 说明:
   8          ******************************************************************************/
   9          void Process_Frame()
  10          {
  11   1        UCHAR i,j,nr;
  12   1        UINT idata result;
  13   1        ULONG idata sum;
  14   1        REPLY_FRAME xdata *reply;
  15   1       
  16   1        
  17   1        reply=(REPLY_FRAME xdata *)(rxdata+1);        //指针偏移 第一位是起始0xfa   
  18   1        sum = (ULONG)cksum(rxdata+1,16);                      //求累加和
  19   1        result = (UINT)(sum + (sum >> 16));           //实际校验值
  20   1        
  21   1        memcpy(wiebuf, rxdata+7, 6);                      //复制卡号用于wiegand发送
  22   1        memcpy(TagID,wiebuf,6);                   //复制标签卡号用于回命令
  23   1      
  24   1      
  25   1      
  26   1      
  27   1        if((rxdata[2]==PCS_read_TAG)||(rxdata[2]==PCS_wt_OK)) 
  28   1        {
  29   2         MSG_LEDG;                                    //LEDG无等待时间闪烁 
  30   2         tag_r_reader();
  31   2        }
  32   1      
  33   1      
  34   1        if(reply->crc==result)                                //查看接收的数据校验是否过
  35   1        {
  36   2                      if(((reply->cmd)&0xf0)==0x00)
  37   2                      {
  38   3                       return;                        //高半字节0的 基站不响应 **
  39   3                      }
  40   2              MSG_LEDG;                                   //LEDG无等待闪
  41   2      
  42   2      
  43   2                  if((TRIG==0)&&(TRIG_STATE==1))
  44   2                  {
  45   3                      TRIG_STATE=0;               //清标记  
  46   3                  }
  47   2                      else
  48   2                      {
  49   3                          flg_io=reply->tag_flag;             //不在触发时 使用卡的进出
  50   3                      }
  51   2      
  52   2                  for(i=0;i<10;i++)               //查看是否是已进入的标签
  53   2              {
  54   3      
  55   3                          if(((memcmp(reply->tag_id,tagnr[i].save_id,6)==0))&&(tagnr[i].save_state!=0))
C51 COMPILER V8.16   RFID                                                                  12/10/2009 11:17:10 PAGE 2   

  56   3      
  57   3                      {
  58   4                                nr=i;
  59   4                                tagnr[nr].save_state =FLG_OLD;                           
  60   4                                break;
  61   4                      }
  62   3              }
  63   2      
  64   2              if(i==10)
  65   2                  {
  66   3                     for(j=0;j<10;j++)  //新进入的标签?登记!
  67   3                         {
  68   4                             if(tagnr[j].save_state==0)                    
  69   4                             {
  70   5                                nr=j;
  71   5                                    tagnr[nr].save_state =FLG_NEW;
  72   5                                    break;
  73   5                             }
  74   4                         }
  75   3                  }
  76   2      
  77   2                  if(nr>10)                  //防止nr出错     ,这里可以考虑老化掉登记了最久的卡
  78   2                  {
  79   3                     return;
  80   3                  }
  81   2      
  82   2              switch(tagnr[nr].save_state)
  83   2                  {
  84   3                     case FLG_NEW:
  85   3                                               if(1)
  86   3                                              // if(((TRIG==0)&&(TRIG_STATE==1))||(TRIG==1))    
  87   3                               {                                                      //触发状态加触发或者非触发才询卡
  88   4                                                                                              
  89   4                                            SeekFrame(WCMD_SLP);  //普通寻卡
  90   4                                txregframe(FRAME_LEN);
  91   4      
  92   4                               }
  93   3      
  94   3                           else 
  95   3                               { 
  96   4                                        return;               //被触发下 没触发不理会收到的数据
  97   4                                   }    
  98   3      
  99   3      
 100   3                                  for(i=0;i<6;i++)
 101   3                                  {
 102   4                                      tagnr[nr].save_id[i] =reply->tag_id[i];       //复制卡号
 103   4                                  }
 104   3                  
 105   3                                      tagnr[nr].save_io         =reply->tag_flag;   //进出标记
 106   3                                      tagnr[nr].save_state      =FLG_OLD;
 107   3                                      tagnr[nr].save_inactivity =INACTIVITY_TIME;   //登记就开启溢出
 108   3                                                      
 109   3                                  wiegandout(wiefmt,flg_io);                    //全新卡需要输出wiegand
 110   3                                              /*
 111   3                                  for(i=0;i<6;i++)
 112   3                                  {
 113   3                                      if(DEBUG) Printf_Char(reply->tag_id[i]);
 114   3                                  }
 115   3                                          */ 
 116   3                          relay_work();
 117   3                                  event_relay=RELAY_TIME_IN;
C51 COMPILER V8.16   RFID                                                                  12/10/2009 11:17:10 PAGE 3   

 118   3                                  break; 
 119   3      
 120   3                         case FLG_OLD:
 121   3      
 122   3                                  for(i=0;i<6;i++)                                                            //旧卡只登记并赋值重计算老化时间
 123   3                                  {
 124   4                                      tagnr[nr].save_id[i] =reply->tag_id[i];    //复制卡号
 125   4                                  }
 126   3                  
 127   3                                      tagnr[nr].save_io         =reply->tag_flag;   //进出标记
 128   3                                      tagnr[nr].save_state      =FLG_OLD;
 129   3                                    //tagnr[nr].save_inactivity =INACTIVITY_TIME; //登记就开启溢出
 130   3                                    //离开卡后再次输出wie 与每ns输出区别
 131   3      
 132   3      
 133   3                             if(INACTIVITY_TIME==0)  //连续输出
 134   3                             {
 135   4      
 136   4                                      
 137   4                                     wiegandout(wiefmt,flg_io);   //全新卡需要输出wieand
 138   4      
 139   4                             }
 140   3                                break;                           // 老化更新后再次读到时作新卡输出
 141   3      
 142   3                         default:
 143   3                             break;
 144   3                  }
 145   2       }      
 146   1        
 147   1        else
 148   1        {
 149   2         // if(DEBUG) Printf_String("\r\n[msg:]crc error"); 
 150   2        }      
 151   1      
 152   1      }
 153          /******************************************************************************
 154          ** 函数: SeekFrame()
 155          ** 入参: txdata
 156          ** 返回: 
 157          ** 说明:
 158          ******************************************************************************/
 159          void SeekFrame(UCHAR cmdd)
 160          {
 161   1       
 162   1        ULONG idata sum;
 163   1        UINT  result;
 164   1      
 165   1        FIND_TAG xdata *seek;
 166   1      
 167   1      
 168   1      
 169   1        seek = (FIND_TAG xdata *)(txdata + 4);  //指针偏移 
 170   1        memcpy(txdata, SiHead, 4); 
 171   1        seek->data_len=sizeof(FIND_TAG)-1;      //数据长度
 172   1        seek->cmd=cmdd;                         //命令  01=普通讯卡 02=加卡
 173   1        memcpy(seek->reader_id, MyID, 4);       //基站系统号
 174   1      
 175   1        
 176   1           switch(cmdd)
 177   1               {
 178   2                  case 0x01:                                                //广播
 179   2                       memset(seek->tag_id, 0xff, 6);
C51 COMPILER V8.16   RFID                                                                  12/10/2009 11:17:10 PAGE 4   

 180   2                           break;      
 181   2      
 182   2                  case 0x02:                                                //休眠点卡
 183   2                       memcpy(seek->tag_id, TagID, 6);        
 184   2                           break;
 185   2      
 186   2      
 187   2                  default:                                                      //出错广播
 188   2                       memset(seek->tag_id, 0xff, 6);
 189   2                       break;   
 190   2      
 191   2               }
 192   1      
 193   1        seek->tag_flag=0x55;                        //询问时填充卡的进出标记任意数据
 194   1        seek->skey[0]=0xff;                                         //处理密钥
 195   1        seek->skey[1]=0xff;
 196   1        seek->skey[2]=0xff;
 197   1        seek->skey[3]=0xff;
 198   1        sum = (ULONG)cksum(txdata+4,sizeof(FIND_TAG)-2-1);      //从长度开始算SUM
 199   1      
 200   1        result = (UINT)(sum + (sum >> 16));
 201   1        seek->crc=result;                                                               //处理校验
 202   1      }
 203          
 204          
 205          
 206          
 207          
 208          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1037    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       7
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----      10
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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