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

📄 duxiexitongrc500.lst

📁 #include <stc12c2052AD.H>// 标准库的头文件 #include <intrins.h> #include <absacc.h> #d
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -