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

📄 main.lst

📁 RC500可用的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 249          {
 250   1      char status;
 251   1              status=PcdSelect(g_cSNR, &g_cReceBuf[2]);
 252   1          if (status!=MI_OK)
 253   1          {  
 254   2              
 255   2                      g_cReceBuf[0]=1;        
 256   2                      g_cReceBuf[1]=status; 
 257   2                  AnswerOk(); 
 258   2                      return;     
 259   2              }
 260   1                  g_cReceBuf[0]=3;
 261   1                              g_cReceBuf[1]=status;
 262   1                              AnswerOk();
 263   1      }
 264          ////////////////////////////////////////////////////////////////////////
 265          ///校验密码
 266          ///////////////////////////////////////////////////////////////////////
 267          void ComM500PiccAuthE2()
 268          {
 269   1      char status;
 270   1      unsigned char *pSNR;
 271   1      pSNR  = &g_cSNR;
 272   1      status=PcdLoadKeyE2(g_cReceBuf[1],g_cReceBuf[2]);
 273   1           if(status==0)
 274   1                    {
 275   2                          status = PcdAuthState(g_cReceBuf[1], g_cReceBuf[3], pSNR);     //验证密钥
 276   2                  g_cReceBuf[0]=1;
 277   2                              g_cReceBuf[1]=status;
 278   2                              AnswerOk();
 279   2                              return; 
 280   2                        }
 281   1                        AnswerOk();
 282   1      }
 283          
 284          //////////////////////////////////////////////////////////////////////
 285          ///////////////////////////////////////////////////////////////////////
 286          ///下载密码
 287          ///////////////////////////////////////////////////////////////////////
 288          void ComM500PcdLoadKeyE2()
 289          {
 290   1      char status;
 291   1      status=M500PcdLoadKeyE2(g_cReceBuf[1],g_cReceBuf[2],&g_cReceBuf[3]);
 292   1                              g_cReceBuf[0]=1;
 293   1                              g_cReceBuf[1]=status;
 294   1                              AnswerOk();
 295   1      }
 296          
 297          /////////////////////////////////////////////////////////////////////
 298          //响应上位机发送的A卡休眠命令
 299          /////////////////////////////////////////////////////////////////////
 300          void ComHlta()
 301          {
 302   1      unsigned char status;
 303   1         status=PcdHalt();
C51 COMPILER V7.06   MAIN                                                                  05/01/2009 01:52:10 PAGE 6   

 304   1          g_cReceBuf[0]=1;
 305   1                              g_cReceBuf[1]=status;
 306   1                              AnswerOk();     
 307   1      }
 308          
 309          /////////////////////////////////////////////////////////////////////
 310          //响应上位机发送的A卡验证密钥命令
 311          /////////////////////////////////////////////////////////////////////
 312          void ComAuthentication()
 313          {       
 314   1          char status = MI_COM_ERR;
 315   1          unsigned char *pkeys,*pSNR;
 316   1          pkeys = &g_cReceBuf[20];
 317   1          pSNR  = &g_cSNR;
 318   1          if (MI_OK == ChangeCodeKey(&g_cReceBuf[3],pkeys))                       //转换密钥格式
 319   1          {    
 320   2              if (MI_OK == PcdAuthKey(pkeys))                                     //传送密钥到RC500FIFO
 321   2              {
 322   3                   status = PcdAuthState(g_cReceBuf[1], g_cReceBuf[3], pSNR);     //验证密钥
 323   3              }
 324   2          }
 325   1          if (status == MI_OK)
 326   1          {   g_cReceBuf[0]=1;
 327   2                              g_cReceBuf[1]=status;
 328   2                               AnswerOk();
 329   2                                  }
 330   1      
 331   1      }    
 332          
 333          /////////////////////////////////////////////////////////////////////
 334          //响应上位机读M1卡命令
 335          /////////////////////////////////////////////////////////////////////
 336          void ComM1Read()
 337          {
 338   1      char status;
 339   1              status=PcdRead(g_cReceBuf[1], &g_cReceBuf[2]);
 340   1          if (status==MI_OK)
 341   1          {   
 342   2                      if(g_cCidNad==mifare1||g_cCidNad==mifarepro)
 343   2                                 g_cReceBuf[0]=17;
 344   2                              else      if(g_cCidNad==1)
 345   2                                               g_cReceBuf[0]=9;
 346   2                                      else              g_cReceBuf[0]=16;
 347   2                      g_cReceBuf[1]=status;
 348   2              AnswerOk(); 
 349   2                      return; 
 350   2              }
 351   1          else
 352   1          {   g_cReceBuf[0]=1;            }
 353   1                      g_cReceBuf[1]=status;
 354   1                      AnswerOk();
 355   1      }
 356          
 357          
 358          /////////////////////////////////////////////////////////////////////
 359          //响应上位机写M1卡命令
 360          /////////////////////////////////////////////////////////////////////
 361          void ComM1Write()
 362          {
 363   1          char status;
 364   1              status=PcdWrite(g_cReceBuf[1], &g_cReceBuf[2]);
 365   1                  g_cReceBuf[0]=1;          
C51 COMPILER V7.06   MAIN                                                                  05/01/2009 01:52:10 PAGE 7   

 366   1                      g_cReceBuf[1]=status;
 367   1                      AnswerOk();
 368   1      
 369   1      }
 370          /////////////////////////////////////////////////////////////////////
 371          //响应上位机扣款命令    充值命令
 372          /////////////////////////////////////////////////////////////////////
 373          void ComM1Decrement()
 374          {
 375   1         char status;
 376   1              status=PcdValue(g_cReceBuf[1], g_cReceBuf[2], &g_cReceBuf[3]);
 377   1          if (status==MI_OK)
 378   1          { 
 379   2                  g_cReceBuf[0]=1;         
 380   2                      g_cReceBuf[1]=status;
 381   2                      AnswerOk(); 
 382   2                      return;
 383   2           }
 384   1               g_cReceBuf[0]=1;         
 385   1                      g_cReceBuf[1]=status;
 386   1                      AnswerOk(); 
 387   1                      return;
 388   1      
 389   1      }
 390             
 391          
 392          /////////////////////////////////////////////////////////////////////
 393          //正确执行完上位机指令,应答 
 394          //input:answerdata = 应答数据
 395          //       answernum  = 数据长度
 396          /////////////////////////////////////////////////////////////////////
 397          void AnswerOk()
 398          {    
 399   1          unsigned char len, i;
 400   1          ES = 0;                                             //不允许串行中断
 401   1          TI=0;                                               //清发送标志位  
 402   1                      len=g_cReceBuf[0];              //长度
 403   1                      for(i=0;i<len+1;i++)    //发送
 404   1                      {
 405   2                              SBUF=g_cReceBuf[i];
 406   2                              while(!TI);
 407   2                              TI=0;                   
 408   2                      }            
 409   1           
 410   1           TI = 0;
 411   1              ES = 1;
 412   1      }
 413          
 414          /////////////////////////////////////////////////////////////////////
 415          //串行中断,接收上位机数据
 416          /////////////////////////////////////////////////////////////////////
 417          seri_int () interrupt 4 using 1
 418          {
 419   1      unsigned char len, i;
 420   1      unsigned int j=0;
 421   1         if (RI)
 422   1         { 
 423   2      
 424   2              ES=0;
 425   2              len=SBUF;                                               //首先接收数据包长度
 426   2                      RI=0;   
 427   2                      for(i=0;i<len;i++)
C51 COMPILER V7.06   MAIN                                                                  05/01/2009 01:52:10 PAGE 8   

 428   2                      {
 429   3                              while(!RI)                              //假如没有接收到第二个数据(命令字),则等待
 430   3                              {
 431   4                                      j++;
 432   4                                      if(j>1000)                      //超时退出接收中断
 433   4                                      {
 434   5                                              ES = 1;
 435   5                                          break;
 436   5                                      }
 437   4                              }
 438   3                              if(j<1000)                              //不超时超时
 439   3                              {
 440   4                                      g_cReceBuf[i]=SBUF; //读出命令字和数据
 441   4                                      RI=0;
 442   4                                      j=0;
 443   4                              }
 444   3                              else                                    //超时退出接收中断                                      
 445   3                              {
 446   4                                      ES = 1;
 447   4                                  break;
 448   4                              }
 449   3                      }
 450   2                      if(i==len)                                      //接收的个数与数据包长度一致接收正常
 451   2                      {
 452   3                              ES = 1;
 453   3                              g_bReceOk  = 1;                 //置接收完成标志位
 454   3                      }
 455   2          }
 456   1      
 457   1      }
 458          
 459          
 460          /////////////////////////////////////////////////////////////////////
 461          //用T2做延时子程序
 462          /////////////////////////////////////////////////////////////////////
 463          void DelayMs(unsigned int _MS)
 464          {
 465   1          RCAP2LH = RCAP2_1ms;
 466   1          T2LH    = RCAP2_1ms;
 467   1      
 468   1          ET2     = 0;                                           // Disable timer2 interrupt
 469   1          T2CON   = 0x04;                                        // 16-bit auto-reload, clear TF2, start timer
 470   1          TR2     = 1;                                                                           //启动定时器2
 471   1          while (_MS--)
 472   1          {   
 473   2                      while (!TF2);                                                              //判断有没有溢出                                                        
 474   2                      TF2 = 0;  
 475   2              }
 476   1              TR2 = 0;
 477   1      }
 478          void Delay_50us(unsigned char _50us)
 479          {
 480   1          RCAP2LH = RCAP2_50us;
 481   1          T2LH    = RCAP2_50us;
 482   1      
 483   1          ET2     = 0;                                           // Disable timer2 interrupt
 484   1          T2CON   = 0x04;                                        // 16-bit auto-reload, clear TF2, start timer
 485   1          while (_50us--)
 486   1          {   while (!TF2);TF2 = 0;  }
 487   1          TR2 = 0;
 488   1      }
 489          
C51 COMPILER V7.06   MAIN                                                                  05/01/2009 01:52:10 PAGE 9   

 490          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1060    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7      15
   IDATA SIZE       =     64    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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