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

📄 main.lst

📁 f330与mfrc522 通信 构成读卡器 上传源码和原理图。
💻 LST
字号:
C51 COMPILER V6.23a  MAIN                                                                  04/14/2008 15:21:34 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe main.c DB OE

stmt level    source

   1          //////////////////  RF522 读卡器程序   ///////////////////
   2          //     MCU型号:                C8051F330                //
   3          //     读卡芯片型号:   RF522
   4          ////////////////////////////////////////////////////////////////////
   5          #include "main.h"
   6          #include "Uart0.h"
   7          #include "MFRC522.h"
   8          #include "Timer2.h"
   9          #include "Adc.h" 
  10          //#include "F330_FlashP.h"
  11          //***************************************************************
  12          //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令
  13          unsigned char code data1[16] = {0x12,0x34,0x56,0x78,  //4字节金额(低字节在前)
  14                                          0xED,0xCB,0xA9,0x87,  //4字节金额取反
  15                                                                          0x12,0x34,0x56,0x78,  //4字节金额
  16                                                                          0x01,0xFE,0x01,0xFE}; //块地址1B+地址反1B+块地址1B+块地址1B 
  17          //
  18          UCHAR   code data2[4]      = {0x12,0,0,0};          
  19          UCHAR   code DefaultKey[6] = {0x4A, 0x59, 0x30, 0x31, 0x30, 0x35};  //密钥
  20          UCHAR   xdata g_ucTempbuf[20];
  21                                     //jd    buad  格式
  22          UCHAR   code DefaulSet[4] = {0x0, 0x00, 0x6C, 0x7D};  //读卡器默认设置信息
  23          UCHAR   data SetxxBuf [4] = {0x00, 0x00, 0x0, 0x0};
  24          
  25          
  26          extern  UCHAR  xdata  ComTBuf[];
  27          extern  UCHAR  data   Sio_Lth;     //
  28          extern  UCHAR  idata  ComTBufHead;
  29          extern  UCHAR  data   CardId;      //节点ID号
  30          extern  UCHAR  data   SioBurd;
  31          extern  UCHAR  bdata  DataFormat;  //读卡器数据输出格式
  32          extern  UCHAR  data   CardCs1;     //读卡器参数1
  33          extern  UCHAR  code   Set_xx[4];   //读卡器默认设置信息
  34          //------------------------------------------
  35          UINT  volatile event_word;
  36          //------------------------------------------
  37          void main()
  38          {
  39   1          EA =0;    
  40   1              F330_Init();     //F330系统初始化
  41   1              Setxx_Ini();     
  42   1              EA=1;
  43   1          //
  44   1              VDM0CN = 0x80;   //使能VDD监视器  
  45   1          PcdReset();      //复位RC522
  46   1              RSTSRC = 0x02;   //使能VDD监视器作为复位源
  47   1          //
  48   1          PcdAntennaOff(); //关闭天线
  49   1              BEEP  = 1;       //蜂鸣
  50   1              Delay1ms(200);       
  51   1          BEEP  = 0;       //关蜂鸣器
  52   1          PcdAntennaOn();  //开启天线 
  53   1          //
  54   1              EIE1 |= 0X80;    //ET3=1
  55   1      
C51 COMPILER V6.23a  MAIN                                                                  04/14/2008 15:21:34 PAGE 2   

  56   1              while(1)
  57   1      
  58   1                {  
  59   2              do_event();    //状态事件处理     
  60   2                }
  61   1              
  62   1      }
  63          
  64          //***********************************************
  65          //事件处理程序
  66          //------------------------------------------------
  67          void do_event (void)
  68          
  69             {
  70   1           UCHAR event_word_copy;
  71   1      
  72   1           event_word_copy = event_word;   //
  73   1      
  74   1                  if (event_word_copy&EVENT_CARD)  //200毫秒定时寻卡
  75   1                 {
  76   2                       EA = 0;
  77   2                   event_word &= ~EVENT_CARD;
  78   2                   EA = 1;
  79   2                   Card_request ();   //寻卡
  80   2                     }
  81   1      
  82   1         }
  83          //***********************************************
  84          //F330初始化
  85          //------------------------------------------------
  86          void F330_Init (void)
  87          {
  88   1          //时钟初始化
  89   1              OSCXCN  = 0x00;         //关闭外时钟
  90   1          OSCICL += 0;        //校正值=0,24.5MHZ
  91   1                                  //内部振荡使能,12MHZ
  92   1          OSCICN  = 0XC2;     //IOSCEN,IFRDY,/,/,/,/,IFCN1,IFCN2 
  93   1      
  94   1              //看门狗初始化      //CIDL,WDTE,WDCK, ,CPS2,CPS1,CPS0,ECF
  95   1          PCA0MD &=0xb1 ;     //禁止看门狗,CPS2-0=000,PCA时钟=SYSCLK/12        
  96   1                               
  97   1          PCA0CPL2 =0xff;         //超时间隔=256×PCA0CPL2+(256-PCA0L)
  98   1                              //SYSCLK=24.5M/2时约隔约64MS
  99   1          PCA0MD &=0xE0;              //使能看门狗,CIDL=1,CPU等待时PCA停止工作
 100   1      
 101   1              //IO口初始化
 102   1      
 103   1              P0MDIN  |= 0xff;        //P0.n全部数字输入
 104   1                                  // -,  NSS,RX,TX,   ,MOSI,MISO,SCK
 105   1              P0MDOUT |= 0x55;        // 0    1   0  1  0    1   0    1 
 106   1                              //
 107   1              P1MDIN   = 0xff;        //P1.1模拟输入,余全部数字输入
 108   1                              //--,--,  --, --, RST, --, BEEP, RW 
 109   1              P1MDOUT  = 0x0b;        // 0  0   0    0   1    0    1   1   
 110   1                                  //SPIO和串口使能
 111   1              XBR0    = 0X01;         //-,-,CP0AE,CP0E,SYSCKE,SMB0E,SPIOE,UART0E
 112   1                                  //弱上拉,交叉开关使能,CEX0,CEX1
 113   1              XBR1    = 0x40;         //WEAK,XBARE,T1E,T0E,ECIE,,PCA0ME1,0
 114   1      
 115   1          BP      = 0;        //关蜂鸣器
 116   1              RW485   = 0;        //读卡器接收模式
 117   1          
C51 COMPILER V6.23a  MAIN                                                                  04/14/2008 15:21:34 PAGE 3   

 118   1              
 119   1              //初始初始化中断源,优先级
 120   1      
 121   1          IT01CF  = 01;       //INT0,INT1
 122   1              IT0     = 1;
 123   1          EIE1    = 0x0;      //ET3, ,ECP0,EPCA0,EADC0,EWADC0, , ESMB   
 124   1          EIP1    = 0X0;    
 125   1              IP      = 0x10;     //-,PSPIO,PT2,PS0,PT1,PX1,PT0,PX0
 126   1                              //串口最高级
 127   1              //              
 128   1              Init_Com0();        //串口初始化,波特率=57600
 129   1              Timer0_Init();      //定时器0初始化
 130   1              Timer3_Init();          //定时器3初始化 用做与读卡器通讯的时钟控制      
 131   1      //      Adc0_Init();       
 132   1      }
 133          //***********************************************
 134          //RF522 寻卡程序
 135          //------------------------------------------------
 136          void Card_request (void)
 137          {    
 138   1           if(!BEEP)      //BEEP=0,1次有效读卡结束
 139   1          
 140   1           Read_Card ();
 141   1                               
 142   1       }
 143          //***********************************************
 144          //RF522 读卡程序
 145          //------------------------------------------------
 146          void Read_Card (void)
 147          {    
 148   1           unsigned char status;
 149   1               //寻天线区内未进入休眠状态
 150   1           status = PcdRequest(PICC_REQIDL, g_ucTempbuf);
 151   1      
 152   1           if (status != MI_OK)          return;
 153   1       
 154   1              //        BEEP = 1;   //蜂鸣
 155   1      
 156   1                status = PcdAnticoll(g_ucTempbuf);  //防冲突 
 157   1      
 158   1                 if (status != MI_OK)    return;   
 159   1         
 160   1                status = PcdSelect(g_ucTempbuf);   //选卡 
 161   1      
 162   1                 if (status != MI_OK)    return;
 163   1                                                   //验证密钥
 164   1                status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);
 165   1                       
 166   1                         if (status != MI_OK)    return;
 167   1      
 168   1                status = PcdRead(1, g_ucTempbuf);  //读块2数据
 169   1                        //块2数据={00,34,56,78,ff,CB,A9,87,00,34,56,78,01,FE,01,FE}
 170   1                        if (status != MI_OK)    return;
 171   1      
 172   1                        PcdHalt();               
 173   1                BEEP = 1;   //蜂鸣
 174   1                        Delay1ms(200);
 175   1      
 176   1                Card_Data_Send();
 177   1       
 178   1       }
 179          
