📄 duxiexitongrc500.lst
字号:
280 ////////////////////////////////////////////////////
281 /*从FIFO读出数据从串口发送出来显示*/
282 void READ_data(uchar length)
283 {
284 1 uchar i;
285 1
286 1 for(i=0;i<length;i++)
287 1 {
288 2 readdata[i]=buffer[i];
289 2 //sen(readdata[i]);
290 2 }
291 1 }
292 /////////////////////////////////////////////////////////////////
293 uchar Read_FIFO(uchar idata*buff) // 读FIFO
294 {
295 1 uchar temp;
296 1 uchar i;
297 1 ////sen(FIFO_Length);
298 1 temp=FIFO_Length;
299 1 if(temp==0)
300 1 {
301 2 return 0;
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 6
302 2 }
303 1 if(temp>=24)
304 1 {
305 2 temp=24;
306 2 }
307 1 for(i=0;i<temp; i++)
308 1 {
309 2 *(buff+i)=FIFO;
310 2
311 2 }
312 1 return temp;
313 1 }
314
315 /////////////////////////////////////////////////////////////////////////
316 uchar Command_Send(uchar count,uchar idata*buff,uchar Comm_Set) //命令传输
317 { uint j;
318 1
319 1 uchar idata temp,temp1;
320 1 //Int_Req=0x7f;
321 1 Command=0x00;
322 1 Clear_FIFO();
323 1 Write_FIFO(count,buff);
324 1 //sen(FIFO_Length);
325 1 //Rxcontrol2=0x01;
326 1 temp=MFOUTSelect;
327 1 Command=Comm_Set;
328 1 for(j=0;j<RF_TimeOUT;j++)
329 1 {
330 2 temp=MFOUTSelect;
331 2 temp=Command;
332 2 temp1=Int_Req&0x80;
333 2 if((temp==0x00)||(temp1==0x80))
334 2 {
335 3 ////sen(0x71);
336 3 return TRUE;
337 3 }
338 2 }
339 1
340 1 ////sen(0x70);
341 1 return FALSE;
342 1 }
343 ////////////////////////////////////////////////////
344 void DelayMS(uchar j)
345 {
346 1 uchar i,n;
347 1 for(i=0;i<j;i++)
348 1 { for(n=0;n<230;n++);
349 2 }
350 1 }
351 ////////////////////////////////////////////////////
352 uchar Request(uchar mode) // 请求
353 {
354 1 uchar idata temp;
355 1
356 1 CRCPresetLSB=0x63; //CRC预置寄存器低八位
357 1 // Rxcontrol2=0x41;
358 1 CWConductance=0x3f; //选择发射脚TX1和TX2发射天线的阻抗
359 1 buffer[0]=mode;
360 1 Bit_Frame=0x07; //调整面向bit的帧格式
361 1 ChannelRedundancy=0x03; //选择数据校验种类和模式
362 1 temp=Control;//各种控制标志寄存器
363 1 temp=temp&(0xf7);
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 7
364 1 Control=temp;
365 1 temp=Command_Send(1,buffer,Transceive);
366 1 if(temp==FALSE)
367 1 {
368 2 //P14=0;
369 2 return RC500_NOTAGERR; //无卡
370 2 }
371 1 Read_FIFO(buffer);
372 1 temp=judge_Req(buffer);//卡片复位应答信号的判断*/
373 1 //sen(FIFO_Length);
374 1 if(temp==TRUE)
375 1 {
376 2 //DelayMS(1000);
377 2
378 2 //P14=0;
379 2
380 2 //DelayMS(1000); //控制小喇叭
381 2
382 2 //P14=1;
383 2 //MI=FALSE;
384 2 tagtype[0]=buffer[0];
385 2 tagtype[1]=buffer[1];
386 2 return RC500_OK; //应答正确
387 2 }
388 1 return RC500_REQERR; //应答错误
389 1 }
390
391 /****************************************************************/
392 /*名称: Save_UID */
393 /*功能: 该函数实现保存卡片收到的序列号 */
394 /*输入: row: 产生冲突的行 */
395 /* col: 产生冲突的列 */
396 /* length: 接収到的UID数据长度 */
397 /****************************************************************/
398 void Save_UID(uchar row,uchar col,uchar length)
399 { uchar i;
400 1 uchar temp;
401 1 uchar temp1;
402 1 if ((row==0x00)&&(col==0x00))
403 1 {
404 2 for(i=0;i<length;i++)
405 2 {
406 3 UID[i]=buffer[i];
407 3
408 3 //sen(UID[i]); // 6A 8B 2E 0E C1
409 3 }//sen(0x02);
410 2 }
411 1 else{
412 2
413 2 temp=buffer[0];
414 2 temp1=UID[row-1];
415 2
416 2 switch(col)
417 2 {
418 3 case 0:
419 3 temp1=0x00;
420 3 row=row+1;
421 3 break;
422 3 case 1:
423 3 temp=temp&0xfe;
424 3 temp1=temp1&0x01;
425 3 break;
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 8
426 3 case 2:
427 3 temp=temp&0xfc;
428 3 temp1=temp1&0x03;
429 3 break;
430 3 case 3:
431 3 temp=temp&0xf8;
432 3 temp1=temp1&0x07;
433 3 break;
434 3
435 3 case 4:
436 3 temp=temp&0xf0;
437 3 temp1=temp1&0x0f;
438 3 break;
439 3 case 5:
440 3 temp=temp&0xe0;
441 3 temp1=temp1&0x1f;
442 3 break;
443 3 case 6:
444 3 temp=temp&0xc0;
445 3 temp1=temp1&0x3f;
446 3 break;
447 3 case 7:
448 3 temp=temp&0x80;
449 3 temp1=temp1&0x7f;
450 3 break;
451 3 default:
452 3 break;
453 3 }
454 2 buffer[0]=temp;
455 2 UID[row-1]=temp1|temp;
456 2
457 2 for(i=1;i<length;i++)
458 2 {
459 3 UID[row-1+i]=buffer[i];
460 3
461 3 }
462 2 }
463 1 }
464
465 /****************************************************************/
466 /*名称: Check_UID */
467 /*功能: 该函数实现对收到的卡片的序列号的判断 */
468 /*输出: TRUE: 序列号正确 */
469 /* FALSE: 序列号错误 */
470 /****************************************************************/
471 uchar Check_UID(void)
472 {
473 1 uchar temp;
474 1 uchar i;
475 1 temp=0x00;
476 1 for(i=0;i<5;i++)
477 1 {
478 2 temp=temp^UID[i];
479 2 }
480 1 if (temp==0)
481 1 {//sen(0x66);
482 2 return TRUE;
483 2 }
484 1 return FALSE;
485 1 }
486 /////////////////////////////////////////////////////////待发送数据的字节数
487 void Set_BitFraming(uchar row,uchar col)
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 9
488 {
489 1 switch (row)
490 1 {
491 2 case 0:
492 2 buffer[1] = 0x20;
493 2 break;
494 2 case 1:
495 2 buffer[1] = 0x30;
496 2 break;
497 2 case 2:
498 2 buffer[1] = 0x40;
499 2 break;
500 2 case 3:
501 2 buffer[1] = 0x50;
502 2 break;
503 2 case 4:
504 2 buffer[1] = 0x60;
505 2 break;
506 2 default:
507 2 break;
508 2 }
509 1 switch(col)
510 1 {
511 2 case 0:
512 2 Bit_Frame = 0x00;
513 2 break;
514 2 case 1:
515 2 Bit_Frame = 0x11;
516 2 buffer[1] = (buffer[1] | 0x01);
517 2 break;
518 2 case 2:
519 2 Bit_Frame = 0x22;
520 2 buffer[1] = (buffer[1] | 0x02);
521 2 break;
522 2 case 3:
523 2 Bit_Frame = 0x33;
524 2 buffer[1] = (buffer[1] | 0x03);
525 2 break;
526 2 case 4:
527 2 Bit_Frame = 0x44;
528 2 buffer[1] = (buffer[1] | 0x04);
529 2 break;
530 2 case 5:
531 2 Bit_Frame = 0x55;
532 2 buffer[1] = (buffer[1] | 0x05);
533 2 break;
534 2 case 6:
535 2 Bit_Frame = 0x66;
536 2 buffer[1] = (buffer[1] | 0x06);
537 2 break;
538 2 case 7:
539 2 Bit_Frame = 0x77;
540 2 buffer[1] = (buffer[1] | 0x07);
541 2 break;
542 2 default:
543 2 break;
544 2 }
545 1 }
546 ///////////////////////////////////////////////////////卡片的防冲突检测
547 uchar AntiColl(void)
548 {
549 1 uchar temp;
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 10
550 1 uchar i;
551 1 uchar row,col;
552 1 uchar pre_row;
553 1 row = 0;
554 1 col = 0;
555 1 pre_row = 0;
556 1 CRCPresetLSB = 0x63;
557 1 CWConductance = 0x3f;
558 1 //ModConductance = 0x3f;
559 1 buffer[0] = RF_CMD_ANTICOL;
560 1 buffer[1] = 0x20;
561 1 ChannelRedundancy = 0x03; //关闭CRC,打开奇偶校验
562 1 temp=Command_Send(2, buffer, Transceive);
563 1 while(1)
564 1 {
565 2 if(temp==FALSE)
566 2 {
567 3 return(RC500_NOTAGERR);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -