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

📄 main.lst

📁 hs4905非接触卡读卡机芯片读t5557 的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 499                  TL2 = 0xff;//(uchar)(~maxCaptureTimeLow); 
 500                  TH2= 0xcf;//(uchar)((~maxCaptureTimeLow)>>8) ;          
 501                  currentMaxTimeHi = 0xcf;//~maxCaptureTimeHi;             
 502                  flag_tag_datarate_bigger=0;
 503                  
 504                  for(j=0;j<32;j++)               
 505                  {
 506                          autodection_data[j]=0;
 507                  }
 508                  for(i=0;i<0xf8;i++)
 509                  {
 510                          if(DEMOD_OUT == 0)              //等待低电平,超时退出
 511                                  break;
 512                  }
 513                  if(i>=0xf0)
 514                  {
 515                          return_00();
 516                          return;
 517                  }
 518                  for(i=0;i<0xf8;i++)
 519                  {
 520                          if(DEMOD_OUT == 1)              //等待高电平,超时退出
 521                                  break;
 522                  }
 523                  if(i>=0xf0)
 524                  {
 525                          return_00();
 526                          return;
 527                  }
 528                  ET2=1;
 529                  TR2=1;                                  //counter 2 start run,interrupt enable
 530                  flag_wait=1;
 531                  
 532                  while(flag_wait)                //counter 2 is runing 
 533                  {
 534                          for(i=0;i<0xf8;i++)
 535                          {
 536                                  if(DEMOD_OUT == 0)              //等待低电平,超时退出
 537                                          break;
 538                          }
 539                          if(i>=0xf0)
 540                          {
 541                                  return_00();
 542                                  return;
 543                          }
 544                  
 545                          
 546                          icr=count_module(); 
 547                          capt=icr-last_capture;
 548                          last_capture=icr;
C51 COMPILER V7.50   MAIN                                                                  08/14/2006 15:15:34 PAGE 10  

 549                          if ((capt>MaxCaptureHalfDateRate)&&(capt<MaxCaptureDateRate)) 
 550                                  break;  //1p hi,64个时钟
 551                          for(i=0;i<0xf8;i++)
 552                          {
 553                                  if(DEMOD_OUT == 1)              //等待高电平,超时退出
 554                                          break;
 555                          }
 556                          if(i>=0xf0)
 557                          {
 558                                  return_00();
 559                                  return;
 560                          }
 561                          
 562                          icr=count_module(); 
 563                          capt=icr-last_capture;
 564                          last_capture=icr;                               
 565                  }
 566                          
 567                  flag_RO_last_capt_half=0;
 568                  flag_invalid_edge_manchester=0;
 569                  count_autodection_bit=0;
 570                  array_subscript=0;
 571                  bit_subscript=0;
 572                          
 573          //      //manchester
 574                  times_capture_manchester=0;
 575                  while(flag_wait)                                //counter 2 is runing 
 576                  {
 577                          for(i=0;i<0xf8;i++)
 578                          {
 579                                  if(DEMOD_OUT == 1)              //,test low time 等待高电平,超时退出
 580                                          break;
 581                          }
 582                          
 583                          if(i>=0xf0)
 584                          {
 585                                  return_00();
 586                                  return;
 587                          }
 588                          
 589                          icr=count_module(); 
 590                          capt=icr-last_capture;
 591                          last_capture=icr;
 592                          if((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==0))
 593                          {       //0.5p low
 594                                  flag_invalid_edge_manchester=1;
 595                                  if((times_capture_manchester%2)==0)     
 596                                  {
 597                                          array_subscript=(count_autodection_bit>>3);
 598                                          bit_subscript=(count_autodection_bit%8);
 599                                          autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));                                       
 600                                  }
 601                                  count_autodection_bit++;
 602                          }
 603                          else if ((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==1))
 604                          {       //0.5p low
 605                                  flag_invalid_edge_manchester=0;
 606                          }
 607                          else if ((capt>MaxCaptureHalfDateRate)&&(capt<MaxCaptureDateRate))
 608                          {       //1p low
 609                                  if((times_capture_manchester%2)==0)     
 610                                  {
C51 COMPILER V7.50   MAIN                                                                  08/14/2006 15:15:34 PAGE 11  

 611                                          array_subscript=(count_autodection_bit>>3);
 612                                          bit_subscript=(count_autodection_bit%8);
 613                                          autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));                                       
 614                                  }
 615                                  count_autodection_bit++;                                        
 616                          }
 617                          times_capture_manchester++;
 618                          //----- 
 619                          for(i=0;i<0xf8;i++)
 620                          {
 621                                  if(DEMOD_OUT == 0)              //等待低电平,超时退出
 622                                          break;
 623                          }
 624                          if(i>=0xf0)
 625                          {
 626                                  return_00();
 627                                  return;
 628                          }
 629                          
 630                          icr=count_module(); 
 631                          capt=icr-last_capture;
 632                          last_capture=icr;       
 633                          if((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==0))
 634                          {       //0.5p hi
 635                                  flag_invalid_edge_manchester=1;
 636                                  if((times_capture_manchester%2)==0)     
 637                                  {
 638                                          array_subscript=(count_autodection_bit>>3);
 639                                          bit_subscript=(count_autodection_bit%8);
 640                                          autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));                                       
 641                                  }
 642                                  count_autodection_bit++;
 643                          }
 644                          else if ((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==1))
 645                          {               //0.5p hi
 646                                  flag_invalid_edge_manchester=0;
 647                          }
 648                          else if ((capt>MaxCaptureHalfDateRate)&&(capt<MaxCaptureDateRate))
 649                          {       //1p hi
 650                                  if((times_capture_manchester%2)==0)
 651                                  {
 652                                          array_subscript=(count_autodection_bit>>3);
 653                                          bit_subscript=(count_autodection_bit%8);
 654                                          autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));                                       
 655                                  }
 656                                  count_autodection_bit++;                                        
 657                          }
 658                          times_capture_manchester++;             
 659                  }
 660                          
 661                          
 662                          //数据提取:找标志头、找停止位、检查校验和,一旦正确提取数据退出循环
 663                  if(count_autodection_bit>64)
 664                  {
 665                          flag_header_found=0;
 666                          for (j=0;j<(count_autodection_bit-54);j++)              //找标志头9 bit 1
 667                          {
 668                                  array_subscript=(j>>3);
 669                                  bit_subscript=(j%8);
 670                                  if ((autodection_data[array_subscript]&(1<<bit_subscript))==0)  //不等于0,即可判断此位为1
 671                                  {
 672                                          flag_header_found=1;
C51 COMPILER V7.50   MAIN                                                                  08/14/2006 15:15:34 PAGE 12  

 673                                          for (k=(j+1);k<(j+10);k++)
 674                                          {
 675                                                  array_subscript=(k>>3);
 676                                                  bit_subscript=(k%8);
 677                                                  if ((autodection_data[array_subscript]&(1<<bit_subscript))==0) 
 678                                                  {
 679                                                          flag_header_found=0;
 680                                                  break;  
 681                                                  }                                       
 682                                          }
 683                                          if(flag_header_found==1) break;                                         
 684                                  }
 685                          }
 686                                  
 687                          flag_stop_found=0;
 688                          if (flag_header_found==1)//停止位
 689                          {
 690                                  array_subscript=((j+64)>>3);
 691                                  bit_subscript=((j+64)%8);
 692                                  if ((autodection_data[array_subscript]&(1<<bit_subscript))==0) flag_stop_found=1;
 693                          }
 694                                  
 695                          flag_line_check=0;
 696                          if (flag_stop_found==1) //行校验
 697                          {
 698                                  for (k=(j+10);k<(j+60);k=(k+5))
 699                                  {
 700                                          check=0;
 701                                          for(l=k;l<(k+4);l++)
 702                                          {
 703                                                  array_subscript=(l>>3);
 704                                                  bit_subscript=(l%8);
 705                                                  check=check^((autodection_data[array_subscript]>>bit_subscript)&1);
 706                                          }
 707                                          array_subscript=(l>>3);
 708                                          bit_subscript=(l%8);
 709                                          if ((autodection_data[array_subscript]&(1<<bit_subscript))!=(check<<bit_subscript))     
 710                                          {
 711                                                  flag_line_check=0;
 712                                                  break;
 713                                          }
 714                                          flag_line_check=1;                                      
 715                                  }
 716                          }                               
 717                                          
 718                          flag_column_check=0;
 719                          if (flag_line_check==1)         //列校验
 720                          {
 721                                  for(k=(j+10);k<(j+14);k++)
 722                                  {
 723                                          check=0;
 724                                          for(l=k;l<(k+50);l=(l+5))
 725                                          {
 726                                                  array_subscript=(l>>3);
 727                                                  bit_subscript=(l%8);
 728                                                  check=check^((autodection_data[array_subscript]>>bit_subscript)&1);                                                     
 729                                          }
 730                                          array_subscript=(l>>3);
 731                                          bit_subscript=(l%8);
 732                                          if ((autodection_data[array_subscript]&(1<<bit_subscript))!=(check<<bit_subscript))
 733                                          {
 734                                                  flag_column_check=0;
C51 COMPILER V7.50   MAIN                                                                  08/14/2006 15:15:34 PAGE 13  

 735                                                  break;
 736                                          }
 737                                          flag_column_check=1;    
 738                                  }
 739                          }
 740                                          
 741                          if (flag_column_check==1)               //提取数据
 742                          {
 743                                  custID=0;
 744                                  DataItem[0]=0;DataItem[1]=0;DataItem[2]=0;DataItem[3]=0;
 745                                  //客户ID
 746                                  bit_number=7;
 747                                  for (k=(j+10);k<(j+14);k++)
 748                                  {
 749                                          array_subscript=(k>>3);
 750                                          bit_subscript=(k%8);
 751                                          custID=(custID|(((autodection_data[array_subscript]&(1<<bit_subscript))>>bit_subscript)<<bit_number));
 752                                          bit_number--;                                           
 753                                  }

⌨️ 快捷键说明

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