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

📄 function.lst

📁 应用案例
💻 LST
📖 第 1 页 / 共 2 页
字号:
 245   3               status = MI_ACCESSTIMEOUT;
 246   3            }
 247   2            if (status == MI_OK)                    
 248   2            {
 249   3               if (tmpStatus = (ReadIO(RegErrorFlag) & 0x17)) 
 250   3               {
 251   4                  if (tmpStatus & 0x01)  
 252   4                  {
 253   5                     info->collPos = ReadIO(RegCollpos);
 254   5                     status = MI_COLLERR;
 255   5                  }
 256   4                  else
 257   4                  {
 258   5                     info->collPos = 0;
 259   5                     if (tmpStatus & 0x02)  
 260   5                     {
 261   6                        status = MI_PARITYERR;
 262   6                     }
 263   5                  }
 264   4                  if (tmpStatus & 0x04)  
 265   4                  {
 266   5                     status = MI_FRAMINGERR;
 267   5                  }
 268   4                  if (tmpStatus & 0x10)   
 269   4                  {
 270   5                     FlushFIFO();
 271   5                     status = MI_OVFLERR;
 272   5                  }
 273   4               if (tmpStatus & 0x08) 
 274   4               {
 275   5                     status = MI_CRCERR;
 276   5               }    
 277   4                  if (status == MI_OK)
 278   4                     status = MI_NY_IMPLEMENTED;
 279   4               }
 280   3               if (cmd == PCD_TRANSCEIVE)
 281   3               {
 282   4                  lastBits = ReadIO(RegSecondaryStatus) & 0x07;
 283   4                  if (lastBits)
 284   4                     info->nBitsReceived += (info->nBytesReceived-1) * 8 + lastBits;
 285   4                  else
 286   4                     info->nBitsReceived += info->nBytesReceived * 8;
 287   4               }
 288   3            }
 289   2            else
 290   2            {
 291   3               info->collPos = 0x00;
 292   3            }
 293   2         }
 294   1         return status;
 295   1      }     
 296                    
 297          
 298          char PcdReadE2(unsigned int startaddr,
 299                         unsigned char length,
 300                         unsigned char* _data)
 301          {
 302   1         char status = MI_OK;
 303   1           ResetInfo(MInfo);   
C51 COMPILER V7.07   FUNCTION                                                              06/13/2008 13:33:17 PAGE 6   

 304   1           MSndBuffer[0] = startaddr & 0xFF;
 305   1           MSndBuffer[1] = (startaddr >> 8) & 0xFF;
 306   1           MSndBuffer[2] = length;
 307   1           MInfo.nBytesToSend   = 3;
 308   1           status = RC500Cmd(PCD_READE2,
 309   1                               MSndBuffer,
 310   1                               MRcvBuffer,
 311   1                               &MInfo);
 312   1          if (status == MI_OK)
 313   1          {
 314   2             memcpy(_data,MRcvBuffer,length);
 315   2          }
 316   1          else   
 317   1          {
 318   2             _data[0] = 0;
 319   2          }
 320   1          return status ;
 321   1      } 
 322          
 323          
 324          char CardRequest(unsigned char req_code, 
 325                             unsigned char *atq)    
 326          {
 327   1         char idata status = MI_OK;
 328   1      
 329   1         WriteIO(RegChannelRedundancy,0x03); 
 330   1         ClearBitMask(RegControl,0x08);     
 331   1         WriteIO(RegBitFraming,0x07);       
 332   1         SetBitMask(RegTxControl,0x03);   
 333   1         
 334   1         ResetInfo(MInfo);   
 335   1         MSndBuffer[0] = req_code;
 336   1         MInfo.nBytesToSend   = 1;   
 337   1         status = RC500Cmd(PCD_TRANSCEIVE,
 338   1                            MSndBuffer,
 339   1                            MRcvBuffer,
 340   1                            &MInfo);
 341   1        
 342   1         if (status)     
 343   1         {
 344   2            *atq = 0;
 345   2         } 
 346   1         else 
 347   1         {
 348   2            if (MInfo.nBitsReceived != 16) 
 349   2            {
 350   3               *atq = 0;
 351   3               status = MI_BITCOUNTERR;
 352   3            } 
 353   2            else 
 354   2            {
 355   3               status = MI_OK;
 356   3               memcpy(atq,MRcvBuffer,2);
 357   3            }
 358   2         }
 359   1         return status; 
 360   1      }
 361          
 362          
 363          char ReadCardNum (unsigned char bcnt,
 364                            unsigned char *snr)    
 365          {
C51 COMPILER V7.07   FUNCTION                                                              06/13/2008 13:33:17 PAGE 7   

 366   1         char idata    status = MI_OK;
 367   1         char idata    snr_in[4];    
 368   1         char                  nbytes = 0;
 369   1         char                  nbits = 0;
 370   1         char                  complete = 0;
 371   1         char                  i       = 0;            
 372   1         char                  byteOffset = 0;
 373   1         unsigned char  snr_crc;
 374   1         unsigned char  snr_check;
 375   1         unsigned char dummyShift1;     
 376   1         unsigned char dummyShift2;        
 377   1      
 378   1         memcpy(snr_in,snr,4);   
 379   1         
 380   1         WriteIO(RegDecoderControl,0x28);  
 381   1         ClearBitMask(RegControl,0x08);    
 382   1            
 383   1         complete = 0;
 384   1         bcnt = 0;   
 385   1         while (!complete && (status == MI_OK) )
 386   1         {
 387   2            ResetInfo(MInfo);           
 388   2            WriteIO(RegChannelRedundancy,0x03); 
 389   2            nbits = bcnt % 8;  
 390   2            if (nbits)
 391   2            {
 392   3               WriteIO(RegBitFraming,nbits << 4 | nbits); 
 393   3               nbytes = bcnt / 8 + 1;   
 394   3               if (nbits == 7)
 395   3               {       
 396   4                  WriteIO(RegBitFraming,nbits); 
 397   4               }
 398   3            } 
 399   2            else
 400   2            {
 401   3               nbytes = bcnt / 8; 
 402   3            }
 403   2      
 404   2            MSndBuffer[0] = 0x93;
 405   2            MSndBuffer[1] = 0x20 + ((bcnt/8) << 4) + nbits; 
 406   2                     
 407   2            for (i = 0; i < nbytes; i++)  
 408   2            {
 409   3               MSndBuffer[i + 2] = snr_in[i];
 410   3            }
 411   2            MInfo.nBytesToSend   = 2 + nbytes;   
 412   2       
 413   2            status = RC500Cmd(PCD_TRANSCEIVE,
 414   2                               MSndBuffer,
 415   2                               MRcvBuffer,
 416   2                               &MInfo);
 417   2            if (nbits == 7)
 418   2            {
 419   3               dummyShift1 = 0x00;
 420   3               for (i = 0; i < MInfo.nBytesReceived; i++)
 421   3               {
 422   4                  dummyShift2 = MRcvBuffer[i];
 423   4                  MRcvBuffer[i] = (dummyShift1 >> (i+1)) | (MRcvBuffer[i] << (7-i));
 424   4                  dummyShift1 = dummyShift2;
 425   4               }
 426   3               MInfo.nBitsReceived -= MInfo.nBytesReceived; 
 427   3               if ( MInfo.collPos ) MInfo.collPos += 7 - (MInfo.collPos + 6) / 9;
C51 COMPILER V7.07   FUNCTION                                                              06/13/2008 13:33:17 PAGE 8   

 428   3            }
 429   2               
 430   2            if ( status == MI_OK || status == MI_COLLERR) 
 431   2            {
 432   3               if ( MInfo.nBitsReceived != (40 - bcnt) ) 
 433   3               {
 434   4                  status = MI_BITCOUNTERR; 
 435   4               } 
 436   3               else 
 437   3               {
 438   4                  byteOffset = 0;
 439   4                  if( nbits != 0 ) 
 440   4                  {
 441   5                      snr_in[nbytes - 1] = snr_in[nbytes - 1] | MRcvBuffer[0];
 442   5                      byteOffset = 1;
 443   5                  }
 444   4      
 445   4                  for ( i =0; i < (4 - nbytes); i++)     
 446   4                  {
 447   5                     snr_in[nbytes + i] = MRcvBuffer[i + byteOffset];
 448   5                  }
 449   4        
 450   4                  if (status != MI_COLLERR ) 
 451   4                  {
 452   5                     snr_crc = snr_in[0] ^ snr_in[1] ^ snr_in[2] ^ snr_in[3];
 453   5                     snr_check = MRcvBuffer[MInfo.nBytesReceived - 1];
 454   5                     if (snr_crc != snr_check)
 455   5                     {
 456   6                        status = MI_SERNRERR;
 457   6                     } 
 458   5                     else   
 459   5                     {
 460   6                        complete = 1;
 461   6                     }
 462   5                  }
 463   4                  else       
 464   4                  {
 465   5                     bcnt = bcnt + MInfo.collPos - nbits;
 466   5                     status = MI_OK;
 467   5                  }
 468   4               }
 469   3            }
 470   2         }
 471   1         if (status == MI_OK)
 472   1         {
 473   2            memcpy(snr,snr_in,4);
 474   2         }
 475   1         else
 476   1         {
 477   2            memcpy(snr,"0000",4);
 478   2         }
 479   1         ClearBitMask(RegDecoderControl,0x20); 
 480   1         
 481   1         return status;  
 482   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1909    ----
   CONSTANT SIZE    =      5    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.07   FUNCTION                                                              06/13/2008 13:33:17 PAGE 9   

   DATA SIZE        =     47      40
   IDATA SIZE       =      1       9
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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