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

📄 rc500.lst

📁 矿工定位系统单端
💻 LST
📖 第 1 页 / 共 3 页
字号:
 247   6                         n=1;
 248   6                      }
 249   5                      for(i=0;i<n;i++)
 250   5                      {
 251   6                            pi->MfData[i]=ReadRC(RegFIFOData);
 252   6                      }
 253   5                  }
 254   4               }
 255   3            }
 256   2            else if(n&irqEn&0x20)
 257   2            {
 258   3                status=MI_NOTAGERR;
 259   3            }
 260   2            else
 261   2            {
 262   3                status=MI_COM_ERR;
 263   3            }
 264   2            WriteRC(RegInterruptEn,0x7F);
 265   2            WriteRC(RegInterruptRq,0x7F);
 266   2         }
 267   1         return status;
 268   1      }
 269          //*************************************************
 270          char PcdRead(uchar addr,uchar *readdata)
 271          {
 272   1          char status;
 273   1          uchar i;
 274   1          idata struct TranSciveBuffer{uchar MfCommand;
 275   1                                       uchar MfLength;
 276   1                                       uchar MfData[16];
 277   1                                      }MfComData;
 278   1          struct TranSciveBuffer *pi;
 279   1      
 280   1          pi=&MfComData;
 281   1          PcdSetTmo(4);
 282   1          WriteRC(RegChannelRedundancy,0x0F);
 283   1          MfComData.MfCommand=PCD_TRANSCEIVE;
 284   1          MfComData.MfLength=2;
 285   1          MfComData.MfData[0]=PICC_READ;
 286   1          MfComData.MfData[1]=addr;
 287   1      
 288   1          status=PcdComTransceive(pi);
 289   1          if(status==MI_OK)
 290   1          {
 291   2              if(MfComData.MfLength!=0x80)
 292   2              {
 293   3                  status = MI_BITCOUNTERR;
 294   3              }
 295   2              else
 296   2              {
 297   3                  for(i=0;i<16;i++)
 298   3                  {
 299   4                      *(readdata+i)=MfComData.MfData[i];
 300   4                  }
 301   3              }
 302   2          }
 303   1          return status;
C51 COMPILER V7.05   RC500                                                                 12/20/2004 15:31:09 PAGE 6   

 304   1      }
 305          //*******************************************************************
 306          char PcdRequest(uchar req_code)
 307          {
 308   1         char status;
 309   1         idata struct TranSciveBuffer {uchar MfCommand;
 310   1                                       uchar MfLength;
 311   1                                       uchar MfData[1];
 312   1                                      }MfComData;
 313   1         struct TranSciveBuffer *pi;
 314   1      
 315   1         pi=&MfComData;
 316   1         PcdSetTmo(106);
 317   1         WriteRC(RegChannelRedundancy,0x03);
 318   1         ClearBitMask(RegControl,0x08);
 319   1         WriteRC(RegBitFraming,0x07);
 320   1         MfComData.MfCommand=PCD_TRANSCEIVE;
 321   1         MfComData.MfLength=1;
 322   1         MfComData.MfData[0]=req_code;
 323   1         status=PcdComTransceive(pi);
 324   1         if(!status)
 325   1         {    if(MfComData.MfLength!=0x10)
 326   2              {
 327   3               status=MI_BITCOUNTERR;
 328   3              }
 329   2         }
 330   1         return status;
 331   1      }
 332          //****************************************************************************
 333          char PcdSelect(uchar *snr)
 334          {
 335   1          uchar i;
 336   1          char status;
 337   1          uchar snr_check=0;
 338   1          idata struct TranSciveBuffer{uchar MfCommand;
 339   1                                       uchar MfLength;
 340   1                                       uchar MfData[7];
 341   1                                      }MfComData;
 342   1          struct TranSciveBuffer *pi;
 343   1      
 344   1          pi=&MfComData;
 345   1          PcdSetTmo(106);
 346   1          WriteRC(RegChannelRedundancy,0x0F);
 347   1          ClearBitMask(RegControl,0x08);
 348   1      
 349   1          MfComData.MfCommand=PCD_TRANSCEIVE;
 350   1          MfComData.MfLength=7;
 351   1          MfComData.MfData[0]=PICC_ANTICOLL1;
 352   1          MfComData.MfData[1]=0x70;
 353   1          for(i=0;i<4;i++)
 354   1          {
 355   2              snr_check^=*(snr+i);
 356   2              MfComData.MfData[i+2]=*(snr+i);
 357   2          }
 358   1          MfComData.MfData[6]=snr_check;
 359   1          status=PcdComTransceive(pi);
 360   1          if(status==MI_OK)
 361   1          {    if(MfComData.MfLength!=0x8)
 362   2              {
 363   3               status = MI_BITCOUNTERR;
 364   3              }
 365   2         }
C51 COMPILER V7.05   RC500                                                                 12/20/2004 15:31:09 PAGE 7   

 366   1         return status;
 367   1      }
 368          //************************************************************************
 369          void PcdSetTmo(uchar tmoLength)
 370          {
 371   1         switch(tmoLength)
 372   1         {  
 373   2            case 1:                             // short timeout (1,0 ms)
 374   2               WriteRC(RegTimerClock,0x07);     // TAutoRestart=0,TPrescale=128
 375   2               WriteRC(RegTimerReload,0x6a);    // TReloadVal = 'h6a =106(dec)
 376   2               break;
 377   2            case 2:                             // medium timeout (1,5 ms)
 378   2               WriteRC(RegTimerClock,0x07);     // TAutoRestart=0,TPrescale=128
 379   2               WriteRC(RegTimerReload,0xa0);    // TReloadVal = 'ha0 =160(dec)
 380   2               break;
 381   2            case 3:                              // long timeout (6 ms)
 382   2               WriteRC(RegTimerClock,0x09);      // TAutoRestart=0,TPrescale=4*128
 383   2               WriteRC(RegTimerReload,0xa0);     // TReloadVal = 'ha0 =160(dec)
 384   2               break;
 385   2            case 4:                              // long timeout (9.6 ms)
 386   2               WriteRC(RegTimerClock,0x09);      // TAutoRestart=0,TPrescale=4*128
 387   2               WriteRC(RegTimerReload,0xff);     // TReloadVal = 'ff =255(dec)
 388   2               break;
 389   2            default:                             // short timeout (1,0 ms)
 390   2               WriteRC(RegTimerClock,0x07);      // TAutoRestart=0,TPrescale=128
 391   2               WriteRC(RegTimerReload,tmoLength);// TReloadVal = tmoLength
 392   2               break;
 393   2         }
 394   1         WriteRC(RegTimerControl,0X06);
 395   1      }
 396          //*********************************************************
 397          extern char PcdWrite(uchar addr,uchar *writedata)
 398          {
 399   1          char status;
 400   1          uchar i;
 401   1          idata struct TranSciveBuffer{uchar MfCommand;
 402   1                                       uchar MfLength;
 403   1                                       uchar MfData[16];
 404   1                                      }MfComData;
 405   1          struct TranSciveBuffer *pi;
 406   1      
 407   1          pi=&MfComData;
 408   1          PcdSetTmo(4);
 409   1          WriteRC(RegChannelRedundancy,0x0F); 
 410   1          MfComData.MfCommand=PCD_TRANSCEIVE;
 411   1          MfComData.MfLength=2;
 412   1          MfComData.MfData[0]=PICC_WRITE;
 413   1          MfComData.MfData[1]=addr;
 414   1      
 415   1          status=PcdComTransceive(pi);
 416   1          if(status!=MI_NOTAGERR)
 417   1          {
 418   2              if(MfComData.MfLength!=4)
 419   2              {
 420   3                 status=MI_BITCOUNTERR;
 421   3              }
 422   2              else
 423   2              {
 424   3                 MfComData.MfData[0]&=0x0f;
 425   3                 switch(MfComData.MfData[0])
 426   3                 {
 427   4                    case 0x00:
C51 COMPILER V7.05   RC500                                                                 12/20/2004 15:31:09 PAGE 8   

 428   4                       status=MI_NOTAUTHERR;
 429   4                       break;
 430   4                    case 0x0a:
 431   4                       status=MI_OK;
 432   4                       break;
 433   4                    default:
 434   4                       status=MI_CODEERR;
 435   4                       break;
 436   4                 }
 437   3              }
 438   2           }
 439   1           if(status==MI_OK)
 440   1           {
 441   2              PcdSetTmo(3);
 442   2              MfComData.MfCommand=PCD_TRANSCEIVE;
 443   2              MfComData.MfLength=16;
 444   2              for(i=0;i<16;i++)
 445   2              {
 446   3                  MfComData.MfData[i]=*(writedata+i);
 447   3              }
 448   2              status=PcdComTransceive(pi);
 449   2              if(status!=MI_NOTAGERR)
 450   2              {
 451   3                  MfComData.MfData[0]&=0x0f;
 452   3                  switch(MfComData.MfData[0])
 453   3                  {
 454   4                     case 0x00:
 455   4                        status=MI_WRITEERR;
 456   4                        break;
 457   4                     case 0x0a:
 458   4                        status=MI_OK;
 459   4                        break;
 460   4                     default:
 461   4                        status=MI_CODEERR;
 462   4                        break;
 463   4                 }
 464   3              }
 465   2           }
 466   1        return status;
 467   1      }
 468          //*************************************************************
 469          /*****************************************************************************
 470          *          复位并初始化RC500
 471          *注意:RC500上电后应延时500ms才能可靠初始化
 472          ******************************************************************************/
 473          char PcdReset()
 474          {
 475   1         char status=MI_OK;
 476   1         char n=0;
 477   1         uint i=0x4000;
 478   1      
 479   1         RC500_RST=1;
 480   1         DelayMs(100);
 481   1         RC500_RST=0;
 482   1         while(i!=0&&n!=0x3f)
 483   1         {
 484   2            n=ReadRawRC(RegCommand);
 485   2            i--;
 486   2         }
 487   1         while(i!=0&&n==0x3f)
 488   1         {
 489   2            n=ReadRawRC(RegCommand);
C51 COMPILER V7.05   RC500                                                                 12/20/2004 15:31:09 PAGE 9   

 490   2            i--;
 491   2         }
 492   1         if(i!=0)
 493   1         {
 494   2            WriteRawRC(RegPage,0x80);
 495   2            n=0x80;
 496   2            while((i!=0)&&(n&0x80))
 497   2            {
 498   3                n=ReadRawRC(RegCommand);
 499   3                i--;
 500   3            }
 501   2            if(i==0||(n&0xff))

⌨️ 快捷键说明

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