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

📄 fm1702.lst

📁 FM1702SL.rar
💻 LST
📖 第 1 页 / 共 5 页
字号:
 255   3                          status = Request(RF_CMD_REQUEST_ALL);               
 256   3                          if(status != FM1702_OK)
 257   3                          {
 258   4                              RevBuffer[0] = 1;
 259   4                              RevBuffer[1] = FM1702_REQERR;
 260   4                              break;
 261   4                          }
 262   3                      }
 263   2                              if(tagtype[0]==2)
 264   2                                      cardtype=mifarepro;     // Mifare Pro 卡
 265   2                              else if(tagtype[0]==4)
 266   2                                      cardtype=mifare1;       // Mifare One 卡
 267   2                              else if(tagtype[0]==16)
 268   2                                      cardtype=mifarelight;   // Mifare Light 卡
 269   2                              else
 270   2                                      cardtype=unknowncard;
 271   2      
 272   2                              RevBuffer[0]=3; 
 273   2                              RevBuffer[1]=status;
 274   2                              RevBuffer[2]=tagtype[0];
 275   2                              RevBuffer[3]=tagtype[1];
 276   2                              break;
 277   2                  case 3:                         // 防冲突 读卡的系列号 MLastSelectedSnr
 278   2                              status = AntiColl();;
 279   2                              if(status!=FM1702_OK)
 280   2                              {
 281   3                                      RevBuffer[0]=1; 
 282   3                                      RevBuffer[1]=FM1702_ANTICOLLERR;
 283   3                                      break;
 284   3                              }
 285   2                              //memcpy(MLastSelectedSnr,&RevBuffer[2],4);
 286   2                              RevBuffer[0]=5;
 287   2                              RevBuffer[1]=status;
 288   2                              RevBuffer[2]=UID[0];
 289   2                              RevBuffer[3]=UID[1];
 290   2                              RevBuffer[4]=UID[2];
 291   2                              RevBuffer[5]=UID[3];
 292   2                              break;  
 293   2                      case 4:                             // 选择卡 Select Card
 294   2                              status=Select_Card();
 295   2                              if(status!=FM1702_OK)
 296   2                              {
 297   3                                      RevBuffer[0]=1; 
 298   3                                      RevBuffer[1]=FM1702_SELERR;
 299   3                                      break;
 300   3                              }
 301   2                              RevBuffer[0]=1;
 302   2                              RevBuffer[1]=status;                    
 303   2                              break;
C51 COMPILER V7.50   FM1702                                                                10/16/2007 16:33:32 PAGE 6   

 304   2              case 6:                        //下载密钥
 305   2                              status = Load_keyE2_CPY(RevBuffer[2],RevBuffer[1]);   //%40
 306   2                              status = Authentication(UID, RevBuffer[2], RevBuffer[1]);       
 307   2                      if(status != FM1702_OK)
 308   2                      {
 309   3                              RevBuffer[0]=1;
 310   3                                  RevBuffer[1]=status;
 311   3                                  break;
 312   3                      }
 313   2                              RevBuffer[0]=1;
 314   2                              RevBuffer[1]=status;                    
 315   2                              break;  
 316   2                      case 8:                       //读卡
 317   2                              status=MIF_READ(&RevBuffer[2],RevBuffer[1]);
 318   2                              if(status != FM1702_OK)
 319   2                              {
 320   3                                  RevBuffer[0]=1;
 321   3                                  RevBuffer[1]=status;
 322   3                                  break;
 323   3                              }
 324   2                              else
 325   2                              {
 326   3                                      if(cardtype==mifare1||cardtype==mifarepro)
 327   3                                              RevBuffer[0]=17;
 328   3                                      else if(cardtype==1)
 329   3                                              RevBuffer[0]=9;
 330   3                                      else
 331   3                                              RevBuffer[0]=16;
 332   3                              }
 333   2                              RevBuffer[1]=status;                    
 334   2                              break;  
 335   2                      case 9:                  //写卡
 336   2                              status=MIF_Write(&RevBuffer[2],RevBuffer[1]);
 337   2                              RevBuffer[0]=1;
 338   2                              RevBuffer[1]=status;                    
 339   2                              break;  
 340   2                      case 10:                //加值减值
 341   2                              if(RevBuffer[1] == RF_CMD_INC)
 342   2                              {
 343   3                                  status = MIF_Increment(&RevBuffer[3],RevBuffer[2]);
 344   3                                  MIF_Transfer(RevBuffer[2]);
 345   3                              }
 346   2                              else if(RevBuffer[1] == RF_CMD_DEC)
 347   2                              {
 348   3                                  status = MIF_Decrement(&RevBuffer[3],RevBuffer[2]);   
 349   3                                  MIF_Transfer(RevBuffer[2]);
 350   3                              }
 351   2                              else
 352   2                              {
 353   3                                  status = 1;
 354   3                              }
 355   2                              RevBuffer[0]=1; 
 356   2                              RevBuffer[1]=status;
 357   2                              break;
 358   2                      case 12:    
 359   2                              RevBuffer[0]=1;
 360   2                              RevBuffer[1]=0;
 361   2                              break;
 362   2                      default:
 363   2                          RevBuffer[0] = 1;
 364   2                          RevBuffer[1] = 1;
 365   2                          break;      
