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

📄 m500auc.lst

📁 mifare 读卡器weigant输出有kei uvision打开!
💻 LST
📖 第 1 页 / 共 3 页
字号:
                  T2LH    = RCAP2_10ms;
                  
                  TR2 = TRUE;
                  while (_10ms--)
                  {
                          while (!TF2);
                          TF2 = FALSE;
                  }
                  TR2 = FALSE;
              #else
 608   1          while (_10ms--)
 609   1          {
 610   2                  delay_50us(19);
 611   2                  if (CmdValid)
 612   2                      return;
 613   2                  delay_50us(20);
C51 COMPILER V7.50   M500AUC                                                               06/15/2005 09:19:43 PAGE 11  

 614   2                  if (CmdValid)
 615   2                      return;
 616   2                  delay_50us(20);
 617   2                  if (CmdValid)
 618   2                      return;
 619   2                  delay_50us(20);
 620   2                  if (CmdValid)
 621   2                      return;
 622   2                  delay_50us(20);
 623   2                  if (CmdValid )
 624   2                      return;
 625   2                  delay_50us(20);
 626   2                  if (CmdValid)
 627   2                      return;
 628   2                  delay_50us(20);
 629   2                  if (CmdValid)
 630   2                      return;
 631   2                  delay_50us(20);
 632   2                  if (CmdValid)
 633   2                      return;
 634   2                  delay_50us(20);
 635   2                  if (CmdValid)
 636   2                      return;
 637   2                  delay_50us(19);
 638   2                  if (CmdValid)
 639   2                      return;
 640   2          }
 641   1      #endif
 642   1      }
 643          
 644          ///////////////////////////////////////////////////////////////////////
 645          ///////////////////////////////////////////////////////////////////////
 646          void RC500ISR (void) interrupt 0 using 1    
 647          {
 648   1          static unsigned char idata irqBits;
 649   1          static unsigned char idata irqMask;            
 650   1          static unsigned char idata nbytes;
 651   1          static unsigned char idata cnt;
 652   1              
 653   1          IE0 = 0;    
 654   1          WriteRawIO(0,0x80);
 655   1          if (MpIsrInfo && MpIsrOut)
 656   1          {
 657   2              while( ReadRawIO(RegPrimaryStatus) & 0x08) 
 658   2              {
 659   3                  irqMask = ReadRawIO(RegInterruptEn);
 660   3                  irqBits = ReadRawIO(RegInterruptRq) & irqMask;
 661   3                  MpIsrInfo->irqSource |= irqBits; 
 662   3                  if (irqBits & 0x01)   
 663   3                  {  
 664   4                      nbytes = 64 - ReadRawIO(RegFIFOLength);
 665   4                      if ((MpIsrInfo->nBytesToSend - MpIsrInfo->nBytesSent) <= nbytes)
 666   4                      {
 667   5                          nbytes = MpIsrInfo->nBytesToSend - MpIsrInfo->nBytesSent;
 668   5                          WriteRawIO(RegInterruptEn,0x01);
 669   5                      }   
 670   4                      for ( cnt = 0;cnt < nbytes;cnt++)
 671   4                      {
 672   5                          WriteRawIO(RegFIFOData,MpIsrOut[MpIsrInfo->nBytesSent]);
 673   5                          MpIsrInfo->nBytesSent++;
 674   5                      }
 675   4                      WriteRawIO(RegInterruptRq,0x01);  
C51 COMPILER V7.50   M500AUC                                                               06/15/2005 09:19:43 PAGE 12  

 676   4                  }      
 677   3                  if (irqBits & 0x10)    
 678   3                  {
 679   4                      WriteRawIO(RegInterruptRq,0x10);    
 680   4                      WriteRawIO(RegInterruptEn,0x82);   
 681   4                      if (MpIsrInfo->cmd == PICC_ANTICOLL1)   
 682   4                          {                                        
 683   5                          WriteIO(RegChannelRedundancy,0x02);
 684   5                          WriteRawIO(0,0x80);
 685   5                          }   
 686   4                  }
 687   3                  if (irqBits & 0x0E) 
 688   3                  {
 689   4                      nbytes = ReadRawIO(RegFIFOLength);
 690   4                      for ( cnt = 0; cnt < nbytes; cnt++)               
 691   4                      {
 692   5                          MpIsrOut[MpIsrInfo->nBytesReceived] = ReadRawIO(RegFIFOData);
 693   5                          MpIsrInfo->nBytesReceived++;
 694   5                      }
 695   4                      WriteRawIO(RegInterruptRq,0x0A & irqBits); 
 696   4                  }   
 697   3                  if (irqBits & 0x04) 
 698   3                  {
 699   4                      WriteRawIO(RegInterruptEn,0x20); 
 700   4                      WriteRawIO(RegInterruptRq,0x20); 
 701   4                      irqBits &= ~0x20; 
 702   4                      MpIsrInfo->irqSource &= ~0x20;
 703   4                      WriteRawIO(RegInterruptRq,0x04);
 704   4                  }
 705   3                  if (irqBits & 0x20)     
 706   3                  {
 707   4                      WriteRawIO(RegInterruptRq,0x20); 
 708   4                      MpIsrInfo->status = MI_NOTAGERR; 
 709   4                  }
 710   3              }
 711   2          }
 712   1      }
 713          
 714          ///////////////////////////////////////////////////////////////////////
 715          // 接收和发送中断
 716          ///////////////////////////////////////////////////////////////////////
 717          void isr_UART(void) interrupt 4 using 1
 718          {
 719   1          unsigned char len, i;
 720   1              unsigned int j=0;
 721   1              
 722   1              if(RI)
 723   1              {               
 724   2                      len=SBUF;
 725   2                      RI=0;   
 726   2                      for(i=0;i<len;i++)
 727   2                      {
 728   3                              while(!RI)
 729   3                              {
 730   4                                      j++;
 731   4                                      if(j>1000)
 732   4                                      {
 733   5                                          break;
 734   5                                      }
 735   4                              }
 736   3                              if(j<1000)
 737   3                              {
C51 COMPILER V7.50   M500AUC                                                               06/15/2005 09:19:43 PAGE 13  

 738   4                                      RevBuffer[i]=SBUF;
 739   4                                      RI=0;
 740   4                                      j=0;
 741   4                              }
 742   3                              else
 743   3                              {
 744   4                                  break;
 745   4                              }
 746   3                      }
 747   2                      if(i==len)
 748   2                      {
 749   3                              REN=0;
 750   3                              CmdValid=1;
 751   3                      }
 752   2              }
 753   1              else if(!RI && TI)
 754   1              {
 755   2                      TI=0;
 756   2                      len=RevBuffer[0];
 757   2                      for(i=1;i<len+1;i++)
 758   2                      {
 759   3                              SBUF=RevBuffer[i];
 760   3                              while(!TI);
 761   3                              TI=0;                   
 762   3                      }
 763   2                      REN=1;
 764   2              }
 765   1      }
 766          
 767          ///////////////////////////////////////////////////////////////////////
 768          // MF RC500 Config
 769          ///////////////////////////////////////////////////////////////////////
 770          char MfConfig(void)
 771          {
 772   1              char status=MI_OK;
 773   1              
 774   1              M500PcdConfig();
 775   1              M500PcdMfOutSelect(2);
 776   1              return status;
 777   1      }
 778          
 779          ///////////////////////////////////////////////////////////////////////
 780          // 系统初始化
 781          ///////////////////////////////////////////////////////////////////////
 782          void init(void)
 783          {
 784   1              RC500RST=0;     
 785   1              ET2 = 0;        
 786   1              T2CON = 0x04;           
 787   1          PCON = 0x80;                
 788   1          SCON = 0x70;                 
 789   1          TMOD = 0x21;        //TMOD = 0x22;
 790   1      
 791   1              TH1   = BAUD_9600;
 792   1              TL1   = TH1;
 793   1              TR1   = TRUE;             // 波特率发生器
 794   1      
 795   1              TH0 = 0x60;
 796   1          TL0 = 0x60;
 797   1          TR0 = 0;
 798   1          
 799   1          ET0=0;
C51 COMPILER V7.50   M500AUC                                                               06/15/2005 09:19:43 PAGE 14  

 800   1              ET1=0;
 801   1              EA=1;
 802   1              EX0=1;
 803   1              IT0 = 1;        
 804   1              TR2=0;
 805   1              ES = TRUE;   
 806   1              CmdValid=0; 
 807   1          AUXR=0x02;  
 808   1      
 809   1              SPEAKER=0;
 810   1              delay_10ms(30);
 811   1              SPEAKER=1;
 812   1                
 813   1              MfConfig();
 814   1      }
 815          
 816          ///////////////////////////////////////////////////////////////////////
 817          // IC卡处理函数
 818          ///////////////////////////////////////////////////////////////////////
 819          void cmd_execution(void)
 820          {
 821   1              unsigned int CC;
 822   1              unsigned char FC;
 823   1              unsigned char status,Temp[4];
 824   1      //      unsigned char Connect_Status;
 825   1         //寻找卡
 826   1              RevBuffer[1]=0x26;//,26为RegMfOutSele
 827   1              status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);
 828   1              if(status==0)
 829   1              {    
 830   2                 // 防冲突 读卡的系列号 MLastSelectedSnr
 831   2                      status = M500PiccCascAnticoll(0,&RevBuffer[2]);
 832   2                      if(status==0)
 833   2                      {
 834   3                       SPEAKER=0;GREEN=0;RED=1;
 835   3                       Temp[0]=RevBuffer[5];
 836   3                       Temp[1]=RevBuffer[4];
 837   3                       Temp[2]=RevBuffer[3];
 838   3                       Temp[3]=RevBuffer[2];
 839   3                       RevBuffer[2]=Temp[0];
 840   3                       RevBuffer[3]=Temp[1];
 841   3                       RevBuffer[4]=Temp[2];
 842   3                       RevBuffer[5]=Temp[3];
 843   3                       RevBuffer[0]=7;
 844   3                       RevBuffer[1]=0xFE;
 845   3                       RevBuffer[7]=0x7F;
 846   3                       //用WIEGAND输出卡号的后三位或者是机器号+后两位
 847   3                       FC=RevBuffer[3]; //可以改为机器号
 848   3                       CC=0;
 849   3                       CC=((CC|(unsigned int)RevBuffer[4])<<8)|(CC|(unsigned int)RevBuffer[5]);
 850   3                       Wiegand_Out(FC,CC);
 851   3                       CALL_isr_UART();            //触发串口中断
 852   3                       M500PiccHalt();       //终止IC卡操作   
 853   3                       delay_10ms(20);
 854   3                       SPEAKER=1;GREEN=1;RED=0;       
 855   3                   delay_10ms(60);
 856   3              }
 857   2        }   
 858   1      }
 859          
 860          ///////////////////////////////////////////////////////////////////////
 861          // 主函数
C51 COMPILER V7.50   M500AUC                                                               06/15/2005 09:19:43 PAGE 15  

 862          ///////////////////////////////////////////////////////////////////////
 863          
 864          void main(void)
 865          {
 866   1        init();
 867   1        Data0=1;
 868   1        Data1=1; 
 869   1        GREEN=0;RED=1;
 870   1        delay_10ms(20);
 871   1        GREEN=1;RED=0;
 872   1        while(1)
 873   1        {
 874   2          
 875   2              //GREEN=0;RED=1;SPEAKER=1;
 876   2              //delay_10ms(20);
 877   2              //SPEAKER=1;GREEN=1;RED=0;      
 878   2              //delay_10ms(20);
 879   2              cmd_execution();         // 进入IC卡处理程序    
 880   2              //Wiegand_Out(0x58,0x6b64);
 881   2        } 
 882   1      }
 883          
 884          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2863    ----
   CONSTANT SIZE    =      6    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     27      18
   IDATA SIZE       =     27      28
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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