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

📄 m500auc.lst

📁 51单片机进行mifare1射频卡开发
💻 LST
字号:
C51 COMPILER V7.03   M500AUC                                                               05/22/2004 19:41:43 PAGE 1   


C51 COMPILER V7.03, COMPILATION OF MODULE M500AUC
OBJECT MODULE PLACED IN D:\ICCARD~1\C语言~1\测试_~3\M500AUC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\ICCARD~1\C语言~1\测试_~3\M500AUC.C DB SB OE

stmt level    source

   1          #define M500_GLOBALS
   2          
   3          //PICC=卡,PCD=阅读器
   4          
   5          //以下位要包含的头文件
   6          #include <string.h>           /*字符串函数及存储器函数头文件*/
   7          #include <stdio.h>            /*标准I/O头文件*/
   8          #include <absacc.h>           /*存储器绝对地址访问定义,与指令MOVX相关*/
   9          #include <intrins.h>          /*内部函数定义,与循环指令(例如RR),位判断指令(例如JB),以及空操作指令(NOP
             -)等相关*/
  10          
  11          #include "Mfreg500.h"         /* MF-RC500内部寄存器定义头文件*/
  12          #include "MfErrNo.h"          /* MF-RC500内部寄存器错误标志头文件*/
  13          #include "reg52.h"            /* 8052内部寄存器定义头文件*/
  14          #include "M500AuC.h"          /* MF-RC500用户自定义相关变量和数据结构头文件*/
  15          
  16          #define GetRegPage(addr)    (0x80 | (addr>>3))   /* 将addr右移3位再与80h取或 */
  17          #define nocard                      0    /*能量场中没有卡*/
  18          #define mifare1                     1    /*场中有mifare1卡 */
  19          #define mifarepro                   2    /*场中有mifarepro卡 */
  20          #define mifarelight                 3    /*场中有mifarelight卡 */
  21          #define unknowncard                 4    /*场中有未知卡 */
  22          #define NO_TIMER2                   1    /*? */
  23          
  24          #define uchar unsigned char
  25          bdata uchar AA;                   //A,可位寻址单字节数据类型
  26          sbit  high_bit=AA^7;              //ACC.7
  27          sbit  low_bit=AA^0;               //ACC.0
  28          
  29          
  30          //uchar sebuf;                //RECBUF,SENBUF
  31          uchar idata disp_buf[4];
  32          
  33          void  del_8us()
  34          {
  35   1            uchar i;
  36   1                for(i=0;i<1;i++)
  37   1                   {;}
  38   1      }
  39          
  40          void  del_50us()                  //延时子程序
  41          {
  42   1            uchar i;
  43   1                for(i=0;i<6;i++)
  44   1                   {;}
  45   1      }
  46          
  47          void  del_50ms()
  48          {
  49   1            uchar i,j;
  50   1                for(i=0;i<255;i++)
  51   1                   for(j=0;j<255;j++)
  52   1                   {;}
  53   1      }
  54          
C51 COMPILER V7.03   M500AUC                                                               05/22/2004 19:41:43 PAGE 2   

  55          void send(uchar sebuf)              //发送子程序
  56          {
  57   1            uchar i;
  58   1                AA=sebuf;
  59   1                CLK=0;
  60   1                CS=0;
  61   1                del_50us();
  62   1                for(i=0;i<8;i++)
  63   1                {
  64   2                 del_8us();
  65   2                 DIO=high_bit;
  66   2                 CLK=1;
  67   2                 del_8us();
  68   2                 AA=AA<<1;                //循环移位
  69   2                 CLK=0;
  70   2                }
  71   1                DIO=0;
  72   1      }
  73          
  74          void reset_light()                    //复位子程序
  75          {
  76   1            KEY=1;
  77   1            DIO=1;
  78   1            del_8us();
  79   1            send(0xa4);
  80   1            CS=1;
  81   1            del_8us();
  82   1      }
  83          
  84          void reset_7289()
  85          {
  86   1        reset_light();                    //上电初检
  87   1        send(0xbf);
  88   1        CS=1;                       //测试所有的led灯
  89   1        del_50ms();
  90   1        reset_light();                    //恢复熄灭状态
  91   1      }
  92          
  93          void display()
  94          {
  95   1       uchar i;
  96   1       for(i=0;i<4;i++)
  97   1          {send(0xa1);CS=1;del_8us();               //逻辑左移指令
  98   2           send(0xc8);
  99   2           send((disp_buf[i]>>4)&0x0f);CS=1;del_8us();
 100   2           send(0xa1);CS=1;del_8us();               //逻辑左移指令
 101   2           send(0xc8);
 102   2           send(disp_buf[i]&0x0f);CS=1;del_8us();
 103   2          }
 104   1      }
 105          
 106          
 107          ///////////////////////////////////////////////////////////////////////
 108                           /* 往一个寄存器写一个数据 */
 109          ///////////////////////////////////////////////////////////////////////
 110          void WriteRawIO(unsigned char Address,unsigned char value)
 111          {
 112   1              XBYTE[Address]=value;        /* 调用XBYTE函数? */
 113   1      }
 114          
 115          ///////////////////////////////////////////////////////////////////////
 116                          /* 从一个寄存器读出一个数据 */
