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

📄 src632.lst

📁 这是SLRC632的全部源代码.包括读typea typeb书..全功能支持
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   SRC632                                                                07/25/2008 17:05:20 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SRC632
OBJECT MODULE PLACED IN src632.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE src632.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <REGX52.H>
   2          #include <main.h>
   3          #include <iso14443b.h>
   4          #include <src632.h>
   5          #include <string.h>
   6          #include <intrins.h>
   7          
   8          #define FSD 64
   9          
  10          extern struct TranSciveBuffer{unsigned char MfCommand;
  11                                        unsigned int  MfLength;
  12                                        unsigned char MfData[64];
  13                                       };
  14          
  15          /////////////////////////////////////////////////////////////////////
  16          //写RC632寄存器
  17          //input:Address=寄存器地址
  18          //      value=要写入的值
  19          /////////////////////////////////////////////////////////////////////
  20          void WriteRawRC(unsigned char Address, unsigned char value)
  21          { 
  22   1       
  23   1              unsigned char xdata *pa;
  24   1      
  25   1         pa=Base_addr;
  26   1      
  27   1         RC632_CE = 0;
  28   1      
  29   1         *pa=Address>>3;
  30   1         pa=Address+Base_addr;
  31   1         *pa=value;
  32   1      
  33   1         RC632_CE = 1;                
  34   1      }
  35          /////////////////////////////////////////////////////////////////////
  36          //置RC632寄存器位
  37          //input:reg=寄存器地址
  38          //      mask=置位值
  39          /////////////////////////////////////////////////////////////////////
  40          void SetBitMask(unsigned char reg,unsigned char mask)  
  41          {
  42   1         char tmp = 0x0;
  43   1         tmp = ReadRawRC(reg);
  44   1         WriteRawRC(reg,tmp | mask);  // set bit mask
  45   1      }
  46          
  47          /////////////////////////////////////////////////////////////////////
  48          //清RC632寄存器位
  49          //input:reg=寄存器地址
  50          //      mask=清位值
  51          /////////////////////////////////////////////////////////////////////
  52          void ClearBitMask(unsigned char reg,unsigned char mask)  
  53          {
  54   1         char tmp = 0x0;
  55   1         tmp = ReadRawRC(reg);
C51 COMPILER V7.50   SRC632                                                                07/25/2008 17:05:20 PAGE 2   

  56   1         WriteRawRC(reg, tmp & ~mask);
  57   1      } 
  58          
  59          /////////////////////////////////////////////////////////////////////
  60          //读RC632寄存器位
  61          //input:Address=寄存器地址
  62          //ouput:读出的值
  63          /////////////////////////////////////////////////////////////////////
  64          unsigned char ReadRawRC(unsigned char Address)
  65          {
  66   1      
  67   1          static unsigned char xdata *pa;
  68   1          static unsigned char temp;
  69   1      
  70   1          pa=Base_addr;
  71   1      
  72   1          RC632_CE = 0;
  73   1      
  74   1          *pa=Address>>3;
  75   1          pa=Address+Base_addr;  
  76   1          temp = *pa;
  77   1      
  78   1          RC632_CE = 1;
  79   1      
  80   1         return(temp);    
  81   1      }
  82          
  83          /////////////////////////////////////////////////////////////////////
  84          //设置RC632定时器
  85          //input:tmolength=设置值
  86          /////////////////////////////////////////////////////////////////////
  87          void PcdSetTmo(unsigned char tmoLength)
  88          {
  89   1         switch(tmoLength)
  90   1         {  
  91   2            case 0:                         // (0.302 ms) FWI=0
  92   2               WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
  93   2               WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h21 =33(dec) 
  94   2               break;
  95   2            case 1:                         // (0.604 ms) FWI=1
  96   2               WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
  97   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
  98   2               break;
  99   2            case 2:                         // (1.208 ms) FWI=2
 100   2               WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
 101   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 102   2               break;
 103   2            case 3:                         // (2.416 ms) FWI=3
 104   2               WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
 105   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 106   2               break;
 107   2            case 4:                         // (4.833 ms) FWI=4
 108   2               WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
 109   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 110   2               break;
 111   2            case 5:                         // (9.666 ms) FWI=5
 112   2               WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
 113   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 114   2               break;
 115   2            case 6:                         // (19.33 ms) FWI=6
 116   2               WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
 117   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
C51 COMPILER V7.50   SRC632                                                                07/25/2008 17:05:20 PAGE 3   

 118   2               break;
 119   2            case 7:                         // (38.66 ms) FWI=7
 120   2               WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
 121   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 122   2               break;
 123   2            case 8:                         // (77.32 ms) FWI=8
 124   2               WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
 125   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 126   2               break;
 127   2            case 9:                         // (154.6 ms) FWI=9
 128   2               WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
 129   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 130   2               break;
 131   2            case 10:                        // (309.3 ms) FWI=10
 132   2               WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
 133   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 134   2               break;
 135   2            case 11:                        // (618.6 ms) FWI=11
 136   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 137   2               WriteRawRC(RegTimerReload,0x11);// TReloadVal = 'h21 =17(dec) 
 138   2               break;
 139   2            case 12:                        // (1.2371 s) FWI=12
 140   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 141   2               WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h41 =33(dec) 
 142   2               break;
 143   2            case 13:                        // (2.4742 s) FWI=13
 144   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 145   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h81 =65(dec) 
 146   2               break;
 147   2            case 14:                        // (4.9485 s) FWI=14
 148   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 149   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 150   2               break;
 151   2            case 15:                        // (4.9485 s) FWI=14
 152   2               WriteRawRC(RegTimerClock,0x9); // TAutoRestart=0,TPrescale=4096*128
 153   2               WriteRawRC(RegTimerReload,0x0ff);// TReloadVal = 'h81 =129(dec) 
 154   2               break;
 155   2            default:                       // 
 156   2               WriteRawRC(RegTimerClock,0x19); // TAutoRestart=0,TPrescale=128
 157   2               WriteRawRC(RegTimerReload,tmoLength);// TReloadVal = 'h6a =tmoLength(dec) 
 158   2               break;
 159   2         }     
 160   1         WriteRawRC(RegTimerControl,0X06);
 161   1      }
 162          
 163          
 164          /////////////////////////////////////////////////////////////////////
 165          //通过RC632和ISO14443卡通讯
 166          //input: pi->MfCommand = RC632命令字
 167          //       pi->MfLength  = 发送的数据长度
 168          //       pi->MfData[]  = 发送数据
 169          //output:status        = 错误字
 170          //       pi->MfLength  = 接收的数据BIT长度
 171          //       pi->MfData[]  = 接收数据
 172          /////////////////////////////////////////////////////////////////////
 173          char PcdComTransceive(struct TranSciveBuffer *pi)
 174          {
 175   1         bit recebyte = 0;
 176   1         char status;
 177   1         unsigned char irqEn   = 0x00;
 178   1         unsigned char waitFor = 0x00;
 179   1         unsigned char lastBits;
C51 COMPILER V7.50   SRC632                                                                07/25/2008 17:05:20 PAGE 4   

 180   1         unsigned char n;
 181   1         unsigned int i;
 182   1         switch (pi->MfCommand)
 183   1         {
 184   2            case PCD_IDLE:
 185   2               irqEn   = 0x00;
 186   2               waitFor = 0x00;
 187   2               break;
 188   2            case PCD_WRITEE2:
 189   2               irqEn   = 0x11;
 190   2               waitFor = 0x10;
 191   2               break;
 192   2            case PCD_READE2:
 193   2               irqEn   = 0x07;
 194   2               waitFor = 0x04;
 195   2               recebyte=1;
 196   2               break;
 197   2            case PCD_LOADCONFIG:
 198   2            case PCD_LOADKEYE2:
 199   2            case PCD_AUTHENT1:
 200   2               irqEn   = 0x05;
 201   2               waitFor = 0x04;
 202   2               break;
 203   2            case PCD_CALCCRC:
 204   2               irqEn   = 0x11;
 205   2               waitFor = 0x10;
 206   2               break;
 207   2            case PCD_AUTHENT2:
 208   2               irqEn   = 0x04;
 209   2               waitFor = 0x04;
 210   2               break;
 211   2            case PCD_RECEIVE:
 212   2               irqEn   = 0x06;
 213   2               waitFor = 0x04;
 214   2               recebyte=1;
 215   2               break;
 216   2            case PCD_LOADKEY:
 217   2               irqEn   = 0x05;
 218   2               waitFor = 0x04;
 219   2               break;
 220   2            case PCD_TRANSMIT:
 221   2               irqEn   = 0x05;
 222   2               waitFor = 0x04;
 223   2               break;
 224   2            case PCD_TRANSCEIVE:
 225   2               irqEn   = 0x3D;
 226   2               waitFor = 0x04;
 227   2               recebyte=1;
 228   2               break;
 229   2            default:
 230   2               pi->MfCommand = MI_UNKNOWN_COMMAND;
 231   2               break;
 232   2         }
 233   1         
 234   1         if (pi->MfCommand != MI_UNKNOWN_COMMAND)
 235   1         {
 236   2            WriteRawRC(RegPage,0x00);
 237   2            WriteRawRC(RegInterruptEn,0x7F);
 238   2            WriteRawRC(RegInterruptRq,0x7F);
 239   2            WriteRawRC(RegCommand,PCD_IDLE);
 240   2            SetBitMask(RegControl,0x01);
 241   2            WriteRawRC(RegInterruptEn,irqEn|0x80);
C51 COMPILER V7.50   SRC632                                                                07/25/2008 17:05:20 PAGE 5   

 242   2            for (i=0; i<pi->MfLength; i++)
 243   2            {
 244   3               WriteRawRC(RegFIFOData, pi->MfData[i]);
 245   3            }
 246   2            WriteRawRC(RegCommand, pi->MfCommand);
 247   2            i = 0x3500;
 248   2            do
 249   2            {
 250   3               n = ReadRawRC(RegInterruptRq);
 251   3               i--;
 252   3            }
 253   2            while ((i!=0) && !(n&irqEn&0x20) && !(n&waitFor));
 254   2            status = MI_COM_ERR;
 255   2            if ((i!=0) && !(n&irqEn&0x20))
 256   2            {
 257   3               if (!(ReadRawRC(RegErrorFlag)&0x17))
 258   3               {
 259   4                  status = MI_OK;
 260   4                  if (recebyte)
 261   4                  {
 262   5                      n = ReadRawRC(RegFIFOLength);
 263   5                      lastBits = ReadRawRC(RegSecondaryStatus) & 0x07;
 264   5                      if (lastBits)
 265   5                      {
 266   6                         pi->MfLength = (n-1)*8 + lastBits;
 267   6                      }
 268   5                      else
 269   5                      {
 270   6                         pi->MfLength = n*8;
 271   6                      }
 272   5                      if (n == 0)
 273   5                      {
 274   6                         n = 1;
 275   6                      }
 276   5                      for (i=0; i<n; i++)
 277   5                      {
 278   6                          pi->MfData[i] = ReadRawRC(RegFIFOData);
 279   6                      }
 280   5                  }
 281   4               }
 282   3                       else if (ReadRawRC(RegErrorFlag)&0x01)
 283   3               {
 284   4                          status = MI_COLLERR;
 285   4                  if (recebyte)
 286   4                  {
 287   5                      n = ReadRawRC(RegFIFOLength);
 288   5                      lastBits = ReadRawRC(RegSecondaryStatus) & 0x07;
 289   5                      if (lastBits)
 290   5                      {
 291   6                         pi->MfLength = (n-1)*8 + lastBits;
 292   6                      }
 293   5                      else
 294   5                      {
 295   6                         pi->MfLength = n*8;
 296   6                      }

⌨️ 快捷键说明

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