C51 COMPILER V7.50   FM1702                                                                10/16/2007 16:33:32 PAGE 7   

 366   2              }
 367   1      }
 368          
 369          
 370          void delay1(unsigned char dlength)
 371          { 
 372   1        unsigned char i;
 373   1        for (i=0;i<dlength;i++)
 374   1        {
 375   2             _nop_();
 376   2        }
 377   1      }
 378          
 379          /****************************************************************/
 380          /*名称: Clear_FIFO */
 381          /*功能: 该函数实现清空FM1702中FIFO的数据*/
 382          /*输入: N/A */
 383          /*输出: TRUE, FIFO被清空*/
 384          /* FALSE, FIFO未被清空*/
 385          /****************************************************************/
 386          uchar Clear_FIFO(void)
 387          {
 388   1              uchar   temp;
 389   1              uint    i;
 390   1              temp = SPIRead(Control);                        /* 清空FIFO */
 391   1              temp = (temp | 0x01);
 392   1              SPIWrite(Control,temp);
 393   1              for(i = 0; i < RF_TimeOut; i++) /* 检查FIFO是否被清空 */
 394   1              {
 395   2                      temp = SPIRead(FIFO_Length);
 396   2                      if(temp == 0)
 397   2                      {
 398   3                              return TRUE;
 399   3                      }
 400   2              }
 401   1      
 402   1              return FALSE;
 403   1      }
 404          
 405          /****************************************************************/
 406          /*名称: Write_FIFO */
 407          /*功能: 该函数实现向FM1702的FIFO中写入x bytes数据*/
 408          /*输入: count, 待写入字节的长度*/
 409          /* buff, 指向待写入数据的指针*/
 410          /*输出: N/A */
 411          /****************************************************************/
 412          void Write_FIFO(uchar count, uchar idata *buff)
 413          {
 414   1              uchar   i;
 415   1              
 416   1              for(i = 0; i < count; i++)
 417   1              {
 418   2                      SPIWrite(FIFO,*(buff + i));
 419   2              }
 420   1      }
 421          
 422          /****************************************************************/
 423          /*名称: Read_FIFO */
 424          /*功能: 该函数实现从FM1702的FIFO中读出x bytes数据*/
 425          /*输入: buff, 指向读出数据的指针*/
 426          /*输出: N/A */
 427          /****************************************************************/
C51 COMPILER V7.50   FM1702                                                                10/16/2007 16:33:32 PAGE 8   

 428          uchar Read_FIFO(uchar idata *buff)
 429          {
 430   1              uchar   temp;
 431   1              uchar   i;
 432   1              
 433   1              temp = SPIRead(FIFO_Length);
 434   1              if(temp == 0)
 435   1              {
 436   2                      return 0;
 437   2              }
 438   1      
 439   1              if(temp >= 24)          
 440   1              {
 441   2              
 442   2                      temp = 24;      
 443   2              }
 444   1      
 445   1              for(i = 0; i < temp; i++)
 446   1              {
 447   2                      *(buff + i) = SPIRead(FIFO);
 448   2              }
 449   1      
 450   1              return temp;
 451   1      }
 452          
 453          /****************************************************************/
 454          /*名称: Judge_Req */
 455          /*功能: 该函数实现对卡片复位应答信号的判断*/
 456          /*输入: *buff, 指向应答数据的指针*/
 457          /*输出: TRUE, 卡片应答信号正确*/
 458          /* FALSE, 卡片应答信号错误*/
 459          /****************************************************************/
 460          uchar Judge_Req(uchar idata *buff)
 461          {
 462   1              
 463   1              uchar   temp1, temp2;
 464   1              
 465   1              temp1 = *buff;
 466   1              temp2 = *(buff + 1);
 467   1              if((temp1 == 0x02) || (temp1 == 0x04) || (temp1 == 0x05) || (temp1 == 0x53) || (temp1 == 0x03))
 468   1              {
 469   2                      if (temp2 == 0x00)
 470   2                      {
 471   3                              return TRUE;
 472   3                      }
 473   2              }
 474   1              return FALSE;
 475   1      }
 476          
 477          /****************************************************************/
 478          /*名称: Check_UID */
 479          /*功能: 该函数实现对收到的卡片的序列号的判断*/
 480          /*输入: N/A */
 481          /*输出: TRUE: 序列号正确*/
 482          /* FALSE: 序列号错误*/
 483          /****************************************************************/
 484          uchar Check_UID(void)
 485          {
 486   1              
 487   1              uchar   temp;
 488   1              uchar   i;
 489   1              
C51 COMPILER V7.50   FM1702                                                                10/16/2007 16:33:32 PAGE 9   

 490   1              temp = 0x00;
 491   1              for(i = 0; i < 5; i++)
 492   1              {
 493   2                      temp = temp ^ UID[i];
 494   2              }
 495   1      
 496   1              if(temp == 0)
 497   1              {
 498   2                      return TRUE;
 499   2              }
 500   1      
 501   1              return FALSE;
 502   1      }
 503          
 504          /****************************************************************/
 505          /*名称: Save_UID */
 506          /*功能: 该函数实现保存卡片收到的序列号*/
 507          /*输入: row: 产生冲突的行*/
 508          /* col: 产生冲突的列*/
 509          /* length: 接収到的UID数据长度*/
 510          /*输出: N/A */
 511          /****************************************************************/
 512          void Save_UID(uchar row, uchar col, uchar length)
 513          {
 514   1              uchar   i;
 515   1              uchar   temp;
 516   1              uchar   temp1;
 517   1              

⌨️ 快捷键说明

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