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

📄 slrc632.lst

📁 读ISO14443 CPU卡源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 217   2             DelayMs(1);
 218   2             PcdAntennaOn();
 219   2         }
 220   1         else if (type == 's')
 221   1         {
 222   2             ClearBitMask(RegControl,0x08);
 223   2      
 224   2             WriteRawRC(RegClockQControl,0x0);
 225   2             WriteRawRC(RegClockQControl,0x40);
 226   2             Delay_50us(2);  
 227   2             ClearBitMask(RegClockQControl,0x40);
 228   2             
 229   2             WriteRawRC(RegTxControl,0x4b);
 230   2             WriteRawRC(RegCwConductance,0x06);
 231   2             WriteRawRC(RegModConductance,0x03);       
 232   2             WriteRawRC(RegCoderControl,0x20);
 233   2             WriteRawRC(RegModWidth,0x13);             
 234   2             WriteRawRC(RegModWidthSOF,0x00);          
 235   2             WriteRawRC(RegTypeBFraming,0x18);
 236   2             
 237   2             WriteRawRC(RegRxControl1,0x73);
 238   2             WriteRawRC(RegDecoderControl,0x19);
 239   2             WriteRawRC(RegBitPhase,0xAD);    
 240   2             WriteRawRC(RegRxThreshold,0x88);
 241   2             WriteRawRC(RegBPSKDemControl,0x3E);
C51 COMPILER V8.05a   SLRC632                                                              07/05/2010 23:34:44 PAGE 5   

 242   2             WriteRawRC(RegRxControl2,0x01);
 243   2       //      WriteRawRC(RegClockQControl,0x00);//?
 244   2      
 245   2             WriteRawRC(RegRxWait,0x06);
 246   2             WriteRawRC(RegChannelRedundancy,0x2C);    
 247   2             WriteRawRC(RegCRCPresetLSB,0xFF);
 248   2             WriteRawRC(RegCRCPresetMSB,0xFF);
 249   2             WriteRawRC(RegTimeSlotPeriod,0x00);
 250   2             WriteRawRC(RegMfOutSelect,0x00);
 251   2             WriteRawRC(RFU27,0x00);                
 252   2      
 253   2             WriteRawRC(RegFIFOLevel,0x3F);
 254   2             WriteRawRC(RegTimerClock,0x07);
 255   2             WriteRawRC(RegTimerReload,0x0A);
 256   2             WriteRawRC(RegTimerControl,0x06);  
 257   2             WriteRawRC(RegIRqPinConfig,0x02);       
 258   2             WriteRawRC(RFU2E,0x00);
 259   2             WriteRawRC(RFU2F,0x00);
 260   2             PcdSetTmo(106);
 261   2             DelayMs(1);
 262   2             PcdAntennaOn();
 263   2         }
 264   1         else if (type == '1')
 265   1         {
 266   2             ClearBitMask(RegControl,0x08);
 267   2      
 268   2             WriteRawRC(RegTxControl,0x48);
 269   2             WriteRawRC(RegCwConductance,0x3F);
 270   2             WriteRawRC(RegModConductance,0x05);       // must be measured for 15% Modulation Index
 271   2             WriteRawRC(RegCoderControl,0x2F);         // 52.97kHz, 1-256 coding
 272   2             WriteRawRC(RegModWidth,0x3F);             // Modulation width: 9.44us
 273   2             WriteRawRC(RegModWidthSOF,0x3F);          // Standard mode: 9.44us
 274   2             WriteRawRC(RegTypeBFraming,0x00);
 275   2             
 276   2             WriteRawRC(RegRxControl1,0x8b);
 277   2             WriteRawRC(RegDecoderControl,0x34);
 278   2             WriteRawRC(RegBitPhase,0xcd);
 279   2             WriteRawRC(RegRxThreshold,0x88);
 280   2             WriteRawRC(RegBPSKDemControl,0);
 281   2             WriteRawRC(RegRxControl2,0x01);
 282   2             WriteRawRC(RegClockQControl,0x00);
 283   2      
 284   2             WriteRawRC(RegRxWait,0x08);
 285   2             WriteRawRC(RegChannelRedundancy,0x2C);    // Enable CRC TX/RX
 286   2             WriteRawRC(RegCRCPresetLSB,0xFF);
 287   2             WriteRawRC(RegCRCPresetMSB,0xFF);
 288   2             WriteRawRC(RegTimeSlotPeriod,0x00);
 289   2             WriteRawRC(RegMfOutSelect,0x00);         // enable SIGOUT = envelope
 290   2             WriteRawRC(RFU27,0x00);                
 291   2      
 292   2             WriteRawRC(RegFIFOLevel,0x38);
 293   2             WriteRawRC(RegTimerClock,0x0B);
 294   2             WriteRawRC(RegTimerReload,0x00);
 295   2             WriteRawRC(RegTimerControl,0x02);         // TStopRxEnd=0,TStopRxBeg=1,
 296   2             WriteRawRC(RFU2E,0x00);
 297   2             WriteRawRC(RFU2F,0x00);
 298   2             DelayMs(1);
 299   2             PcdAntennaOn();
 300   2         }
 301   1         else{ return -1; }
 302   1         return MI_OK;
 303   1      }
