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

📄 system.lst

📁 125K曼彻斯特编码的只读ID卡读头程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.23a  SYSTEM                                                                02/04/2009 09:04:10 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE SYSTEM
OBJECT MODULE PLACED IN D:\VW\INTEGR~1\HEAD\SYSTEM.OBJ
COMPILER INVOKED BY: C:\comp51\C51.EXE D:\VW\INTEGR~1\HEAD\SYSTEM.C DB SB OE

stmt level    source

   1          /*
   2          +---------------------------------------------------+
   3          | Project: SYSTEM with STC12CX052                   |
   4          | File:    SYSTEM.C                                 |
   5          | Data:    2008-12-08                               |
   6          | Version: V 1.0                                    |
   7          | Initial Editor: Li Jifeng                         |
   8          +---------------------------------------------------+
   9          | following environments are supported              |
  10          | Processor: STC12CX052                             |
  11          | Compiler: WAVE V                                  |
  12          | hardware: JF-2008                                 |
  13          +---------------------------------------------------+
  14          |    Copyright (C) JF Ltd, 2008                     |
  15          |       All Rights reserved                         |
  16          +---------------------------------------------------+
  17          | 功能简介: the system function                     |
  18          +---------------------------------------------------+
  19          */
  20          
  21          #include "system.h"
  22          
  23          //bit uart_rcv_finish;
  24          //static bit uart_start_flag;
  25          //bit tx_flag;            //串口收发状态标志  tx_flag=1 发状态  tx_flag=0 收状态
  26          
  27          //static UINT8 data DataBuf[5] = {"27"};                          //信息区
  28          //static UINT8 data send_buf[24] = {"~EC2A3300E000000000FC34"}; //发送数据区
  29          //static UINT8 data rec_buf[18] = {"EC2A0033E028000002"};         //接收数据区
  30          //static UINT8 data com_n;
  31          //static UINT8 data uart_rcv_flag = 0;
  32          //static UINT8 data uart_rcv_len;
  33          //static UINT8 data uart_rcv_n;
  34          //static UINT8 data sum_buf[5] = {"FC40"};
  35          
  36          bit last_level_flag = 0;  //上次读卡时电平
  37          bit wait_flag = 0;        //等待发送标志
  38          bit led_flag = 0;         //led显示标志
  39          bit new_flag = 0;         //读到新卡标志
  40          UINT8 data wait_time = 40;     //等待发送时间 2 秒
  41          UINT8 data led_time = 15;      //led 闪烁时间 1 秒
  42          UINT8 data card_code[12];
  43          UINT8 data old_card[12];
  44          
  45          //static UINT16 Txsum1;
  46          //static UINT16 Txsum = 0x350;
  47          //static UINT16 Rxsum = 0x390;
  48          //static UINT16 Rxsum1 = 0x390;
  49          //static UINT16 Rxsum2;
  50          
  51          /***********************************************************************************
  52          函数名称:uart_send_byte()
  53          功能:串口发送函数
  54          函数参数:udata:发送的数据
  55          ***********************************************************************************/
