📄 main.lst
字号:
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 + -