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

📄 slrc500.lst

📁 RC500可用的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SLRC500                                                               05/01/2009 01:52:10 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SLRC500
OBJECT MODULE PLACED IN SlRc500.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SlRc500.C ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "reg52.h"
   2          #include <intrins.h>
   3          #include <string.h>
   4          #include <absacc.h>
   5          #include "main.h"
   6          #include "slrc500.h"
   7          #define Gpbase                0x7F00                    //感应模块地址 
   8          
   9          #define outportb(addr,d)        XBYTE[addr]=d
  10          #define inportb(addr)           XBYTE[addr]
  11          
  12          #define FSD 64
  13          
  14          extern struct TranSciveBuffer{unsigned char MfCommand;
  15                                        unsigned int  MfLength;
  16                                        unsigned char MfData[64];
  17                                       };
  18          /////////////////////////////////////////////////////////////////////
  19          //复位并初始化RC500
  20          //
  21          /////////////////////////////////////////////////////////////////////
  22          char PcdReset()
  23          {
  24   1         char status = MI_OK;
  25   1         char n = 0xFF;
  26   1         unsigned int i = 3000;
  27   1      
  28   1          DelayMs(100);
  29   1          DelayMs(100);
  30   1              DelayMs(100);
  31   1          DelayMs(100);
  32   1          DelayMs(100);
  33   1          DelayMs(100);
  34   1          DelayMs(100);
  35   1         RC500_CE =0;
  36   1         RC500_RST=0;
  37   1         DelayMs(50);
  38   1         DelayMs(50);
  39   1      
  40   1         RC500_RST=1; //高电平复位
  41   1         DelayMs(5);  //复位时间
  42   1         DelayMs(50);
  43   1         DelayMs(50);
  44   1         DelayMs(50);
  45   1         DelayMs(50);
  46   1         DelayMs(50);
  47   1         DelayMs(50);
  48   1         RC500_RST=0;
  49   1         DelayMs(5);
  50   1      
  51   1         while (i!=0 && n)
  52   1         {
  53   2            n = ReadRawRC(RegCommand);//读取指令寄存器的值,不为0--初始化没完成,为0--初始化完成
  54   2            i--;                                              //初始化完成后RC500自动输入Idle 命令,结果Command 值变为00H
  55   2         }
C51 COMPILER V7.06   SLRC500                                                               05/01/2009 01:52:10 PAGE 2   

  56   1      
  57   1         if (i != 0)
  58   1         {
  59   2            WriteRawRC(RegPage,0x80);//PageSelect位为1,则第三位的值选择寄存器页
  60   2            n = 0x80;
  61   2            while ( (i!=0) && (n&0x80) )
  62   2            {
  63   3                n = ReadRawRC(RegCommand);//接口检测是否成功完成,Command的第八位IfDetectBusy
  64   3                i--;
  65   3            }
  66   2            if (i==0 || (n&0xFF))             //复位不成功,读取Command的值不为0
  67   2            {   status = MI_RESETERR;   } 
  68   2         }
  69   1         else
  70   1         {    status = MI_RESETERR;     }
  71   1         
  72   1         if (status == MI_OK)
  73   1         {    WriteRawRC(RegPage,0x0);  }//将0X00 写入页寄存器可激活线性地址模式
  74   1         
  75   1         return status;
  76   1      }
  77          
  78          //////////////////////////////////////////////////////////////////////
  79          //设置RC500的工作方式 
  80          //////////////////////////////////////////////////////////////////////
  81          char PcdConfigISOType(unsigned char type)
  82          {
  83   1         
  84   1         if (type == 'A')                    //ISO14443_A
  85   1         { 
  86   2             ClearBitMask(RegControl,0x08);  //Crypto1On 该位指示Crypto1 单元打开因此与卡的所有数据通信都被加密 
             -                     
  87   2      
  88   2             WriteRawRC(RegClockQControl,0x0);//Q时钟复位
  89   2             WriteRawRC(RegClockQControl,0x40);//Q时钟写入0x40,复位后或从卡接收数据后自动校准
  90   2             Delay_50us(2);                   // wait approximately 100 us - calibration in progress
  91   2             ClearBitMask(RegClockQControl,0x40);//清掉该位
  92   2             WriteRawRC(RegBitPhase,0xAD);    //写BitPhase寄存器      
  93   2             WriteRawRC(RegRxThreshold,0xFF); //选择位解码器的阀值
  94   2             WriteRawRC(RegRxControl2,0x01);  //RxControl2寄存器写入01H,曼切斯特内部解码器   
  95   2      
  96   2             WriteRawRC(RegTimerControl,0x02);//设置数据发送完成后停止定时器   
  97   2             WriteRawRC(RegIRqPinConfig,0x03);//配置IRQ管脚的输出状态,中端口输出低有效使能 
  98   2                      
  99   2                 M500PcdRfReset(1);
 100   2      
 101   2             PcdSetTmo(106);
 102   2             DelayMs(1);
 103   2             PcdAntennaOn();                                  //开启天线
 104   2      
 105   2         }
 106   1      
 107   1         else{ return -1; }
 108   1         return MI_OK;
 109   1      }
 110          ///////////////////////////////////////////////////////////////////////
 111          // Reset Rf Card
 112          ///////////////////////////////////////////////////////////////////////
 113          char M500PcdRfReset(unsigned char ms)
 114          {
 115   1          char status = MI_OK;
 116   1              
C51 COMPILER V7.06   SLRC500                                                               05/01/2009 01:52:10 PAGE 3   

 117   1          if(ms)
 118   1          {
 119   2              ClearBitMask(RegTxControl,0x03);  //TX2RFEn、TX1RFEn位清零,复位天线
 120   2               DelayMs(2);                
 121   2              SetBitMask(RegTxControl,0x03); 
 122   2          }
 123   1          else
 124   1          {
 125   2              ClearBitMask(RegTxControl,0x03);  
 126   2          }
 127   1          return status;
 128   1      }
 129          
 130          /////////////////////////////////////////////////////////////////////
 131          //读RC500寄存器位
 132          //input:Address=寄存器地址
 133          //ouput:读出的值
 134          /////////////////////////////////////////////////////////////////////
 135          unsigned char ReadRawRC(unsigned char Address)
 136          {
 137   1          //unsigned char pdata *pa;
 138   1      //      unsigned i;
 139   1         // pa = Address;
 140   1      //      i = *pa;
 141   1      //      return(i);   
 142   1          return inportb(Gpbase+Address);
 143   1      }
 144          
 145          /////////////////////////////////////////////////////////////////////
 146          //写RC500寄存器
 147          //input:Address=寄存器地址
 148          //      value=要写入的值
 149          /////////////////////////////////////////////////////////////////////
 150          void WriteRawRC(unsigned char Address, unsigned char value)
 151          {  
 152   1         // unsigned char pdata *pa;
 153   1         // pa = Address;
 154   1         // *pa = value;
 155   1         outportb(Gpbase+Address,value);
 156   1      
 157   1      }
 158          
 159          
 160          /////////////////////////////////////////////////////////////////////
 161          //置RC500寄存器位
 162          //input:reg=寄存器地址
 163          //      mask=置位值
 164          /////////////////////////////////////////////////////////////////////
 165          void SetBitMask(unsigned char reg,unsigned char mask)  
 166          {
 167   1         char tmp = 0x0;
 168   1         tmp = ReadRawRC(reg);
 169   1         WriteRawRC(reg,tmp | mask);  // set bit mask
 170   1      }
 171          
 172          /////////////////////////////////////////////////////////////////////
 173          //清RC500寄存器位
 174          //input:reg=寄存器地址
 175          //      mask=清位值
 176          /////////////////////////////////////////////////////////////////////
 177          void ClearBitMask(unsigned char reg,unsigned char mask)  
 178          {
C51 COMPILER V7.06   SLRC500                                                               05/01/2009 01:52:10 PAGE 4   

 179   1         char tmp = 0x0;
 180   1         tmp = ReadRawRC(reg);
 181   1         WriteRawRC(reg, tmp & ~mask);  // clear bit mask
 182   1      } 
 183          
 184          /////////////////////////////////////////////////////////////////////
 185          //设置RC500定时器
 186          //input:tmolength=设置值
 187          /////////////////////////////////////////////////////////////////////
 188          void PcdSetTmo(unsigned char tmoLength)
 189          {
 190   1         switch(tmoLength)//TAutoRestart 如果设置为1 定时器从TReloadValue 处自动重新开始向下计数而不是向下计数到
             -零,如果设置为0 定时器减少到零并且TimerIRq 置位
 191   1         {  
 192   2            case 0:                         // (0.302 ms) FWI=0
 193   2               WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
 194   2               WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h21 =33(dec) 
 195   2               break;
 196   2            case 1:                         // (0.604 ms) FWI=1
 197   2               WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
 198   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 199   2               break;
 200   2            case 2:                         // (1.208 ms) FWI=2
 201   2               WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
 202   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 203   2               break;
 204   2            case 3:                         // (2.416 ms) FWI=3
 205   2               WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
 206   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 207   2               break;
 208   2            case 4:                         // (4.833 ms) FWI=4
 209   2               WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
 210   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 211   2               break;
 212   2            case 5:                         // (9.666 ms) FWI=5
 213   2               WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
 214   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 215   2               break;
 216   2            case 6:                         // (19.33 ms) FWI=6
 217   2               WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
 218   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 219   2               break;
 220   2            case 7:                         // (38.66 ms) FWI=7
 221   2               WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
 222   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 223   2               break;
 224   2            case 8:                         // (77.32 ms) FWI=8
 225   2               WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
 226   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 227   2               break;
 228   2            case 9:                         // (154.6 ms) FWI=9
 229   2               WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
 230   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec) 
 231   2               break;
 232   2            case 10:                        // (309.3 ms) FWI=10
 233   2               WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
 234   2               WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec) 
 235   2               break;
 236   2            case 11:                        // (618.6 ms) FWI=11
 237   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 238   2               WriteRawRC(RegTimerReload,0x11);// TReloadVal = 'h21 =17(dec) 
 239   2               break;
C51 COMPILER V7.06   SLRC500                                                               05/01/2009 01:52:10 PAGE 5   

 240   2            case 12:                        // (1.2371 s) FWI=12
 241   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 242   2               WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h41 =33(dec) 
 243   2               break;
 244   2            case 13:                        // (2.4742 s) FWI=13
 245   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
 246   2               WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h81 =65(dec) 
 247   2               break;
 248   2            case 14:                        // (4.9485 s) FWI=14
 249   2               WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128

⌨️ 快捷键说明

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