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

📄 main.lst

📁 hs4905非接触卡读卡机芯片读t5557 的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 754                                  for (k=(j+15);k<(j+19);k++)
 755                                  {
 756                                          array_subscript=(k/8);
 757                                          bit_subscript=(k%8);
 758                                          custID=(custID|(((autodection_data[array_subscript]&(1<<bit_subscript))>>bit_subscript)<<bit_number));
 759                                          bit_number--;                                           
 760                                  }
 761                                  //data
 762                                  k=0;
 763                                  bit_number=7;
 764                                  for(l=(j+20);l<(j+59);l++)
 765                                  {
 766                                          if (((l-j-20)%5)!=4)
 767                                          {
 768                                                  array_subscript=(l>>3);
 769                                                  bit_subscript=(l%8);
 770                                                  DataItem[k]=(DataItem[k]|(((autodection_data[array_subscript]&(1<<bit_subscript))>>bit_subscript)<<bi
             -t_number));                                                                
 771                                                  
 772                                                  if (bit_number==0) 
 773                                                  {
 774                                                          bit_number=7;
 775                                                          k++;
 776                                                  }else bit_number--;
 777                                          } 
 778                                  }                                               
 779                          }
 780                  }                       
 781          
 782                  
 783                  
 784                  //{向PC返回响应信息
 785                  check_stat=0x14;
 786                  if (flag_column_check==1) 
 787                  {
 788                          check_stat=0;
 789                          flag_column_check=0;
 790                  }
 791                  tx_buff[0]=0x02;
 792                  tx_buff[1]=0x0a;
 793                  tx_buff[2]=0x86;
 794                  tx_buff[3]=check_stat;
 795                  tx_buff[4]=1;                           //RF/64
