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

📄 main.lst

📁 20086238534741.rar
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V6.23a  MAIN                                                                  08/14/2006 14:40:24 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 BROWSE DEBUG OBJECTEXTEND CODE

stmt level    source

   1          /****************************************************************************
   2          * File :  main.c                                                            *
   3          * COPYRIGHT BY HUOYAN LTD.COMPANY                                           *
   4          * Version:      V5.2                                                                    *
   5          * Created:      18.11.2002                                                  *
   6          * Last Change:  8.Jan.2005                                                  *
   7          * Author:       NIL                                                         *
   8          * Compiler:     KEIL C51 V7.10                                              *
   9          * Description:  AT89S52-Firmware for MFRC500 Demo Serial Reader             *
  10          *                                                                           *
  11          ****************************************************************************/
  12          #define __SRC
  13          #include "main.h"
  14          #undef  __SRC
  15          
  16          #include <string.h>
  17          #include <stdio.h>
  18          #include <absacc.h>
  19          #include <intrins.h>
  20          #include "AT89S52.h"
  21          #include "Mfreg500.h"
  22          #include "M500a.h"
  23          
  24          
  25          #define uchar   unsigned char
  26          #define uint unsigned int
  27          //#define DataPort P0                           // 数据端口
  28          
  29          
  30          //pin define  mcu控制管脚定义
  31               
  32          sbit RC500RST   =   P1^0;               //由高变低时复位RC500
  33          sbit RC500CS=P1^1;
  34          sbit CARD_LED=P1^2;
  35          sbit SPEAKER    =   P1^3;                 
  36          
  37          bit bcard;
  38          
  39          ///////////////////////////////////////////////////////////////////////
  40          // 主函数
  41          ///////////////////////////////////////////////////////////////////////
  42          void main(void)
  43          {       //设置变量
  44   1          uchar baud;
  45   1        
  46   1      
  47   1          InitSystem();       //初始化系统      
  48   1              // bcard=0;
  49   1          
  50   1              delay_10ms(5);                                  
  51   1          while (1)
  52   1          {   
  53   2              
  54   2              // KeyPress();  处理按键
  55   2                      delay_10ms(5);   
C51 COMPILER V6.23a  MAIN                                                                  08/14/2006 14:40:24 PAGE 2   

  56   2                      //检查串口命令标志      
  57   2                  if (bCmd)   
  58   2                  {   
  59   3                           
  60   3                          bCmd = FALSE;     //清零命令标志以便接收下一个命令
  61   3                              if(RevBuffer[0]==0x10)      //测试蜂鸣器
  62   3                          {
  63   4                              RevBuffer[2]=RevBuffer[1];    //蜂鸣时间存到RevBuffer[2]
  64   4                              cmd_ok();               //发送测试结果01 00给上位机
  65   4                              TI=1;                             //准备发给上位机数据
  66   4                              SPEAKER=1;              //开蜂鸣器和指示灯
  67   4                              CARD_LED=ON;
  68   4                                      delay_10ms(RevBuffer[2]);    //延时
  69   4                              SPEAKER=0;
  70   4                      CARD_LED=OFF;              
  71   4                                  
  72   4                          }
  73   3                      else if(RevBuffer[0]==0x11)   //串口参数设置,设置通讯波特率
  74   3                      {
  75   4                              switch(RevBuffer[1])     
  76   4                              {
  77   5                                      case 0:
  78   5                                              baud=BAUD_9600;
  79   5                                              break;
  80   5                                      case 1:
  81   5                                              baud=BAUD_14400;
  82   5                                              break;
  83   5                                      case 2:
  84   5                                              baud=BAUD_19200;
  85   5                                              break;
  86   5                                      case 3:
  87   5                                              baud=BAUD_28800;
  88   5                                              break;
  89   5                                      case 4:
  90   5                                              baud=BAUD_38400;
  91   5                                              break;
  92   5                                      case 5:
  93   5                                              baud=BAUD_57600;
  94   5                                              break;
  95   5                                      case 6:
  96   5                                              baud=BAUD_115200;
  97   5                                              break;
  98   5                                      default:
  99   5                                              baud=BAUD_19200;
 100   5                                              break;
 101   5                              }                               
 102   4                              cmd_ok();               //发送测试结果01 00给上位机
 103   4                              TI=1;                    
 104   4                              delay_10ms(5);                  //延时设置波特率 
 105   4                              TR1   = 0;
 106   4                              TH1   = baud;
 107   4                              TL1   = TH1;
 108   4                              delay_10ms(2);
 109   4                              TR1   = TRUE;
 110   4                      }
 111   3                              
 112   3                      else
 113   3                      {
 114   4                              uart_process();        // 进入串口处理程序      
 115   4                              TI=1;                 //处理完准备发送结果给上位机 
 116   4                      }
 117   3              
C51 COMPILER V6.23a  MAIN                                                                  08/14/2006 14:40:24 PAGE 3   

 118   3                                                                                                      
 119   3                                      
 120   3                               }
 121   2                      
 122   2               }
 123   1      }
 124          
 125          ///////////////////////////////////////////////////////////////////////
 126          // 系统初始化
 127          ///////////////////////////////////////////////////////////////////////
 128          void InitSystem(void)
 129          { 
 130   1          RC500CS=0;                  //选中RC500
 131   1              RC500RST=0;                    //复位
 132   1      
 133   1              ET2 = FALSE;                  // T/C2关中断
 134   1              T2CON = 0x04;                 //TR2=1,设为TIMER2,auto reload 
 135   1          PCON = 0x80;              
 136   1          SCON = 0x70;              // SMOD = 1;  
 137   1          TMOD = 0x21;              //TMOD = 0x22;
 138   1      
 139   1              TH1   = BAUD_19200;       //默认波特率
 140   1              TL1   = TH1;
 141   1              TR1   = TRUE;             // 以T1作为波特率发生器
 142   1          
 143   1              ET1=FALSE;
 144   1              IT0 =TRUE;                      // Config ext0 as edge trigger for RC500
 145   1          EX0 =TRUE;                  // Enable ext0 interrupt for RC500
 146   1          EA = TRUE;                  // Enable all interrupts
 147   1              TR2=FALSE;                   //Close T2
 148   1              IP=0x10;                        // 设串口中断高优先级
 149   1              ES = TRUE;               //打开串口
 150   1      
 151   1              bCmd=FALSE;         //初始化为0,没有收到命令
 152   1                                              
 153   1              beep(1);          //开机喇叭和指示灯测试
 154   1          splash(1);
 155   1              MfConfig();                     //配置RC500    
 156   1         
 157   1        
 158   1      }
 159          
 160          ///////////////////////////////////////////////////////////////////////
 161          // 串口接收和发送中断
 162          //数据包格式:数据包长度L(1byte)+命令字C(1byte)+数据包D(L-1 bytes)
 163          //其中数据包长度是从命令字开始算起的。
 164          ///////////////////////////////////////////////////////////////////////
 165          void Uart_Int(void) interrupt 4 using 1
 166          {
 167   1          uchar len, i;
 168   1              uint j=0;
 169   1       
 170   1              if(RI)        //收到数据
 171   1              {       
 172   2                      len=SBUF;  //第一个字节是数据包的长度
 173   2                      RI=0;      //清零RI以便接收下一个
 174   2                      for(i=0;i<len;i++)
 175   2                      {
 176   3                              while(!RI)
 177   3                              {
 178   4                                      j++;
 179   4                                      if(j>1000)
C51 COMPILER V6.23a  MAIN                                                                  08/14/2006 14:40:24 PAGE 4   

 180   4                                      {
 181   5                                          break;
 182   5                                      }
 183   4                              }
 184   3                              if(j<1000)
 185   3                              {
 186   4                                      RevBuffer[i]=SBUF;    
 187   4                                      RI=0;
 188   4                                      j=0;
 189   4                              }
 190   3                              else
 191   3                              {
 192   4                                  break;
 193   4                              }
 194   3                      }
 195   2                      if(i==len)
 196   2                      {
 197   3                              REN=0;            // 清零接收位
 198   3                              bCmd=TRUE;       //接收完毕,收到命令有效,置位1
 199   3                      }
 200   2              }
 201   1              else if(!RI && TI)   //发送-RI=0,TI=1
 202   1              {
 203   2                      TI=0;
 204   2                      len=RevBuffer[0];    //发送的第一个字节是包的长度
 205   2                      for(i=0;i<len+1;i++)
 206   2                      {
 207   3                              SBUF=RevBuffer[i];
 208   3                              while(!TI);
 209   3                              TI=0;                   
 210   3                      }
 211   2                      REN=1;
 212   2              }
 213   1      }
 214          ///////////////////////////////////////////////////////////////////////
 215          // IC卡命令处理函数
 216          ///////////////////////////////////////////////////////////////////////
 217          void uart_process(void)
 218          {
 219   1              uchar cmd;
 220   1              uchar status;
 221   1              
 222   1              cmd = RevBuffer[0];
 223   1              switch(cmd)
 224   1              {               
 225   2                                      
 226   2                      case 0x20:     // Request ,寻卡
 227   2                              status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);
 228   2                              if(status!=0)
 229   2                              {
 230   3                                      status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);
 231   3                                      if(status!=0)                           
 232   3                                      {
 233   4                                              RevBuffer[0]=1; 
 234   4                                              RevBuffer[1]=status;
 235   4                                              break;
 236   4                                      }
 237   3                              }
 238   2                              if(RevBuffer[2]==2)
 239   2                                      cardtype=mifare1S70;       // Mifare1 S70 卡
 240   2                              else if(RevBuffer[2]==4)         
 241   2                                      cardtype=mifare1S50;       // Mifare1 S50 卡
C51 COMPILER V6.23a  MAIN                                                                  08/14/2006 14:40:24 PAGE 5   

 242   2                              else if(RevBuffer[2]==16)
 243   2                                      cardtype=mifarelight;     // Mifare Light 卡
 244   2                              else
 245   2                                      cardtype=unknowncard;
 246   2                              RevBuffer[0]=3;                // 返回3个字节:状态(1字节)+卡类型(2字节)
 247   2                              RevBuffer[1]=status;
 248   2                              break;
 249   2                              
 250   2                      case 0x21:                         // 防冲突 读卡的系列号 CardSnr
 251   2                              status = M500PiccCascAnticoll(0,&RevBuffer[2]);
 252   2                              if(status!=0)           //失败
 253   2                              {
 254   3                                      RevBuffer[0]=1; 
 255   3                                      RevBuffer[1]=status;
 256   3                                      break;
 257   3                              }
 258   2                              memcpy(CardSnr,&RevBuffer[2],4);   //读出4字节序列号
 259   2                              RevBuffer[0]=5;          // 返回5个字节:状态(1字节)+序列号(4字节)                
 260   2                              RevBuffer[1]=status;

⌨️ 快捷键说明

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