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

📄 m500auc.lst

📁 ID卡读卡程序,采用FM1702芯片,测试OK!
💻 LST
📖 第 1 页 / 共 3 页
字号:
 588          ///////////////////////////////////////////////////////////////////////
 589          void delay_10ms(unsigned int _10ms)
 590          {
 591   1      #ifndef NO_TIMER2
                  RCAP2LH = RCAP2_10ms;
                  T2LH    = RCAP2_10ms;
                  
                  TR2 = TRUE;
                  while (_10ms--)
                  {
                          while (!TF2);
                          TF2 = FALSE;
                  }
                  TR2 = FALSE;
              #else
 603   1          while (_10ms--)
 604   1          {
 605   2                  delay_50us(19);
 606   2                  if (CmdValid)
 607   2                      return;
 608   2                  delay_50us(20);
 609   2                  if (CmdValid)
 610   2                      return;
 611   2                  delay_50us(20);
 612   2                  if (CmdValid)
 613   2                      return;
C51 COMPILER V7.02a   M500AUC                                                              06/23/2006 09:38:38 PAGE 11  

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

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

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

 800   1              ES = TRUE;    
 801   1              CmdValid=0; 
 802   1              AUXR=0x02;
 803   1      
 804   1              SPEAKER=0;
 805   1              delay_10ms(30);
 806   1              SPEAKER=1;
 807   1              delay_10ms(30);
 808   1              SPEAKER=0;
 809   1                
 810   1              MfConfig();
 811   1      }
 812          
 813          ///////////////////////////////////////////////////////////////////////
 814          // IC卡处理函数
 815          ///////////////////////////////////////////////////////////////////////
 816          void cmd_execution(void)
 817          {
 818   1              unsigned char i;
 819   1              unsigned char status,Temp[4];
 820   1              unsigned char Connect_Status=00;
 821   1         //寻找卡
 822   1              RevBuffer[1]=0x26;//,26为RegMfOutSele
 823   1              status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);
 824   1              if(status==0)
 825   1              {    
 826   2                 // 防冲突 读卡的系列号 MLastSelectedSnr
 827   2                      status = M500PiccCascAnticoll(0,&RevBuffer[2]);
 828   2                      if(status==0)
 829   2                      {
 830   3                       RevBuffer[0]=7;
 831   3                       RevBuffer[1]=0xFE;
 832   3                       RevBuffer[7]=0x7F;
 833   3                       Temp[0]=RevBuffer[5];
 834   3                       Temp[1]=RevBuffer[4];
 835   3                       Temp[2]=RevBuffer[3];
 836   3                       Temp[3]=RevBuffer[2];
 837   3                       RevBuffer[2]=Temp[0];
 838   3                       RevBuffer[3]=Temp[1];
 839   3                       RevBuffer[4]=Temp[2];
 840   3                       RevBuffer[5]=Temp[3];
 841   3                       CALL_isr_UART();            //触发串口中断
 842   3                       M500PiccHalt();       //终止IC卡操作   
 843   3               SPEAKER=1;
 844   3                       delay_10ms(20);
 845   3                       SPEAKER=0;
 846   3                       i=0;
 847   3                      do{
 848   4                              status=M500PiccCommonRequest(0x52,&RevBuffer[2]); 
 849   4                              if(status==0)i=0;
 850   4                              else i++;  
 851   4                        }while(i<5);  
 852   3              }
 853   2        }   
 854   1      }
 855          
 856          ///////////////////////////////////////////////////////////////////////
 857          // 主函数
 858          ///////////////////////////////////////////////////////////////////////
 859          
 860          void main(void)
 861          {
C51 COMPILER V7.02a   M500AUC                                                              06/23/2006 09:38:38 PAGE 15  

 862   1        init(); 
 863   1        while(1)
 864   1        {
 865   2        cmd_execution();         // 进入IC卡处理程序  
 866   2        } 
 867   1      }
 868          
 869          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2842    ----
   CONSTANT SIZE    =      6    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     27      21
   IDATA SIZE       =     47      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 + -