C51 COMPILER V7.03   M500AUC                                                               05/22/2004 19:41:43 PAGE 3   

 117          ///////////////////////////////////////////////////////////////////////
 118          unsigned char ReadRawIO(unsigned char Address)
 119          {
 120   1              return XBYTE[Address];       /* 调用XBYTE函数 */
 121   1      }
 122          
 123          ///////////////////////////////////////////////////////////////////////
 124                         /* 用页选方式访问寄存器(写入)*/
 125          ///////////////////////////////////////////////////////////////////////
 126          void WriteIO(unsigned char Address, unsigned char value)
 127          {
 128   1          WriteRawIO(0x00,GetRegPage(Address));      /* 调用writerawio()函数,页选(80h-87h) */
 129   1          WriteRawIO(Address,value);                 /* 调用writerawio()函数,选择一个寄存器(0-7h) */
 130   1      }
 131          
 132          ///////////////////////////////////////////////////////////////////////
 133                         /* 用页选方式访问寄存器(读出)*/
 134          ///////////////////////////////////////////////////////////////////////
 135          unsigned char ReadIO(unsigned char Address)
 136          {
 137   1         WriteRawIO(0x00,GetRegPage(Address));       /* 调用writerawio()函数,页选 */
 138   1         return ReadRawIO(Address);                  /* 调用readrawio()函数 */
 139   1      }
 140          
 141          ///////////////////////////////////////////////////////////////////////
 142                               /* 设置定时时间 */
 143          ///////////////////////////////////////////////////////////////////////
 144          void M500PcdSetTmo(unsigned char tmoLength)
 145          {
 146   1          switch(tmoLength)
 147   1          {
 148   2              case 1:
 149   2                  WriteIO(RegTimerClock,0x07);      /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
             -128--2^7 */
 150   2                  WriteIO(RegTimerReload,0x6a);     /* 调用WRITEIO()函数,从单片机写计时器的初始值(6AH) */
 151   2                  break;
 152   2              case 2:
 153   2                  WriteIO(RegTimerClock,0x07);      /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
             -128--2^7 */
 154   2                  WriteIO(RegTimerReload,0xa0);     /* 调用WRITEIO()函数,从单片机写计时器的初始值(A0H) */
 155   2                  break;
 156   2              case 3:
 157   2                  WriteIO(RegTimerClock,0x09);      /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
             -512--2^9 */
 158   2                  WriteIO(RegTimerReload,0xa0);     /* 调用WRITEIO()函数,从单片机写计时器的初始值(A0H) */
 159   2                  break;
 160   2              case 4:
 161   2                  WriteIO(RegTimerClock,0x09);      /* 调用WRITEIO()函数,从单片机写计时器得分频比(09H)=13.56MHZ/
             -512--2^9 */
 162   2                  WriteIO(RegTimerReload,0xff);     /* 调用WRITEIO()函数,从单片机写计时器的初始值(FF) */
 163   2                  break;
 164   2              case 5:
 165   2                  WriteIO(RegTimerClock,0x0b);      /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
             -128--2^7 */
 166   2                  WriteIO(RegTimerReload,0xff);     /* 调用WRITEIO()函数,从单片机写计时器的初始值(FFH) */
 167   2                  break;
 168   2              case 6:
 169   2                  WriteIO(RegTimerClock,0x0d);      /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
             -128--2^7 */
 170   2                  WriteIO(RegTimerReload,0xff);     /* 调用WRITEIO()函数,从单片机写计时器的初始值(FFH) */
 171   2                  break;
 172   2              case 7:
C51 COMPILER V7.03   M500AUC                                                               05/22/2004 19:41:43 PAGE 4   

 173   2                  WriteIO(RegTimerClock,0x0f);      /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
             -128--2^7 */
 174   2                  WriteIO(RegTimerReload,0xff);     /* 调用WRITEIO()函数,从单片机写计时器的初始值(FFH) */
 175   2                  break;
 176   2              default:                              /* 其它情况 */
 177   2                  WriteIO(RegTimerClock,0x07);      /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
             -128--2^7 */
 178   2                  WriteIO(RegTimerReload,tmoLength);  /* 调用WRITEIO()函数,从单片机写计时器的初始值(TMOLENTH) */
 179   2                  break;
 180   2          }
 181   1      }
 182          
 183          ///////////////////////////////////////////////////////////////////////
 184          // Request Command defined in ISO14443(Mifare)
 185                     /* 命令判别程序 */
 186          ///////////////////////////////////////////////////////////////////////
 187          char  M500PcdCmd(unsigned char cmd,
 188                           volatile unsigned char data *rcv,
 189                           MfCmdInfo idata *info)
 190          {
 191   1          char          idata status    = MI_OK;
 192   1          char          idata tmpStatus ;               /* 中间状态寄存器 */
 193   1          unsigned char idata lastBits;                 /* 中间状态寄存器 */
 194   1          unsigned int  idata timecnt = 0;
 195   1          unsigned char idata irqEn = 0x00;
 196   1          unsigned char idata waitFor = 0x00;
 197   1          unsigned char idata timerCtl  = 0x00;
 198   1      
 199   1          WriteIO(RegInterruptEn,0x7F);                 /*(06H)SETEN,0,TIMER,TX,RX,IDLE,HI,LO=0111,1111:禁中断
             -使能  */
 200   1          WriteIO(RegInterruptRq,0x7F);                 /* (07H) SETIRQ,0,TIMER,TX,RX,IDLE,HI,LO=0111,1111:禁中

⌨️ 快捷键说明

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