C51 COMPILER V7.50   MAIN                                                                  08/14/2006 15:15:34 PAGE 14  

 796                  tx_buff[5]=custID;
 797                  tx_buff[6]=DataItem[0];                 //
 798                  tx_buff[7]=DataItem[1];
 799                  tx_buff[8]=DataItem[2];
 800                  tx_buff[9]=DataItem[3];
 801                  tx_buff[10]=(tx_buff[1]^tx_buff[2]^tx_buff[3]^tx_buff[4]^tx_buff[5]^tx_buff[6]^tx_buff[7]^tx_buff[8]^tx_b
             -uff[9]);
 802                  tx_buff[11]=0x03;
 803                  trace(tx_buff,12);
 804          }
 805          */
 806          uchar Prepare_Cmd(uchar cmd) 
 807          {
 808   1          *forward_ptr++ = cmd; //start bit
 809   1          cmd = cmd>>1;
 810   1          *forward_ptr++ = cmd;       
 811   1          return 2;                           
 812   1      }
 813          
 814          uchar Prepare_Lock(void)
 815          {
 816   1              *forward_ptr++ = 0; 
 817   1              return 1;
 818   1      }
 819          
 820          uchar Prepare_Addr( uchar addr ) 
 821          {
 822   1              *forward_ptr++ = (addr>>2);  
 823   1              *forward_ptr++ = (addr>>1);
 824   1              *forward_ptr++ = addr; 
 825   1      
 826   1              return 3;                      //return number of emited bits
 827   1      }
 828          
 829          uchar Prepare_Data( uchar *data_tx) 
 830          {
 831   1              register uchar i, j;
 832   1              register uchar datas;
 833   1              for(j=1; j<5; j++) 
 834   1              {
 835   2                      datas = *(data_tx + j);
 836   2                      for(i=8; i>0; i--)
 837   2                      {
 838   3                              *forward_ptr++ = (datas >> (i-1));
 839   3                      }               
 840   2              }
 841   1              return 32;                             //return number of emited bits
 842   1      }
 843          
 844          
 845          // Forward Link setup function
 846          // Requires: forwarLink_data filled with valid bits (1 bit per byte)
 847          //           fwd_bit_count set with number of bits to be sent
 848          void SendForward(uchar fwd_bit_count) 
 849          {
 850   1              uchar sync=1;
 851   1              fwd_write_ptr = forwardLink_data;
 852   1              fwd_bit_sz = fwd_bit_count;
 853   1              fwd_bit_phase = 3;
 854   1              field_stop = fwd_1st_pulse;             //fwd_1st_pulse = 256-20
 855   1      
 856   1              TR0=0;
C51 COMPILER V7.50   MAIN                                                                  08/14/2006 15:15:34 PAGE 15  

 857   1              TH0=0xff;TL0=1;          //minimum startup pulse length,255
 858   1              MOD=0;                   
 859   1              TF0=0;                   
 860   1              ET0=0;                          //disable T0 interrupt         
 861   1              TMOD=(TMOD|0x05);                       //计数器,16位计数器
 862   1              TR0=1;     
 863   1      
 864   1        // waiting for clearing T0IE0 => command sending
 865   1              while (!TF0) 
 866   1              {
 867   2              if ((sync == 1) && (!DEMOD_OUT))  
 868   2                      sync = 0;
 869   2              if ((sync == 0) && (DEMOD_OUT))  
 870   2                      break;
 871   2              }
 872   1              MOD=1;                  //force 1st mod pulse
 873   1              fwd_bit_sz--;           //prepare next bit modulation
 874   1              fwd_write_ptr++;
 875   1              TF0=0;                  //clear any pending flag
 876   1              TR0=0;
 877   1              TH0=0xFF;TL0= 255-60;
 878   1              TR0=1;
 879   1              field_stop = fwd_01_stop;           
 880   1              fwd_bit_phase = 2;
 881   1              ET0=1;                 //enable overflow interrupt
 882   1      
 883   1        // waiting for clearing T0IE0 => command sending
 884   1              while ( ET0== 1 ) ;
 885   1      }
 886          
 887          /*
 888          void Wait(uint period) 
 889          {
 890                  TR2 = 0;                             
 891                  TF2=0;      
 892                  TL2=(uchar)(~period);  TH2=(uchar)((~period)>>8);                      
 893                  currentMaxTimeHi = 0xFF;
 894                  ET2=1;
 895                  TR2=1;                    
 896                  flag_wait=1;
 897                  while ( flag_wait);   
 898          }
 899          */
 900          
 901          //读卡程序, Manchester解码
 902          void ManchesterRead(void)
 903          {
 904   1              uchar i,j;
 905   1              uchar   captured_bits_count;
 906   1              //ClearCaptureBuffers();
 907   1              captured_bit_count = 0;
 908   1              capture_cnt = 0;
 909   1              captured_byte=0;
 910   1              capture_check=0;
 911   1              capture_check_count=0;
 912   1              buffer_capture_check=0;
 913   1              compute_capture_check=0;
 914   1              check_stat=0;
 915   1      
 916   1      //      for(i=0;i<128;i++)      //2006-5-13 14:19
 917   1      //      {
 918   1      //              capture_time[i]=0xff;
C51 COMPILER V7.50   MAIN                                                                  08/14/2006 15:15:34 PAGE 16  

 919   1      //      }       
 920   1              
 921   1              TR2 = 0; 
 922   1              TF2 = 0;      
 923   1              TL2 = 0;//(uchar)(~maxCaptureTimeLow);          //0xd7
 924   1              TH2 = 0;//(uchar)((~maxCaptureTimeLow)>>8);     //0xf0, //set timer with initial time
 925   1              currentMaxTimeHi = ~maxCaptureTimeHi;   //0xff
 926   1      
 927   1              last_capture = 0;//~maxCaptureTimeLow;          //~0x0f28
 928   1              capture_read_time_data_ptr = capture_time;              // capture ptr
 929   1      
 930   1              flag_wait=1;
 931   1              ET2=1;                          //enable t2 interrupt
 932   1      
 933   1              check_stat=ERR_EM4469_NEITHER_ACK;              //if read card ok,check_stat will change
 934   1      //      for(i=0;i<0xf0;i++)
 935   1      //      {
 936   1      //              if(DEMOD_OUT == 0)              //等待低电平,超时退出
 937   1      //                      break;
 938   1      //      }
 939   1      //      if(i>=0xf0)
 940   1      //      {
 941   1      //              for(i=0;i<120;i++)
 942   1      //              {
 943   1      //                      capture_time[i]=0xff;
 944   1      //              }
 945   1      //              return;
 946   1      //      }
 947   1      //      
 948   1      //      for(i=0;i<0xf0;i++)
 949   1      //      {
 950   1      //              if(DEMOD_OUT == 1)              //等待高电平,超时退出
 951   1      //                      break;
 952   1      //      }
 953   1      //      if(i>=0xf0)
 954   1      //      {
 955   1      //              for(i=0;i<120;i++)
 956   1      //              {
 957   1      //                      capture_time[i]=0xff;
 958   1      //              }
 959   1      //              return;
 960   1      //      }
 961   1              cap_count = 0;
 962   1              TR2=1;  //                   
 963   1              while ( flag_wait )             //接收
 964   1              {
 965   2                      for(i=0;i<0xf0;i++)
 966   2                      {
 967   3                              if(DEMOD_OUT == 0)
 968   3                                      break;
 969   3                      }
 970   2                      if(i>=0xf0)
 971   2                              return;
 972   2                      capture();                                      //hi电平时间
 973   2                      cap_count++;
 974   2                      for(i=0;i<0xf0;i++)
 975   2                      {
 976   3                              if(DEMOD_OUT == 1)
 977   3                                      break;
 978   3                      }
 979   2                      if(i>=0xf0)
 980   2                              return;
C51 COMPILER V7.50   MAIN                                                                  08/14/2006 15:15:34 PAGE 17  

 981   2                      capture();                                      //low电平时间
 982   2                      cap_count++;
 983   2                      if(cap_count > 150)
 984   2                              break;  
 985   2              }
 986   1              //capture_time[253]= cap_count;
 987   1              //trace(capture_time,254);
 988   1              check_stat=ERR_EM4469_NEITHER_ACK;
 989   1              for(j=0;j<10;j++)
 990   1              {
 991   2                      if(((halfDataRate*2+8)<capture_time[j])&&(capture_time[j]<(halfDataRate*3+8))
 992   2                      &&(capture_time[j+1]<MaxCaptureHalfDateRate)&&(capture_time[j+2]>MaxCaptureHalfDateRate)
 993   2                      &&(capture_time[j+2]<(halfDataRate*3+8)))
 994   2                              break;
 995   2              }
 996   1              if(j==10)
 997   1              {
 998   2                      check_stat=0xf1;
 999   2                      
1000   2                      return;
1001   2              }
1002   1              check_stat = UART_MESSAGE_OK;
1003   1              if(capture_time[j+2]<(halfDataRate*2+8))
1004   1              {
1005   2                      //bit_begin = 1;
1006   2                      store_bit(0);

⌨️ 快捷键说明

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