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

📄 fm1702.lst

📁 FM1702SL.rar
💻 LST
📖 第 1 页 / 共 5 页
字号:
 518   1              if((row == 0x00) && (col == 0x00))
 519   1              {
 520   2                      for(i = 0; i < length; i++)
 521   2                      {
 522   3                              UID[i] = RevBuffer[i];
 523   3                      }
 524   2              }
 525   1              else
 526   1              {
 527   2                      temp = RevBuffer[0];
 528   2                      temp1 = UID[row - 1];
 529   2                      switch(col)
 530   2                      {
 531   3                      case 0:         temp1 = 0x00; row = row + 1; break;
 532   3                      case 1:         temp = temp & 0xFE; temp1 = temp1 & 0x01; break;
 533   3                      case 2:         temp = temp & 0xFC; temp1 = temp1 & 0x03; break;
 534   3                      case 3:         temp = temp & 0xF8; temp1 = temp1 & 0x07; break;
 535   3                      case 4:         temp = temp & 0xF0; temp1 = temp1 & 0x0F; break;
 536   3                      case 5:         temp = temp & 0xE0; temp1 = temp1 & 0x1F; break;
 537   3                      case 6:         temp = temp & 0xC0; temp1 = temp1 & 0x3F; break;
 538   3                      case 7:         temp = temp & 0x80; temp1 = temp1 & 0x7F; break;
 539   3                      default:        break;
 540   3                      }
 541   2      
 542   2                      RevBuffer[0] = temp;
 543   2                      UID[row - 1] = temp1 | temp;
 544   2                      for(i = 1; i < length; i++)
 545   2                      {
 546   3                              UID[row - 1 + i] = RevBuffer[i];
 547   3                      }
 548   2              }
 549   1      }
 550          
 551          /****************************************************************/
