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

📄 main.lst

📁 RC500可用的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAIN                                                                  05/01/2009 01:52:10 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "reg52.h"
   2          #include <string.h>
   3          #include <intrins.h>
   4          #include <absacc.h>
   5          #include "main.h"
   6          #include "slrc500.h"
   7          #include "iso14443a.h"
   8          
   9          
  10          bit g_bReceOk;                                              //正确接收到上位机指令标志
  11          bit g_bRc500Ok;                                             //RC500复位正常标志
  12          
  13          
  14          unsigned int  data g_cCommand;                              //接收到的命令码
  15          unsigned char data g_cSNR[4];                               //M1卡序列号
  16          unsigned char g_cCidNad;                                    //
  17          unsigned char idata g_cReceBuf[64];                         //和上位机通讯时的缓冲区
  18          
  19          struct TranSciveBuffer{unsigned char MfCommand;
  20                                 unsigned int  MfLength;
  21                                 unsigned char MfData[64];
  22                                };
  23          void main( )
  24          {    
  25   1           
  26   1           InitializeSystem( );       //系统初始化
  27   1           Rc500Ready( );                     //初始化RC500
  28   1           PcdConfigISOType( 'A' );    
  29   1           while ( 1 )
  30   1           {   
  31   2               if (g_bReceOk)    //正确接收到上位机指令标志
  32   2               {
  33   3      
  34   3                       g_bReceOk = 0;//清上位机指令标志
  35   3                                       g_cCommand=g_cReceBuf[0];//从接收缓冲区中读取数据     
  36   3                       switch(g_cCommand)
  37   3                       {
  38   4                           case 13:
  39   4                              ComSetBound();               break;//设置波特率             
  40   4                           case 2:
  41   4                              ComRequestA();               break;//响应上位机发送的寻A卡命令
  42   4                           case 3:
  43   4                              ComAnticoll();               break;//防冲突        
  44   4                           case 4:
  45   4                              ComSelect();                 break;//选卡
  46   4                                               case 5:
  47   4                              ComM500PiccAuthE2();         break;
  48   4                                               case 6:
  49   4                              ComM500PcdLoadKeyE2();       break;
  50   4                           case 1:
  51   4                              ComHlta();                   break;
  52   4                           case 7:
  53   4                              ComAuthentication();         break; 
  54   4                           case 8:
  55   4                              ComM1Read();                 break;//读卡
C51 COMPILER V7.06   MAIN                                                                  05/01/2009 01:52:10 PAGE 2   

  56   4                           case 9:
  57   4                              ComM1Write();                break;//写卡
  58   4                           case 10:
  59   4                              ComM1Decrement();            break;
  60   4                                               case 11:
  61   4                              Comsond();                   break;  
  62   4                                               case 12:    // 参数设置
  63   4                                      g_cReceBuf[0]=1;        //contact
  64   4                                      g_cReceBuf[1]=0;
  65   4                                                                       break;         
  66   4      
  67   4                       }
  68   3                   ES = 1;
  69   3                }
  70   2           }
  71   1      }
  72          
  73          
  74          
  75          
  76          ///////////////////////////////////////////////////////////////////
  77          //////
  78          ///////////////////////////////////////////////////////////////////
  79          void Comsond()
  80          {
  81   1                              g_cReceBuf[0]=1;         //contact
  82   1                              g_cReceBuf[1]=0;
  83   1                                      AnswerOk();             
  84   1                              sond       = 0;
  85   1                              DelayMs(200);
  86   1                                      DelayMs(200);
  87   1      
  88   1                              sond       = 1;
  89   1                      
  90   1      }
  91          
  92          
  93          /////////////////////////////////////////////////////////////////////
  94          //系统初始化
  95          /////////////////////////////////////////////////////////////////////
  96          void InitializeSystem()
  97          {
  98   1          TMOD &= 0x0F;               //
  99   1          TMOD |= 0x21;                       //定时器0为方式0,定时器1为方式2.软件启动定时器
 100   1          PCON |= 0x80;                       //SMOD=1;串行口用于方式1、2、3时波特率加倍
 101   1          SCON  = 0x50;                       //10位异步收发(方式1),波特率可变,REN = 1(可以接收)
 102   1          TH1 = TL1 = BOUND9600;      //波特率9.6k
 103   1          TR1=1;                                      //启动定时器1
 104   1          P0 = P1 = P2 = P3 = 0xFF;//IO端口初始化
 105   1          IE |= 0x90;                         //EA=1,ES=1;CPU中断允许,串行口中断允许
 106   1      }
 107          
 108          /////////////////////////////////////////////////////////////////////
 109          //初始化RC500
 110          /////////////////////////////////////////////////////////////////////
 111          void Rc500Ready()
 112          {
 113   1          char status;
 114   1          DelayMs(100);
 115   1          DelayMs(100);
 116   1              DelayMs(100);
 117   1          DelayMs(100);
C51 COMPILER V7.06   MAIN                                                                  05/01/2009 01:52:10 PAGE 3   

 118   1          DelayMs(100);
 119   1          DelayMs(100);
 120   1          DelayMs(100);
 121   1      
 122   1          status = PcdReset();
 123   1          if(status != MI_OK)
 124   1          {
 125   2              DelayMs(10);
 126   2              status = PcdReset();//假如复位不成功,连续三次复位
 127   2          } 
 128   1          if(status != MI_OK)
 129   1          {
 130   2              DelayMs(10);
 131   2              status = PcdReset();
 132   2          } 
 133   1          if(status == MI_OK)
 134   1          {
 135   2              g_bRc500Ok = 1;
 136   2              sond       = 1;                //蜂鸣器响一声,表示RC500复位成功
 137   2                       DelayMs(200);
 138   2                       DelayMs(200);
 139   2                      sond       = 0;
 140   2          }       
 141   1      }
 142                  
 143          /////////////////////////////////////////////////////////////////////
 144          //响应上位机发送的设置波特率命令
 145          /////////////////////////////////////////////////////////////////////
 146          void ComSetBound()
 147          {
 148   1          unsigned char bound = g_cReceBuf[1];
 149   1      
 150   1              TR1 = 0;
 151   1              switch(bound)
 152   1              {
 153   2                       case 0:
 154   2                            TH1=TL1=BOUND4800;
 155   2                            break;
 156   2                       case 1:
 157   2                            TH1=TL1=BOUND9600;
 158   2                            break;
 159   2                       case 2:
 160   2                            TH1=TL1=BOUND14400;
 161   2                            break;
 162   2                       case 3:
 163   2                            TH1=TL1=BOUND19200;
 164   2                            break;
 165   2                       case 4:
 166   2                            TH1=TL1=BOUND28800;
 167   2                            break;
 168   2                       case 5:
 169   2                            TH1=TL1=BOUND38400;
 170   2                            break;
 171   2                       case 6:
 172   2                            TH1=TL1=BOUND57600;
 173   2                            break;
 174   2                       case 7:
 175   2                            TH1=TL1=BOUND115200;
 176   2                            break;
 177   2                       default:
 178   2                            break;
 179   2              }
C51 COMPILER V7.06   MAIN                                                                  05/01/2009 01:52:10 PAGE 4   

 180   1                      g_cReceBuf[0]=1;                //contact
 181   1                  g_cReceBuf[1]=0;
 182   1                  AnswerOk();
 183   1                      DelayMs(20);
 184   1              TR1 = 1;        
 185   1      }
 186          
 187          /////////////////////////////////////////////////////////////////////
 188          //响应上位机发送的寻A卡命令
 189          /////////////////////////////////////////////////////////////////////
 190          void ComRequestA()
 191          {
 192   1              char status;
 193   1              status = PcdRequest(g_cReceBuf[1], &g_cReceBuf[2]);
 194   1              if (status != MI_OK)
 195   1              {    status = PcdRequest(g_cReceBuf[1], &g_cReceBuf[2]);   }
 196   1          if (status != MI_OK)
 197   1                {  
 198   2              g_cReceBuf[0]=1;        
 199   2              g_cReceBuf[1]=status; 
 200   2               AnswerOk(); 
 201   2               return;   
 202   2                } 
 203   1      
 204   1                if(g_cReceBuf[2]==2)
 205   1                    g_cCidNad=mifarepro;     // Mifare Pro 卡
 206   1                       else  if(g_cReceBuf[2]==4)
 207   1                                g_cCidNad=mifare1;       // Mifare One 卡
 208   1                                      else   if(g_cReceBuf[2]==16)
 209   1                                             g_cCidNad=mifarelight;   // Mifare Light 卡
 210   1                                               else           g_cCidNad=unknowncard;
 211   1      
 212   1                              g_cReceBuf[0]=3;        
 213   1                              g_cReceBuf[1]=status;
 214   1       
 215   1              
 216   1               AnswerOk(); 
 217   1      
 218   1              
 219   1      }
 220          
 221          /////////////////////////////////////////////////////////////////////
 222          //响应上位机发送的A卡防冲撞命令
 223          /////////////////////////////////////////////////////////////////////
 224          void ComAnticoll()
 225          { 
 226   1              char status;
 227   1              status=PcdAnticoll(&g_cSNR);
 228   1          if (status!=MI_OK )
 229   1          {   
 230   2               g_cReceBuf[0]=1;       
 231   2              g_cReceBuf[1]=status;
 232   2               AnswerOk(); 
 233   2               return;  
 234   2               }
 235   1               g_cReceBuf[2]=g_cSNR[0];
 236   1               g_cReceBuf[3]=g_cSNR[1];
 237   1               g_cReceBuf[4]=g_cSNR[2];
 238   1               g_cReceBuf[5]=g_cSNR[3];
 239   1              //memcpy(g_cReceBuf[2],&g_cSNR,4);
 240   1                              g_cReceBuf[0]=5;
 241   1                              g_cReceBuf[1]=status;
C51 COMPILER V7.06   MAIN                                                                  05/01/2009 01:52:10 PAGE 5   

 242   1          AnswerOk();         
 243   1      }
 244          
 245          /////////////////////////////////////////////////////////////////////
 246          //响应上位机发送的A卡锁定命令
 247          /////////////////////////////////////////////////////////////////////
 248          void ComSelect()

⌨️ 快捷键说明

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