C51 COMPILER V8.05a   SLRC632                                                              07/05/2010 23:34:44 PAGE 6   

 304          
 305          
 306          /////////////////////////////////////////////////////////////////////
 307          //置RC632寄存器位
 308          //input:reg=寄存器地址
 309          //      mask=置位值
 310          /////////////////////////////////////////////////////////////////////
 311          void SetBitMask(unsigned char reg,unsigned char mask)  
 312          {
 313   1         char tmp = 0x0;
 314   1         tmp = ReadRawRC(reg);
 315   1         WriteRawRC(reg,tmp | mask);  // set bit mask
 316   1      }
 317          
 318          /////////////////////////////////////////////////////////////////////
 319          //清RC632寄存器位
 320          //input:reg=寄存器地址
 321          //      mask=清位值
 322          /////////////////////////////////////////////////////////////////////
 323          void ClearBitMask(unsigned char reg,unsigned char mask)  
 324          {
 325   1         char tmp = 0x0;
 326   1         tmp = ReadRawRC(reg);
 327   1         WriteRawRC(reg, tmp & ~mask);  // clear bit mask
 328   1      } 
 329          
 330          /////////////////////////////////////////////////////////////////////
 331          //设置RC632定时器
 332          //input:tmolength=设置值
 333          /////////////////////////////////////////////////////////////////////
 334          void PcdSetTmo(unsigned char tmoLength)
 335          {
 336   1         switch(tmoLength)
 337   1         {  
 338   2            case 0:                         // (0.302 ms) FWI=0
 339   2               WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
 340   2               WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h21 =33(dec) 
 341   2               break;
 342   2            case 1:                         // (0.604 ms) FWI=1
 343   2               WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
 344   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 345   2               break;
 346   2            case 2:                         // (1.208 ms) FWI=2
 347   2               WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
 348   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 349   2               break;
 350   2            case 3:                         // (2.416 ms) FWI=3
 351   2               WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
 352   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 353   2               break;
 354   2            case 4:                         // (4.833 ms) FWI=4
 355   2               WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
 356   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 357   2               break;
 358   2            case 5:                         // (9.666 ms) FWI=5
 359   2               WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
 360   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 361   2               break;
 362   2            case 6:                         // (19.33 ms) FWI=6
 363   2               WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
 364   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 365   2               break;
C51 COMPILER V8.05a   SLRC632                                                              07/05/2010 23:34:44 PAGE 7   

 366   2            case 7:                         // (38.66 ms) FWI=7
 367   2               WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
 368   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 369   2               break;
 370   2            case 8:                         // (77.32 ms) FWI=8
 371   2               WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
 372   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 373   2               break;
 374   2            case 9:                         // (154.6 ms) FWI=9
 375   2               WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
 376   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 377   2               break;
 378   2            case 10:                        // (309.3 ms) FWI=10
 379   2               WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
 380   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 381   2               break;
 382   2            case 11:                        // (618.6 ms) FWI=11
 383   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 384   2               WriteRawRC(RegTimerReload,0x11);// TReloadVal = 'h21 =17(dec) 
 385   2               break;
 386   2            case 12:                        // (1.2371 s) FWI=12
 387   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 388   2               WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h41 =33(dec) 
 389   2               break;
 390   2            case 13:                        // (2.4742 s) FWI=13
 391   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 392   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h81 =65(dec) 
 393   2               break;
 394   2            case 14:                        // (4.9485 s) FWI=14
 395   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 396   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 397   2               break;
 398   2            case 15:                        // (4.9485 s) FWI=14
 399   2               WriteRawRC(RegTimerClock,0x9); // TAutoRestart=0,TPrescale=4096*128
 400   2               WriteRawRC(RegTimerReload,0x0ff);// TReloadVal = 'h81 =129(dec) 
 401   2               break;
 402   2            default:                       // 
 403   2               WriteRawRC(RegTimerClock,0x19); // TAutoRestart=0,TPrescale=128
 404   2               WriteRawRC(RegTimerReload,tmoLength);// TReloadVal = 'h6a =tmoLength(dec) 
 405   2               break;
 406   2         }     
 407   1         WriteRawRC(RegTimerControl,0X06);
 408   1      }
 409          
 410          /////////////////////////////////////////////////////////////////////
 411          //通过RC632和ISO14443卡通讯
 412          //input: pi->MfCommand = RC632命令字
 413          //       pi->MfLength  = 发送的数据长度
 414          //       pi->MfData[]  = 发送数据
 415          //output:status        = 错误字
 416          //       pi->MfLength  = 接收的数据BIT长度
 417          //       pi->MfData[]  = 接收数据
 418          /////////////////////////////////////////////////////////////////////
 419          char PcdComTransceive(struct TranSciveBuffer *pi)
 420          {
 421   1         bit recebyte = 0;
 422   1         char status;
 423   1         unsigned char irqEn   = 0x00;
 424   1         unsigned char waitFor = 0x00;
 425   1         unsigned char lastBits;
 426   1         unsigned char n;
 427   1         unsigned int i;
C51 COMPILER V8.05a   SLRC632                                                              07/05/2010 23:34:44 PAGE 8   

 428   1         switch (pi->MfCommand)
 429   1         {
 430   2            case PCD_IDLE:
 431   2               irqEn   = 0x00;
 432   2               waitFor = 0x00;
 433   2               break;
 434   2            case PCD_WRITEE2:
 435   2               irqEn   = 0x11;
 436   2               waitFor = 0x10;
 437   2               break;
 438   2            case PCD_READE2:
 439   2               irqEn   = 0x07;

⌨️ 快捷键说明

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