C51 COMPILER V7.50   FM1702                                                                10/16/2007 16:33:32 PAGE 10  

 552          /*名称: Set_BitFraming */
 553          /*功能: 该函数设置待发送数据的字节数*/
 554          /*输入: row: 产生冲突的行*/
 555          /* col: 产生冲突的列*/
 556          /*输出: N/A */
 557          /****************************************************************/
 558          void Set_BitFraming(uchar row, uchar col)
 559          {
 560   1              switch(row)
 561   1              {
 562   2              case 0:         RevBuffer[1] = 0x20; break;
 563   2              case 1:         RevBuffer[1] = 0x30; break;
 564   2              case 2:         RevBuffer[1] = 0x40; break;
 565   2              case 3:         RevBuffer[1] = 0x50; break;
 566   2              case 4:         RevBuffer[1] = 0x60; break;
 567   2              default:        break;
 568   2              }
 569   1      
 570   1              switch(col)
 571   1              {
 572   2              case 0:         SPIWrite(Bit_Frame,0x00); break;
 573   2              case 1:         SPIWrite(Bit_Frame,0x11); RevBuffer[1] = (RevBuffer[1] | 0x01); break;
 574   2              case 2:         SPIWrite(Bit_Frame,0x22); RevBuffer[1] = (RevBuffer[1] | 0x02); break;
 575   2              case 3:         SPIWrite(Bit_Frame,0x33); RevBuffer[1] = (RevBuffer[1] | 0x03); break;
 576   2              case 4:         SPIWrite(Bit_Frame,0x44); RevBuffer[1] = (RevBuffer[1] | 0x04); break;
 577   2              case 5:         SPIWrite(Bit_Frame,0x55); RevBuffer[1] = (RevBuffer[1] | 0x05); break;
 578   2              case 6:         SPIWrite(Bit_Frame,0x66); RevBuffer[1] = (RevBuffer[1] | 0x06); break;
 579   2              case 7:         SPIWrite(Bit_Frame,0x77); RevBuffer[1] = (RevBuffer[1] | 0x07); break;
 580   2              default:        break;
 581   2              }
 582   1      }
 583          
 584          /****************************************************************/
 585          /*名称: Init_FM1702 */
 586          /*功能: 该函数实现对FM1702初始化操作*/
 587          /*输入: mode:工作模式, 0:TYPEA模式*/
 588          /* 1:TYPEB模式*/
 589          /* 2:上海模式*/
 590          /*输出: N/A */
 591          /****************************************************************/
 592          void Init_FM1702(uchar mode)
 593          {
 594   1              
 595   1              uchar temp;
 596   1              uint    i;
 597   1              
 598   1      //    unsigned int idata timecnt=0;
 599   1              RF_SCK = 1;
 600   1              RF_MISO = 1;
 601   1              RF_MOSI = 1;
 602   1              RF_RST = 1;                                 /* FM1702复位 */
 603   1              for(i = 0; i < 0x1fff; i++)
 604   1              {
 605   2                      _nop_();                     /*等待约140ms, 11.0592*/
 606   2              }
 607   1      
 608   1              RF_RST = 0;
 609   1              for(i = 0; i < 0x1fff; i++)      
 610   1              {
 611   2                      _nop_();
 612   2              }
 613   1      
C51 COMPILER V7.50   FM1702                                                                10/16/2007 16:33:32 PAGE 11  

 614   1      
 615   1      ////////////////////////////////////////////////////////////////////////////
 616   1              
 617   1              while(temp = SPIRead(Command) != 0)                     /* 等待Command = 0,FM1702复位成功 */
 618   1              {
 619   2                      _nop_();
 620   2              }
 621   1      ////////////////////////////////////////////////////////////////////////////
 622   1      //      delay_10ms(1);
 623   1          SPIWrite(Page_Sel,0x80);    
 624   1      
 625   1      
 626   1              for(i = 0; i < 0x1fff; i++) /* 延时 */
 627   1              {
 628   2                      if(temp=SPIRead(Command) == 0x00)       
 629   2                      {
 630   3                              SPIWrite(Page_Sel,0x00);
 631   3                      }
 632   2              }
 633   1      
 634   1      
 635   1      //      P2 = SPIRead(TimerClock);           //for debug
 636   1      
 637   1      
 638   1              SPIWrite(TimerClock,0x0b);                 //address 2AH    /* 定时器周期设置寄存器 */   
 639   1      
 640   1              SPIWrite(TimerControl,0x02);       //address 2BH        /* 定时器控制寄存器 */    
 641   1              SPIWrite(TimerReload,0x42);            //address 2CH    /* 定时器初值寄存器 */   
 642   1         
 643   1              SPIWrite(InterruptEn,0x7f);                //address 06H    /* 中断使能/禁止寄存器 */     
 644   1      
 645   1      //      temp = SPIRead(InterruptEn);
 646   1              SPIWrite(Int_Req,0x7f);            //address 07H    /* 中断请求标识寄存器 */
 647   1              SPIWrite(MFOUTSelect,0x02);                //address 26H    /* mf OUT 选择配置寄存器 */     
 648   1      
 649   1      //设置调制器的输入源为内部编码器, 并且设置TX1和TX2
 650   1              SPIWrite(TxControl,0x5b);                  //address 11H    /* 发送控制寄存器 */ 
 651   1              SPIWrite(RxControl2,0x01);
 652   1      //      SPIWrite(RxControl1,0x73);
 653   1              SPIWrite(RxWait,0x05);
 654   1              if(mode ==2)
 655   1              {
 656   2                      SPIWrite(TypeSH,0x01);
 657   2              }
 658   1              else
 659   1              {
 660   2                      SPIWrite(TypeSH,0x00);
 661   2              }
 662   1      
 663   1      }
 664          
 665          /****************************************************************/
 666          /*名称: Command_Send */
 667          /*功能: 该函数实现向FM1702发送命令集的功能*/
 668          /*输入: count, 待发送命令集的长度*/
 669          /* buff, 指向待发送数据的指针*/
 670          /* Comm_Set, 命令码*/
 671          /*输出: TRUE, 命令被正确执行*/
 672          /* FALSE, 命令执行错误*/
 673          /****************************************************************/
 674          uchar Command_Send(uchar count, uchar idata *buff, uchar Comm_Set)
 675          {
C51 COMPILER V7.50   FM1702                                                                10/16/2007 16:33:32 PAGE 12  

 676   1      
 677   1              uint            j;
 678   1              uchar idata     temp, temp1;
 679   1              
 680   1              SPIWrite(Command,0x00);
 681   1              temp = Clear_FIFO();
 682   1              Write_FIFO(count, buff);
 683   1      
 684   1              
 685   1      //      temp = SPIRead(MFOUTSelect);
 686   1              SPIWrite(Command,Comm_Set);             /* 命令执行 */
 687   1              for(j = 0; j < RF_TimeOut; j++) /* 检查命令执行否 */
 688   1              {
 689   2      //              temp = SPIRead(MFOUTSelect);    //??
 690   2                      temp = SPIRead(Command);
 691   2                      temp1 = SPIRead(Int_Req) & 0x80;
 692   2                      if((temp == 0x00) || (temp1 == 0x80))
 693   2                      {
 694   3                              return TRUE;
 695   3                      }
 696   2              }
 697   1      
 698   1              return FALSE;
 699   1      }
 700          
 701          /****************************************************************/
 702          /*名称: Read_E2 */
 703          /*功能: 该函数实现从FM1702的EE中读出数据*/
 704          /*输入: lsb, EE地址(低字节) */
 705          /* msb, EE地址(高字节) */
 706          /* count, 待读出数据EE的字节个数*/
 707          /* buff, 指向待读出数据的指针*/
 708          /*输出: TRUE, EE数据正确读出*/
 709          /* FALSE, EE数据读出有误*/
 710          /****************************************************************/
 711          uchar Read_E2(uchar lsb, uchar msb, uchar count, uchar idata *buff)
 712          {
 713   1              
 714   1              uchar   temp;
 715   1              
 716   1              *buff = lsb;
 717   1              *(buff + 1) = msb;
 718   1              *(buff + 2) = count;
 719   1              temp = Command_Send(3, buff, ReadE2);
 720   1              Read_FIFO(buff);
 721   1              if(temp == FALSE) return(TRUE);
 722   1              return(FALSE);
 723   1      }
 724          
 725          /****************************************************************/
 726          /*名称: Write_E2 */
 727          /*功能: 该函数实现向FM1702的EE中写入数据*/
 728          /*输入: lsb, EE地址(低字节) */
 729          /* msb, EE地址(高字节) */
 730          /* count, 待写入数据EE的字节个数*/
 731          /* buff, 指向待写入数据的指针*/
 732          /*输出: TRUE, EE数据正确写入*/
 733          /* FALSE, EE数据写入有误*/
 734          /****************************************************************/
 735          uchar Write_E2(uchar lsb, uchar msb, uchar count, uchar idata *buff)
 736          {
 737   1      
C51 COMPILER V7.50   FM1702                                                                10/16/2007 16:33:32 PAGE 13  

 738   1              uchar idata     temp, i;
 739   1      
 740   1              for(i = 0; i < count; i++)
 741   1              {
 742   2                      *(buff + count - i + 2) = *(buff - i + count);
 743   2              }
 744   1      
 745   1              *buff = lsb;
 746   1              *(buff + 1) = msb;
 747   1              temp = Command_Send(count + 2, buff, WriteE2);
 748   1              temp = SPIRead(SecondaryStatus);
 749   1              temp = temp & 0x40;
 750   1              if(temp == 0x40)
 751   1              {
 752   2                      SPIWrite(Command,0x00);                 //added 2006/03/15
 753   2                      return TRUE;
 754   2              }
 755   1      
 756   1              return FALSE;
 757   1      }
 758          
 759          /****************************************************************/
 760          /*名称: MIF_Halt */
 761          /*功能: 该函数实现暂停MIFARE卡*/
 762          /*输入: N/A */
 763          /*输出: FM1702_OK: 应答正确*/
 764          /* FM1702_PARITYERR: 奇偶校验错*/
 765          /* FM1702_CRCERR: CRC校验错*/
 766          /* FM1702_NOTAGERR: 无卡*/
 767          /****************************************************************/
 768          uchar MIF_Halt(void)
 769          {
 770   1      
 771   1              uchar   temp;
 772   1              uint    i;
 773   1              
 774   1              SPIWrite(CRCPresetLSB,0x63);
 775   1              SPIWrite(CWConductance,0x3f);
 776   1              SPIWrite(ChannelRedundancy,0x03);
 777   1              *RevBuffer = RF_CMD_HALT;
 778   1              *(RevBuffer + 1) = 0x00;
 779   1              temp = Command_Send(2, RevBuffer, Transmit);
 780   1              if(temp == TRUE)

⌨️ 快捷键说明

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