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

📄 main.lst

📁 EM4095 程序 可以参考下 keil 下编译!
💻 LST
📖 第 1 页 / 共 5 页
字号:
 242   3                                      break;
 243   3                              case 0x83 :
 244   3                                      Disable();
 245   3                                      break;
 246   3                              case 0x84 : 
 247   3                                      PCLinkReader();         //PC要求与读卡器连接
 248   3                                      break;
 249   3                              case 0x85 : 
 250   3                                      //DefaultRead();                //
 251   3                                      break;
 252   3                              case 0x86 : 
 253   3                                      Readonly_autodetection();               //只读,自动检测,可读4100,配置4469,读4469
 254   3                                      break;                  
 255   3                              case 0xFB :
 256   3                                      GetReaderConfiguration();               //读取读卡器的配置参数
 257   3                                      break;
 258   3                              case 0xFC :
 259   3                                      SetReaderConfiguration();               //设置读卡器的配置参数
 260   3                                      break;
 261   3                              case 0xFD :
 262   3                                      ReadStatusToPC();                               //读卡
 263   3                                      break;
 264   3                              case 0xFE : 
 265   3                                      FieldSwitch();
 266   3                                      break;          
 267   3                              default : 
 268   3                                      break;
 269   3                      }
 270   2              }
 271   1      }
 272          
 273          //读卡数据,区地址=rx_buff[3],发送到PC,本版本支持的PC演示软件可以看到相应的数据
 274          void ReadWordToPC(void)
 275          {
 276   1              uchar fwd_bit_count;    
 277   1              fwd_bit_count = Prepare_Cmd( FWD_CMD_READ );
 278   1              fwd_bit_count += Prepare_Addr(rx_buff[3]);
 279   1              SendForward(fwd_bit_count);             
 280   1              Wait(tpp_period);                 
 281   1              maxCaptureTimeLow = maxTRead;           //=3880
 282   1              maxCaptureTimeHi = 0;             
 283   1              ManchesterRead();                       
 284   1              tx_buff[0]=0x02;                //帧头
 285   1              tx_buff[1]=0x09;                //帧信息长度,从tx_buff[2]开始计算,到tx_buff[10]=0x03结束
 286   1              tx_buff[2]=0x80;                //命令字
 287   1              tx_buff[3]=check_stat;
 288   1              tx_buff[4]=rx_buff[3];          //地址
 289   1              tx_buff[5]=capture_data[0];     //数据
 290   1              tx_buff[6]=capture_data[1];     //数据
 291   1              tx_buff[7]=capture_data[2];     //数据
 292   1              tx_buff[8]=capture_data[3];     //数据
 293   1              tx_buff[9]=(tx_buff[1]^tx_buff[2]^tx_buff[3]^tx_buff[4]^tx_buff[5]^tx_buff[6]^tx_buff[7]^tx_buff[8]);
 294   1              //tx_buff[9]是校验和
 295   1              tx_buff[10]=0x03;               //帧结束标志
 296   1              trace(tx_buff,11);              //发送到PC 11个字节
 297   1      }
 298          
 299          //写PC传过来的数据到ID卡上
 300          void WriteWordtoCard(void)
 301          {
 302   1              uchar fwd_bit_count;
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 6   

 303   1      
 304   1              fwd_bit_count = Prepare_Cmd( FWD_CMD_WRITE );
 305   1              fwd_bit_count += Prepare_Addr(rx_buff[3]);
 306   1              fwd_bit_count += Prepare_Data(( ((uint)rx_buff[5] << 8) + rx_buff[4]), ( ((uint)rx_buff[7] << 8) + rx_b
             -uff[6]));
 307   1              if (rx_buff[3] == 0x04)
 308   1              {                       //32位配置字
 309   2                      
 310   2                      halfDataRate = 32;// datarate = RF/64
 311   2                      MaxCaptureHalfDateRate = halfDataRate + (halfDataRate >> 1);    //=48
 312   2                      MaxCaptureDateRate = halfDataRate + halfDataRate + (halfDataRate >> 1);         //=80
 313   2                      lwr = config_lwr;
 314   2                      delayed = config_delayed;
 315   2                      raw = config_raw;
 316   2                      //forward_link_type = 0x01; 
 317   2                      maxTLogin = 4 + (4 + 9) * 2 * (uint)halfDataRate;
 318   2                      maxTWrite = 1144 + (4 + 8) * 2 * (uint)halfDataRate;
 319   2                      maxTWriteRaw = 1144 + (4 + 5 + 54) * 2 * (uint)halfDataRate;
 320   2                      maxTRead = (100) + 4 + (5 + 54) * 2 * (uint)halfDataRate;
 321   2                      maxTDisable = maxTLogin;
 322   2                      maxTDefaultRead = 2*((lwr-4)*4*8)*2*((uint32)halfDataRate);
 323   2                      tpp_period = 4 + 2 * (uint)halfDataRate - 4;
 324   2                      twr_period = (68 + 64 + 896 + 116) + 2 * (uint)halfDataRate - 4;
 325   2              }
 326   1      
 327   1              SendForward(fwd_bit_count);     
 328   1              Wait(twr_period);
 329   1              maxCaptureTimeHi = 0;
 330   1              maxCaptureTimeLow = maxTWrite;
 331   1              
 332   1              ManchesterWrite();
 333   1      
 334   1              tx_buff[0]=0x02;
 335   1              tx_buff[1]=0x04;
 336   1              tx_buff[2]=0x81;
 337   1              tx_buff[3]=check_stat;
 338   1              tx_buff[4]=(tx_buff[1]^tx_buff[2]^tx_buff[3]);
 339   1              tx_buff[5]=0x03;
 340   1              trace(tx_buff,6);
 341   1      }
 342          
 343          //控制天线命令
 344          void FieldSwitch(void)
 345          {
 346   1              if (rx_buff[3] & 1 )
 347   1              {
 348   2                      SHD=0;                  //打开天线
 349   2              }
 350   1              else 
 351   1              {
 352   2                      SHD=1;                  // 关闭天线
 353   2              }
 354   1              tx_buff[0]=0x02;                //帧头
 355   1              tx_buff[1]=0x04;                //长度
 356   1              tx_buff[2]=0xfe;                //命令
 357   1              tx_buff[3]=0;
 358   1              tx_buff[4]=(tx_buff[1]^tx_buff[2]^tx_buff[3]);          //检验和
 359   1              tx_buff[5]=0x03;                //帧结束
 360   1              trace(tx_buff,6);
 361   1      }
 362          
 363          //不可用,匹配PC演示程序,直接返回 设置成功
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 7   

 364          void SetReaderConfiguration(void)
 365          {
 366   1              tx_buff[0]=0x02;
 367   1              tx_buff[1]=0x04;
 368   1              tx_buff[2]=0xfc;
 369   1              tx_buff[3]=0;
 370   1              tx_buff[4]=(tx_buff[1]^tx_buff[2]^tx_buff[3]);
 371   1              tx_buff[5]=0x03;
 372   1              trace(tx_buff,6);
 373   1      }
 374          
 375          //读取DEMO读卡器的配置参数
 376          void GetReaderConfiguration(void)
 377          {
 378   1              uchar q;        
 379   1              q = 1;                                   
 380   1              get_settings_low = (q<<6) | (halfDataRate - 1);
 381   1              q = (q >> 2) | (delayed << 4) | ((lwr & 3) << 6);
 382   1              get_settings_low |= (uint)q << 8;
 383   1              get_settings_hi = ((raw << 6) | (lwr >> 2));// | (forward_link_type >> 1);
 384   1      
 385   1              tx_buff[0]=0x02;
 386   1              tx_buff[1]=0x08;
 387   1              tx_buff[2]=0xfb;
 388   1              tx_buff[3]=0;
 389   1              tx_buff[4]=(uchar)get_settings_low;
 390   1              tx_buff[5]=get_settings_low>>8;
 391   1              tx_buff[6]=(uchar)get_settings_hi;
 392   1              tx_buff[7]=get_settings_hi>>8;
 393   1              tx_buff[8]=(tx_buff[1]^tx_buff[2]^tx_buff[3]^tx_buff[4]^tx_buff[5]^tx_buff[6]^tx_buff[7]);
 394   1              tx_buff[9]=0x03;
 395   1              trace(tx_buff,10);
 396   1      }
 397          
 398          void Disable(void)
 399          {
 400   1              uchar fwd_bit_count;
 401   1          fwd_bit_count = Prepare_Cmd( FWD_CMD_DISABLE );
 402   1          fwd_bit_count += Prepare_Data( 0xFFFF, 0xFFFF );
 403   1          SendForward(fwd_bit_count);    
 404   1          Wait(tpp_period);      
 405   1          maxCaptureTimeLow = maxTDisable; 
 406   1          maxCaptureTimeHi = 0;
 407   1      
 408   1              ManchesterRead();
 409   1      
 410   1              tx_buff[0]=0x02;
 411   1              tx_buff[1]=0x04;
 412   1              tx_buff[2]=0x83;
 413   1              tx_buff[3]=check_stat;
 414   1              tx_buff[4]=(tx_buff[1]^tx_buff[2]^tx_buff[3]);
 415   1              tx_buff[5]=0x03;
 416   1              trace(tx_buff,6);
 417   1      }
 418          
 419          void Login(void)
 420          {
 421   1              uchar fwd_bit_count;
 422   1              fwd_bit_count = Prepare_Cmd( FWD_CMD_LOGIN );
 423   1              fwd_bit_count += Prepare_Data(( ((uint)rx_buff[4] << 8) + rx_buff[3]), ( ((uint)rx_buff[6] << 8) + rx_buf
             -f[5]));
 424   1              SendForward(fwd_bit_count);
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 8   

 425   1              Wait(tpp_period);
 426   1              maxCaptureTimeLow = maxTLogin; 
 427   1          maxCaptureTimeHi = 0;
 428   1              ManchesterWrite();
 429   1              tx_buff[0]=0x02;
 430   1              tx_buff[1]=0x04;
 431   1              tx_buff[2]=0x82;
 432   1              tx_buff[3]=check_stat;
 433   1              tx_buff[4]=(tx_buff[1]^tx_buff[2]^tx_buff[3]);
 434   1              tx_buff[5]=0x03;
 435   1              trace(tx_buff,6);
 436   1      }
 437          
 438            
 439          void PCLinkReader(void)
 440          {
 441   1              tx_buff[3]=UART_MESSAGE_OK;
 442   1              tx_buff[0]=0x02;
 443   1              tx_buff[1]=0x04;
 444   1              tx_buff[2]=0x84;
 445   1              tx_buff[4]=(tx_buff[1]^tx_buff[2]^tx_buff[3]);
 446   1              tx_buff[5]=0x03;
 447   1              trace(tx_buff,6);
 448   1              speak_on();
 449   1      }
 450          
 451          void Readonly_autodetection(void)
 452          {
 453   1              uchar i,j,k,l;
 454   1              
 455   1              uchar idata autodection_data[32];
 456   1              uchar array_subscript;  //小标
 457   1              uchar bit_subscript;            
 458   1              uint capt;
 459   1              uint icr; 
 460   1              bit flag_RO_last_capt_half=0;           
 461   1              uchar count_autodection_bit=0;
 462   1              bit flag_header_found=0;                
 463   1              bit flag_stop_found=0;          
 464   1              bit flag_line_check=0;          
 465   1              bit flag_column_check=0;                
 466   1              uchar check=0;          
 467   1              uchar custID=0;
 468   1              uchar idata DataItem[4]={0,0,0,0};
 469   1              uchar bit_number;
 470   1              bit flag_tag_datarate_bigger;           
 471   1              bit flag_invalid_edge_manchester;       
 472   1              uchar times_capture_manchester; 
 473   1         
 474   1              //halfDataRate = 32;//config_data_rate+1;
 475   1              MaxCaptureHalfDateRate = 48;//halfDataRate+(halfDataRate>>1);
 476   1              MaxCaptureDateRate = 80;//halfDataRate+halfDataRate+(halfDataRate>>1);
 477   1              //lwr = 7;//config_lwr;
 478   1              //maxTDefaultRead = 0x3000;//2*((lwr-4)*4*8)*2*((uint32)halfDataRate);
 479   1              maxCaptureTimeLow = 0x3000;//(uint)maxTDefaultRead; 
 480   1              maxCaptureTimeHi = 0x30;//(uchar)(maxTDefaultRead >> 16);
 481   1              last_capture = 0xcfff;//~maxCaptureTimeLow; 
 482   1              TF2 = 0;
 483   1              TR2 = 0;                      
 484   1              TL2 = 0xff;//(uchar)(~maxCaptureTimeLow); 
 485   1              TH2= 0xcf;//(uchar)((~maxCaptureTimeLow)>>8) ;          
 486   1              currentMaxTimeHi = 0xcf;//~maxCaptureTimeHi;             
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 9   

 487   1              flag_tag_datarate_bigger=0;
 488   1              
 489   1              for(j=0;j<32;j++)               
 490   1              {

⌨️ 快捷键说明

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