C51 COMPILER V6.23a  MAIN                                                                  04/14/2008 15:21:34 PAGE 4   

 180          //===============================================
 181          //卡数据填串口缓冲区并启动发送
 182          //===============================================
 183          void Card_Data_Send(void)
 184              {
 185   1            UCHAR  i,j = 16;
 186   1                  
 187   1                ComTBuf[0] = 0xAA;     //包头
 188   1                ComTBuf[1] = 0x08;     //读卡器设备号
 189   1            ComTBuf[2] = 0x11;     //数据长度
 190   1                ComTBuf[3] = 0x00;     //读卡器返回状态:00=OK
 191   1            //16字节卡块数据送发送缓冲区
 192   1            for (i=0;i<j;i++)
 193   1      
 194   1                { ComTBuf[i+4] = g_ucTempbuf[i];}
 195   1      
 196   1                ComTBuf[0x14] = 0x55;  //包校验和
 197   1                ComTBuf[0x15] = 0XBB;  //包尾
 198   1                //
 199   1                RW485 = 1;
 200   1                ComTBufHead=1;
 201   1                Sio_Lth = 22;  
 202   1                SBUF0   = ComTBuf[0];  //启动串口发送  
 203   1              }
 204          //===============================================
 205          //读卡器设置参数初始化
 206          //===============================================
 207          void Setxx_Ini(void)
 208              {
 209   1            UCHAR  kjdh;
 210   1            //从FLASH读设置信息
 211   1                FLASH_Read (SetxxBuf, FLASH_TEMP, 4);
 212   1      
 213   1                kjdh = SetxxBuf[0];  
 214   1      
 215   1                if (kjdh != 0xff)
 216   1      
 217   1                  { //FLASH设置信息有效
 218   2                        CardId     = SetxxBuf[0]; 
 219   2                        SioBurd    = SetxxBuf[1];
 220   2                DataFormat = SetxxBuf[2];
 221   2                        CardCs1    = SetxxBuf[3];  
 222   2                      }
 223   1             else 
 224   1                  { //FLASH设置信息为空(ff)            
 225   2                        CardId      = DefaulSet[0]; 
 226   2                        SioBurd     = DefaulSet[1];
 227   2                DataFormat  = DefaulSet[2];
 228   2                CardCs1     = DefaulSet[3];
 229   2                //
 230   2                SetxxBuf[0] = DefaulSet[0]; 
 231   2                        SetxxBuf[1] = DefaulSet[1];
 232   2                SetxxBuf[2] = DefaulSet[2];
 233   2                SetxxBuf[3] = DefaulSet[3];
 234   2                        //默认设置写FLASH
 235   2                FLASH_Write (FLASH_TEMP, SetxxBuf, 4);
 236   2                                         
 237   2                      } 
 238   1                  
 239   1              }
 240          
 241          //*****************************************************
C51 COMPILER V6.23a  MAIN                                                                  04/14/2008 15:21:34 PAGE 5   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    377    ----
   CONSTANT SIZE    =     30    ----
   XDATA SIZE       =     20    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6    ----
   IDATA SIZE       =   ----    ----
   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 + -