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

📄 typeb.lst

📁 slrc632程序..网上绝对找不到.对RC632读TYPEB完整的程序包
💻 LST
📖 第 1 页 / 共 2 页
字号:
 232   5                      {
 233   6                         pi->MfLength = (n-1)*8 + lastBits;
 234   6                      }
 235   5                      else
 236   5                      {
 237   6                         pi->MfLength = n*8;
 238   6                      }
 239   5                      if (n == 0)
 240   5                      {
 241   6                         n = 1;
C51 COMPILER V7.50   TYPEB                                                                 07/17/2008 22:58:13 PAGE 5   

 242   6                      }
 243   5                      for (i=0; i<n; i++)
 244   5                      {
 245   6                          pi->MfData[i] = ReadIO(RegFIFOData);
 246   6                      }
 247   5                  }
 248   4               }
 249   3                       else if (ReadIO(RegErrorFlag)&0x01)
 250   3               {
 251   4                          status = MI_COLLERR;
 252   4                  if (recebyte)
 253   4                  {
 254   5                      n = ReadIO(RegFIFOLength);
 255   5                      lastBits = ReadIO(RegSecondaryStatus) & 0x07;
 256   5                      if (lastBits)
 257   5                      {
 258   6                         pi->MfLength = (n-1)*8 + lastBits;
 259   6                      }
 260   5                      else
 261   5                      {
 262   6                         pi->MfLength = n*8;
 263   6                      }
 264   5                      if (n == 0)
 265   5                      {
 266   6                         n = 1;
 267   6                      }
 268   5                      for (i=0; i<n; i++)
 269   5                      {
 270   6                          pi->MfData[i+1] = ReadIO(RegFIFOData);
 271   6                      }
 272   5                  }
 273   4                              pi->MfData[0]=ReadIO(0x0B);
 274   4               }
 275   3      
 276   3            }
 277   2            else if (n & irqEn & 0x20)
 278   2            {   status = MI_NOTAGERR;   }
 279   2            else if (!(ReadIO(RegErrorFlag)&0x17))
 280   2            {   status = MI_ACCESSTIMEOUT;   }
 281   2            else
 282   2            {   status = MI_COM_ERR;    }
 283   2            
 284   2            WriteIO(RegInterruptEn,0x7F);
 285   2            WriteIO(RegInterruptRq,0x7F);
 286   2            SetBitMask(RegControl,0x04);           // stop timer now
 287   2            WriteIO(RegCommand,PCD_IDLE); 
 288   2         }
 289   1         return status;
 290   1      }
 291          
 292          //////////////////////////////////////////////////////////////////////
 293          //ATTRIB
 294          //////////////////////////////////////////////////////////////////////
 295          unsigned char PcdAnticoll(unsigned char *snr)     //读取卡片序列号函数
 296          {
 297   1          unsigned char i;
 298   1          unsigned char snr_check=0;
 299   1          char status=MI_OK;
 300   1      
 301   1         struct TranSciveBuffer *pi;
 302   1      
 303   1          PcdSetTmo(14);
C51 COMPILER V7.50   TYPEB                                                                 07/17/2008 22:58:13 PAGE 6   

 304   1          WriteIO(RegDecoderControl,0x28);
 305   1          ClearBitMask(RegControl,0x08);
 306   1          WriteIO(RegChannelRedundancy,0x03);
 307   1      
 308   1          pi->MfCommand=PCD_TRANSCEIVE;
 309   1          pi->MfLength=2;
 310   1          pi->MfData[0]=PICC_ANTICOLL1;
 311   1          pi->MfData[1]=0x20;
 312   1          status=PcdComTransceive(pi);
 313   1      // ser_send(&status,1);
 314   1          if(!status)
 315   1          {
 316   2            for(i=0;i<4;i++)
 317   2               {
 318   3                   snr_check^=pi->MfData[i];
 319   3               }
 320   2               if(snr_check!=pi->MfData[i])
 321   2               {
 322   3                   status=MI_SERNRERR;
 323   3               }
 324   2               else
 325   2               {
 326   3                   for(i=0;i<4;i++)
 327   3                   {
 328   4                    *(snr+i)=pi->MfData[i];
 329   4                   }
 330   3               }
 331   2      
 332   2          }
 333   1          ClearBitMask(RegDecoderControl,0x20);
 334   1          return status;
 335   1      }
 336          
 337          ///////////////////////////////////////////////////////////////////////
 338          //          C O N F I G   I S O 1 4 4 4 3   T Y P E
 339          ///////////////////////////////////////////////////////////////////////
 340          unsigned char M500PcdConfigISOType(unsigned char type)
 341          {
 342   1         if(type==TYPEA)
 343   1         {
 344   2           WriteIO(RegTxControl,0x5b);  // Force100ASK, TX1 & TX2 enable  0x11内部编码器  b的设置位不懂??
 345   2           WriteIO(RegCoderControl,0x19);     // Miller coding, 106kbps     iso14443-A  0x14地址
 346   2           WriteIO(RegRxControl1,0x73);     //8puls iso14443A&B   42dB 0x19
 347   2           WriteIO(RegDecoderControl,0x08);   // Manchester Coding   iso14443A  0x1a
 348   2           WriteIO(RegCRCPresetLSB,0x63);     // set CRC preset to 0x6363      0x23 复位值为0x63
 349   2           WriteIO(RegCRCPresetMSB,0x63);           //0x23 复位值为0x63
 350   2           WriteIO(RegRxThreshold,0xff);   // set max MinLevel & ColLevel. //0x1c复位值为0xff
 351   2           TYPE = TYPEA;
 352   2         }
 353   1         else
 354   1         {
 355   2           WriteIO(RegTxControl,0x4b);       // disable Force100ASk       ok
 356   2           WriteIO(RegCoderControl,0x20);     // NRZ-L, TypeB baud 106kbps     ok
 357   2        
 358   2           WriteIO(RegRxControl1,0x73);       //            ok
 359   2           WriteIO(RegDecoderControl,0x19);   // BPSK coding         ok
 360   2        
 361   2           WriteIO(RegCRCPresetLSB,0xff);     // set CRC preset to 0xffff      ok
 362   2           WriteIO(RegCRCPresetMSB,0xff);            //  ok
 363   2        
 364   2           WriteIO(RegTypeBFraming,0x23);     // EGT=0  0x17 定义了mode的宽度     ok  
 365   2           WriteIO(RegBitFraming,0x07);               //  ok
C51 COMPILER V7.50   TYPEB                                                                 07/17/2008 22:58:13 PAGE 7   

 366   2        
 367   2           WriteIO(RegBPSKDemControl,0x3e);   // ASK=0xfe,ignore EOF and SOF 0x1d地址看datasheet
 368   2           WriteIO(RegModConductance,0x06); // set modulation index at 12%  0x13地址看datasheet 
 369   2      //   WriteIO(RegChannelRedundancy, 0x2c);//RegChannelRedundancy
 370   2           WriteIO(RegRxThreshold,0x44);  // Reduce MinLevel & ColLevel.      0x1c地址
 371   2      //       WriteIO(RegRxThreshold,0x68);  
 372   2      //   WriteIO(RegRxWait,0x09);
 373   2           TYPE = TYPEB;
 374   2         }
 375   1      
 376   1         return MI_OK;
 377   1      }
 378          /*************************************
 379          *MFRC632初始化
 380          *************************************/
 381          void M500PcdConfig(void)
 382          {
 383   1             ClearBitMask(RegControl,0x08);   //清除RegControl标志位
 384   1      
 385   1             WriteIO(RegClockQControl,0x0);   //设置Q时钟值
 386   1             WriteIO(RegClockQControl,0x40);  //设置Q时钟值
 387   1             Delay(20);                       //延时
 388   1             ClearBitMask(RegClockQControl,0x40);//清除Q时钟标志位
 389   1             
 390   1             WriteIO(RegTxControl,0x4b);         //设置发送控制
 391   1             WriteIO(RegCwConductance,0x17);     //设置CwConductance宽度
 392   1             WriteIO(RegModConductance,0x06);    //设置ModConductance数值   
 393   1             WriteIO(RegCoderControl,0x20);      //设置CoderControl代码控制寄存器
 394   1             WriteIO(RegModWidth,0x13);          //设置ModWidth发射波长     
 395   1             WriteIO(RegModWidthSOF,0x3F);       //设置ModWidthSOF长度  
 396   1             WriteIO(RegTypeBFraming,0x3B);      //设置TypeB帧
 397   1             
 398   1             WriteIO(RegRxControl1,0x73);        //设置RxControl1接受寄存器
 399   1             WriteIO(RegDecoderControl,0x19);    //设置DecoderControl解码控制寄存器
 400   1             WriteIO(RegBitPhase,0xAD);              //设置位标置控制寄存器BitPhase
 401   1             WriteIO(RegRxThreshold,0x88);       //设置RxThreshold接受标志位寄存器
 402   1             WriteIO(RegBPSKDemControl,0x7E);    //设置BPSKDemControl寄存器BPSK发射波长
 403   1             WriteIO(RegRxControl2,0x01);        //设置RxControl2接受寄存器的数值
 404   1      
 405   1             WriteIO(RegRxWait,0x06);            //设置RegRxWait若罔闻寄存器等待时间
 406   1             WriteIO(RegChannelRedundancy,0x2C); //设置ChannelRedundancy等待时间  
 407   1             WriteIO(RegCRCPresetLSB,0xFF);      //设置CRCPresetLSB寄存器低位
 408   1             WriteIO(RegCRCPresetMSB,0xFF);      //设置CRCPresetMSB寄存器高位
 409   1             WriteIO(RegTimeSlotPeriod,0x00);    //设置TimeSlotPeriod寄存器
 410   1             WriteIO(RegMfOutSelect,0x00);       //禁止MfOutSelect输出
 411   1             WriteIO(RFU27,0x00);                //设置RFU27寄存器输出0
 412   1      
 413   1             WriteIO(RegFIFOLevel,0x3F);         //设置RegFIFOLevel--FIFOLevel溢出值
 414   1             WriteIO(RegTimerClock,0x07);        //设置TimerClock时钟值
 415   1             WriteIO(RegTimerReload,0x0A);       //设置RegTimerReload时钟装入值
 416   1             WriteIO(RegTimerControl,0x06);      //设置RegTimerControl--定时器控制
 417   1             WriteIO(RegIRqPinConfig,0x02);      //设置RegIRqPinConfig--中断请求配置 
 418   1             WriteIO(RFU2E,0x00);                //设置RFU2E--寄存器位应保持0x00
 419   1             WriteIO(RFU2F,0x00);                                //设置RFU2F--寄存器位应保持0x00
 420   1             PcdSetTmo(106);                     //设置发送控制时间
 421   1             Delay(10);                        //延时二十毫秒
 422   1             PcdAntennaOn();
 423   1       }
 424          
 425          /*******************************************************************************************************
 426          ** 函数名称:PcdAntennaOn()
 427          ** 函数功能:开启天线
C51 COMPILER V7.50   TYPEB                                                                 07/17/2008 22:58:13 PAGE 8   

 428          ** 函数说明:每次开启或关闭天线发射之间至少有1ms的间隔
 429          ** 返 回 值:无
 430          *******************************************************************************************************/
 431          unsigned char PcdAntennaOn(void)
 432          {
 433   1         unsigned char i;
 434   1         i = ReadIO(RegTxControl);
 435   1         if (!(i & 0x03))
 436   1         {
 437   2            SetBitMask(RegTxControl,0x03);  
 438   2         }
 439   1              return 0;
 440   1      }
 441          
 442          /*******************************************************************************************************
 443          ** 函数名称:PcdAntennaOff()
 444          ** 函数功能:关闭天线
 445          ** 函数说明:每次开启或关闭天线发射之间至少有1ms的间隔
 446          ** 返 回 值:无
 447          *******************************************************************************************************/
 448          void PcdAntennaOff(void)
 449          {
 450   1         ClearBitMask(RegTxControl,0x03);   
 451   1      }
 452          
 453          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1629    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----     101
   IDATA SIZE       =      2    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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