C51 COMPILER V6.23a  SYSTEM                                                                02/04/2009 09:04:10 PAGE 2   

  56          void uart_send_byte(UINT8 udata)
  57          {
  58   1          TI = 0;
  59   1          SBUF = udata;
  60   1          while (TI == 0);
  61   1          TI = 0;
  62   1      }
  63          /***********************************************************************************
  64          函数名称:uart_send()
  65          功能:串口发送函数
  66          函数参数:*send_buf:发送的数据
  67          **********************************************************************************
  68          void uart_send(UINT8 *send_buf)
  69          {
  70              while (*send_buf != 0x00)
  71              {
  72                  uart_send_byte(*send_buf);
  73                  send_buf++;
  74              }
  75          }*/
  76          /***********************************************************************************
  77          函数名称:uart_send1()
  78          功能:串口发送函数
  79          函数参数:*send_buf:发送的数据
  80                   n:数据个数
  81          ***********************************************************************************/
  82          void uart_send1(UINT8 *send_buf,UINT8 n)
  83          {
  84   1          while (n--)
  85   1          {
  86   2              uart_send_byte(*send_buf);
  87   2              send_buf++;
  88   2          }
  89   1      }
  90          /***********************************************************************************
  91          函数名称:uart_isr()
  92          功能描述:串口中断服务子程序
  93          函数参数:无
  94          EC2A0033E02800000227FBBF
  95          **********************************************************************************
  96          static void uart_isr(void)  interrupt SIO_VECTOR using 3
  97          {
  98              UINT8 tmp;
  99              if (RI)
 100              {
 101                  RI = 0;
 102                  tmp = SBUF;
 103                  if (tmp == '~')                            //帧头
 104                  {
 105                      uart_start_flag = 1;
 106                      uart_rcv_flag = 0;
 107                      com_n = 0;
 108                  }
 109                  else if (uart_start_flag)
 110                  {
 111                      switch (uart_rcv_flag)
 112                      {
 113                          case 0:if (tmp == rec_buf[com_n])
 114                                 {
 115                                    com_n++;
 116                                 }
 117                                 else
C51 COMPILER V6.23a  SYSTEM                                                                02/04/2009 09:04:10 PAGE 3   

 118                                 {
 119                                   uart_start_flag = 0;
 120                                 }
 121                                 if (com_n == 17)
 122                                 {
 123                                     uart_rcv_flag = 1;
 124                                 }
 125                                 break;
 126                         default:uart_start_flag = 0;
 127                                 break;
 128                      }
 129                  }
 130          
 131              }
 132          }*/
 133          /***********************************************************************************
 134          函数名称:PCA_isr()
 135          功能描述:PCA中断服务子程序
 136          函数参数:无
 137          ***********************************************************************************/
 138          static UINT8 PCAM0_timer_tick,PCAM0_timer_N;
 139          bit PCAM0_timer_out;
 140          static void PCA_isr(void) interrupt PCA_VECTOR using 3
 141          {
 142   1          if (CCF0)
 143   1          {
 144   2              CCF0 = 0;
 145   2              CH = CH_VALUE;              //定时记数初值
 146   2              CL = CL_VALUE;              //定时记数初值
 147   2              /*if(wait_flag)               //等待发送维根数据标志
 148   2              {
 149   2                 if(--wait_time == 0)
 150   2                 {
 151   2                    wait_flag = 0;
 152   2                    Ready = 1;
 153   2                 }
 154   2              }*/
 155   2              if(led_flag)               //led 显示
 156   2              {
 157   3                 if(--led_time == 0)
 158   3                 {
 159   4                    CR = 0;
 160   4                    led_flag = 0;
 161   4                    LED = 1;
 162   4                 }
 163   3              }
 164   2          }
 165   1      }
 166          /***********************************************************************************
 167          函数名称:read_head()
 168          函数参数:无
 169          功    能 : 读U2270程序,
 170                     U2270B周期为512us
 171                     1. 启动U2270后等待刷卡脉冲,如果10毫秒内没有脉冲信号退出
 172                     在等待时间超过2秒没有得到主CPU应答情况取消发送
 173          
 174                     ( 1 ) 脉冲宽度>300的脉冲下跳表示数据1, 脉冲上跳表示数据0
 175                           脉冲宽度<250的脉冲跳变认为是空跳变。 9个连续1是头码
 176          
 177                     ( 2 ) 变量n用于记录头码个数. head_flag=0; 等待并解析头码
 178                     ( 3 ) 变量 j 用于记录数据为宽度,5个位1个字节,4个有效位,
 179                           1个校验位(低5位)
C51 COMPILER V6.23a  SYSTEM                                                                02/04/2009 09:04:10 PAGE 4   

 180                     ( 4 ) 变量 i 用于记录卡号字节数,
 181          
 182          EM卡数据格式如下:
 183          ---------------------------------------------------------------------
 184          标识头     H    H    H    H    H    H    H    H    H
 185          ---------------------------------------------------------------------
 186          用户标识        U7   U6   U5   U4    P    00
 187                                        U3   U2   U1   U0    P    14=
 188          ---------------------------------------------------------------------
 189          卡片号码        D31  D30  D29  D28   P    00
 190                                        D27  D26  D25  D24   P    00
 191                                        D23  D22  D21  D20   P    0F
 192                                        D19  D18  D17  D16   P    1B
 193                                        D15  D14  D13  D12   P    1D
 194                                        D11  D10  D9   D8    P    05
 195                                        D7   D6   D5   D4    P    0A
 196                                        D3   D2   D1   D0    P    03
 197          X = 列校验;  P = 行校验       X    X    X    X     0    10
 198          =====================================================================
 199          00 14 00 00 0F 1B 1D 05 0A 03 10 00
 200          00 14 00 00 0F 1B 1E 1D 0A 17 1E 00
 201          ***********************************************************************************/
 202          void read_head(void)
 203          {
 204   1          bit head_flag;
 205   1          UINT8 data i,j,n,m,s,k;
 206   1          UINT8 data *sip;
 207   1          union sa
 208   1          {
 209   1             UINT16 kk;
 210   1             UINT8 sk[2];
 211   1          }sz;
 212   1          for(m=0;m<12;m++)
 213   1          {
 214   2             card_code[m] = 0;
 215   2             old_card[m] = 0;
 216   2          }
 217   1          s = 0;
 218   1          while(s != 2)
 219   1          {
 220   2             //WDT_CONTR = 0x3c;
 221   2             CFE = 0;                      //启动u2270
 222   2             new_flag = 0;                 //读到新卡标志清零
 223   2             head_flag = 0;
 224   2             n = 0;
 225   2             i = 0;
 226   2             j = 0;
 227   2             last_level_flag = 0;          //上次读卡时电平标志清零
 228   2             sip = &card_code;
 229   2             TH0 = 0;
 230   2             TL0 = 0;
 231   2             TR0 = 1;
 232   2             while(!DIN)
 233   2             {
 234   3                if(TH0 > 6)
 235   3                {
 236   4                   TR0 = 0;

⌨️ 快捷键说明

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