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

📄 main.lst

📁 EM4095 程序 可以参考下 keil 下编译!
💻 LST
📖 第 1 页 / 共 5 页
字号:
 742   4                                      bit_subscript=(k%8);
 743   4                                      custID=(custID|(((autodection_data[array_subscript]&(1<<bit_subscript))>>bit_subscript)<<bit_number));
 744   4                                      bit_number--;                                           
 745   4                              }
 746   3                              //data
 747   3                              k=0;
 748   3                              bit_number=7;
 749   3                              for(l=(j+20);l<(j+59);l++)
 750   3                              {
 751   4                                      if (((l-j-20)%5)!=4)
 752   4                                      {
 753   5                                              array_subscript=(l>>3);
 754   5                                              bit_subscript=(l%8);
 755   5                                              DataItem[k]=(DataItem[k]|(((autodection_data[array_subscript]&(1<<bit_subscript))>>bit_subscript)<<bi
             -t_number));                                                                
 756   5                                              
 757   5                                              if (bit_number==0) 
 758   5                                              {
 759   6                                                      bit_number=7;
 760   6                                                      k++;
 761   6                                              }else bit_number--;
 762   5                                      } 
 763   4                              }                                               
 764   3                      }
 765   2              }                       
 766   1      
 767   1              
 768   1              
 769   1              //{向PC返回响应信息
 770   1              check_stat=0x14;
 771   1              if (flag_column_check==1) 
 772   1              {
 773   2                      check_stat=0;
 774   2                      flag_column_check=0;
 775   2              }
 776   1              tx_buff[0]=0x02;
 777   1              tx_buff[1]=0x0a;
 778   1              tx_buff[2]=0x86;
 779   1              tx_buff[3]=check_stat;
 780   1              tx_buff[4]=1;                           //RF/64
 781   1              tx_buff[5]=custID;
 782   1              tx_buff[6]=DataItem[0];                 //
 783   1              tx_buff[7]=DataItem[1];
 784   1              tx_buff[8]=DataItem[2];
 785   1              tx_buff[9]=DataItem[3];
 786   1              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]);
 787   1              tx_buff[11]=0x03;
 788   1              trace(tx_buff,12);
 789   1      }
 790          
 791          uchar Prepare_Cmd( uchar cmd ) 
 792          {
 793   1              register uchar line_parity;
 794   1      
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 14  

 795   1          *forward_ptr++ = 0;               //start bit
 796   1          *forward_ptr++ = 0;               
 797   1      
 798   1              *forward_ptr++ = cmd;
 799   1              line_parity = cmd;
 800   1              cmd >>= 1;
 801   1              *forward_ptr++ = cmd;
 802   1              line_parity ^= cmd;
 803   1               cmd >>= 1;
 804   1              *forward_ptr++ = cmd;
 805   1              line_parity ^= cmd;
 806   1              *forward_ptr++ = (line_parity & 1);     
 807   1          return 6;                           
 808   1      }
 809          
 810          
 811          uchar Prepare_Addr( uchar addr ) 
 812          {
 813   1              register uchar line_parity;
 814   1              *forward_ptr++ = addr;
 815   1              line_parity = addr;
 816   1              addr >>= 1;  
 817   1              *forward_ptr++ = addr;
 818   1              line_parity ^= addr;
 819   1              addr >>= 1;  
 820   1              *forward_ptr++ = addr;
 821   1              line_parity ^= addr;
 822   1              addr >>= 1;  
 823   1              *forward_ptr++ = addr;
 824   1              line_parity ^= addr;
 825   1              *forward_ptr++ = 0;
 826   1              *forward_ptr++ = 0;
 827   1              *forward_ptr++ = (line_parity & 1);
 828   1              return 7;                      //return number of emited bits
 829   1      }
 830          
 831          
 832          
 833          uchar Prepare_Data( uint data_low, uint data_hi) 
 834          {
 835   1              register uchar line_parity;
 836   1              register uchar column_parity;
 837   1              register uchar i, j;
 838   1              register uint datas;
 839   1      
 840   1              datas = data_low;
 841   1              column_parity = 0;
 842   1      
 843   1              for(i=0; i<4; i++) 
 844   1              {
 845   2              line_parity = 0;
 846   2              for(j=0; j<8; j++) 
 847   2              {
 848   3                      line_parity ^= datas;
 849   3                      column_parity ^= (datas&1) << j;
 850   3                      *forward_ptr++ = datas;
 851   3                      datas >>= 1;
 852   3              }
 853   2              *forward_ptr++ = line_parity;
 854   2              if(i == 1)
 855   2                      datas = data_hi;
 856   2              }
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 15  

 857   1      
 858   1              for(j=0; j<8; j++) 
 859   1              {
 860   2              *forward_ptr++ = column_parity;
 861   2              column_parity >>= 1;
 862   2              }
 863   1              *forward_ptr = 0;
 864   1      
 865   1              return 45;                             //return number of emited bits
 866   1      }
 867          
 868          // Forward Link setup function
 869          // Requires: forwarLink_data filled with valid bits (1 bit per byte)
 870          //           fwd_bit_count set with number of bits to be sent
 871          void SendForward(uchar fwd_bit_count) 
 872          {
 873   1              uchar sync=1;
 874   1              fwd_write_ptr = forwardLink_data;
 875   1              fwd_bit_sz = fwd_bit_count;
 876   1              fwd_bit_phase = 3;
 877   1              field_stop = fwd_1st_pulse;             //fwd_1st_pulse = 256-20
 878   1      
 879   1              TR0=0;
 880   1              TH0=0xff;TL0=1;          //minimum startup pulse length,255
 881   1              MOD=0;                   
 882   1              TF0=0;                   
 883   1              ET0=0;                          //disable T0 interrupt         
 884   1              TMOD=(TMOD|0x05);                       //计数器,16位计数器
 885   1              TR0=1;     
 886   1      
 887   1        // waiting for clearing T0IE0 => command sending
 888   1              while (!TF0) 
 889   1              {
 890   2              if ((sync == 1) && (!DEMOD_OUT))  
 891   2                      sync = 0;
 892   2              if ((sync == 0) && (DEMOD_OUT))  
 893   2                      break;
 894   2              }
 895   1              MOD=1;                  //force 1st mod pulse
 896   1              fwd_bit_sz--;           //prepare next bit modulation
 897   1              fwd_write_ptr++;
 898   1              TF0=0;                  //clear any pending flag
 899   1              TR0=0;
 900   1              TH0=0xFF;TL0= field_stop;
 901   1              TR0=1;
 902   1              field_stop = fwd_01_stop;           
 903   1              fwd_bit_phase = 2;
 904   1              ET0=1;                 //enable overflow interrupt
 905   1      
 906   1        // waiting for clearing T0IE0 => command sending
 907   1              while ( ET0== 1 ) ;
 908   1      }
 909          
 910          
 911          void Wait(uint period) 
 912          {
 913   1              TR2 = 0;                             
 914   1              TF2=0;      
 915   1              TL2=(uchar)(~period);  TH2=(uchar)((~period)>>8);                      
 916   1              currentMaxTimeHi = 0xFF;
 917   1              ET2=1;
 918   1              TR2=1;                    
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 16  

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

 981   2                      return;
 982   2              }
 983   1              
 984   1              TR2=1;  //                   
 985   1              while ( flag_wait )             //接收
 986   1              {
 987   2                      for(i=0;i<0xf0;i++)
 988   2                      {
 989   3                              if(DEMOD_OUT == 0)
 990   3                                      break;

⌨️ 快捷键说明

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