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

📄 pcdutils.lst

📁 此程序为13.56MHz的RFID底层读写卡程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V4.01,  PCDUTILS                                                              19/08/04  14:33:22  PAGE 1   


DOS C51 COMPILER V4.01, COMPILATION OF MODULE PCDUTILS
OBJECT MODULE PLACED IN D:\13505B\105B\PCDUTILS.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE D:\13505B\105B\PCDUTILS.C DB SB OE

stmt level    source

   1          #include <string.h>
   2          #include <stdio.h>
   3          #include <PcdUtils.h>
   4          #include <MfRc500.h>
   5          #include <RcComm.h>
   6          #include <MfErrNo.h>
   7          #include "Hardware.h"
   8          #include "PcdShare.h"
   9          #include "MfReg.h"
  10          
  11          static MfCmdInfo     * MpIsrInfo;
  12          static unsigned char * MpIsrOut;
  13          static unsigned char * MpIsrIn;
  14          
  15          //unsigned char RxTxBuffer[MAX_RF_BUF_SIZE];
  16          
  17          void PcdSetTmo(unsigned char tmoLength);
  18          void ClearBitMask(unsigned char reg,unsigned char mask);
  19          void SetBitMask(unsigned char reg,unsigned char mask);
  20          void FlushFIFO(void);
  21          char  PcdSingleResponseCmd(unsigned char cmd,
  22                         unsigned char * send,
  23                         unsigned char * rcv,
  24                         MfCmdInfo *info);
  25          ///////////////////////////////////////////////////////////////////////
  26          //         S e t   T i m e o u t   L E N G T H
  27          ///////////////////////////////////////////////////////////////////////
  28          void PcdSetTmo(unsigned char tmoLength)
  29          {
  30   1          switch(tmoLength)
  31   1         {  // timer clock frequency 13,56 MHz
  32   2            case 1:                         // short timeout (1,0 ms)
  33   2               WriteRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
  34   2               WriteRC(RegTimerReload,0x6a);// TReloadVal = 'h6a =106(dec)
  35   2               break;
  36   2            case 2:                       // medium timeout (1,5 ms)
  37   2               WriteRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
  38   2               WriteRC(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec)
  39   2               break;
  40   2            case 3:                       // long timeout (6 ms)
  41   2               WriteRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
  42   2               WriteRC(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec)
  43   2               break;
  44   2            case 4:                       // long timeout (9.6 ms)
  45   2               WriteRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
  46   2               WriteRC(RegTimerReload,0xff);// TReloadVal = 'ff =255(dec)
  47   2               break;
  48   2            case 5:
  49   2               WriteRC(RegTimerClock,0x0f); // TAutoRestart=0,TPrescale=4*128
  50   2               WriteRC(RegTimerReload,0xff);// TReloadVal = 'ff =255(dec)
  51   2               break;
  52   2          /* case 10:                        // (309.3 ms) FWI=10
  53   2               WriteRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
  54   2               WriteRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
  55   2               break;   */
  56   2            default:                       // short timeout (1,0 ms)
  57   2               WriteRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
  58   2               WriteRC(RegTimerReload,tmoLength);// TReloadVal = tmoLength
  59   2               break;
C51 COMPILER V4.01,  PCDUTILS                                                              19/08/04  14:33:22  PAGE 2   

  60   2         }
  61   1      }
  62          
  63          //////////////////////////////////////////////////////////////////////
  64          //   S E T   A   B I T   M A S K
  65          ///////////////////////////////////////////////////////////////////////
  66          void SetBitMask(unsigned char reg,unsigned char mask) //
  67          {
  68   1         char tmp    = 0x0;
  69   1      
  70   1         tmp = ReadRC(reg);
  71   1         WriteRC(reg,tmp | mask);  // set bit mask
  72   1      }
  73          
  74          //////////////////////////////////////////////////////////////////////
  75          //   C L E A R   A   B I T   M A S K
  76          ///////////////////////////////////////////////////////////////////////
  77          void ClearBitMask(unsigned char reg,unsigned char mask)
  78          {
  79   1         char tmp = 0x0;
  80   1      
  81   1         tmp = ReadRC(reg);
  82   1         WriteRC(reg,tmp & ~mask);  // clear bit mask
  83   1      }
  84          
  85          ///////////////////////////////////////////////////////////////////////
  86          //                  F L U S H    F I F O
  87          ///////////////////////////////////////////////////////////////////////
  88          void FlushFIFO(void)
  89          {
  90   1         SetBitMask(RegControl,0x01);
  91   1      }
  92          
  93          //////////////////////////////////////////////////////////////////////
  94          //       W R I T E   A   P C D   C O M M A N D
  95          ///////////////////////////////////////////////////////////////////////
  96          char  PcdSingleResponseCmd(unsigned char cmd,
  97                         unsigned char * send,
  98                         unsigned char * rcv,
  99                         MfCmdInfo *info)
 100          {
 101   1         char  status    = MI_OK;
 102   1         char  tmpStatus;
 103   1         unsigned char lastBits;
 104   1      
 105   1         unsigned char irqEn     = 0x00;
 106   1         unsigned char waitFor   = 0x00;
 107   1         unsigned char timerCtl  = 0x00;
 108   1      
 109   1         unsigned long TimeOutCount;
 110   1      
 111   1      
 112   1         WriteRC(RegInterruptEn,0x7F); // disable all interrupts
 113   1         WriteRC(RegInterruptRq,0x7F); // reset interrupt requests
 114   1         WriteRC(RegCommand,PCD_IDLE); // terminate probably running command
 115   1      
 116   1         FlushFIFO();            // flush FIFO buffer
 117   1      
 118   1         // save info structures to module pointers
 119   1         MpIsrInfo = info;
 120   1         MpIsrOut  = send;
 121   1         MpIsrIn   = rcv;
 122   1      
 123   1         // initialising the ISR-Function pointer for mifare
 124   1         // protocol - do this after initialising the MpXXXX variables
 125   1      //   PcdIsrFct = SingleResponseIsr;
C51 COMPILER V4.01,  PCDUTILS                                                              19/08/04  14:33:22  PAGE 3   

 126   1         //OpenExternInt0();
 127   1         info->irqSource = 0x0; // reset interrupt flags
 128   1         OpenExternInt0();
 129   1      //   READER_INT_ENABLE;
 130   1         // depending on the command code, appropriate interrupts are enabled (irqEn)
 131   1         // and the commit interrupt is choosen (waitFor).
 132   1         switch(cmd)
 133   1         {
 134   2            case PCD_IDLE:                   // nothing else required
 135   2               irqEn = 0x00;
 136   2               waitFor = 0x00;
 137   2               break;
 138   2            case PCD_WRITEE2:                // LoAlert and TxIRq
 139   2               irqEn = 0x11;
 140   2               waitFor = 0x10;
 141   2               break;
 142   2            case PCD_READE2:                 // HiAlert, LoAlert and IdleIRq
 143   2               irqEn = 0x07;
 144   2               waitFor = 0x04;
 145   2               break;
 146   2            case PCD_LOADCONFIG:             // IdleIRq and LoAlert
 147   2            case PCD_LOADKEYE2:              // IdleIRq and LoAlert
 148   2            case PCD_AUTHENT1:               // IdleIRq and LoAlert
 149   2               irqEn = 0x05;
 150   2               waitFor = 0x04;
 151   2               break;
 152   2            case PCD_CALCCRC:                // LoAlert and TxIRq
 153   2               irqEn = 0x11;
 154   2               waitFor = 0x10;
 155   2               break;
 156   2            case PCD_AUTHENT2:               // IdleIRq
 157   2               irqEn = 0x04;
 158   2               waitFor = 0x04;
 159   2               break;
 160   2            case PCD_RECEIVE:                // HiAlert and IdleIRq
 161   2               info->nBitsReceived = -(ReadRC(RegBitFraming) >> 4);
 162   2               irqEn = 0x06;
 163   2               waitFor = 0x04;
 164   2               break;
 165   2            case PCD_LOADKEY:                 // IdleIRq
 166   2               irqEn = 0x05;
 167   2               waitFor = 0x04;
 168   2               break;
 169   2            case PCD_TRANSMIT:               // LoAlert and IdleIRq
 170   2               irqEn = 0x05;
 171   2               waitFor = 0x04;
 172   2               break;
 173   2            case PCD_TRANSCEIVE:             // TxIrq, RxIrq, IdleIRq and LoAlert
 174   2               info->nBitsReceived = -(ReadRC(RegBitFraming) >> 4);
 175   2               irqEn = 0x3d;//0x1d//0x3d//////allen 10.23
 176   2               waitFor = 0x04;
 177   2               break;

⌨️ 快捷键说明

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