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

📄 wiegand.lst

📁 RFID模块 RF24E1读卡程序,用Keil C编译成功!
💻 LST
字号:
C51 COMPILER V7.02a   WIEGAND                                                              01/19/2006 15:39:32 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE WIEGAND
OBJECT MODULE PLACED IN Wiegand.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Wiegand.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1           /*==================================================================================
   2            Copyright (C), 2005, RCG Tech. Co., Ltd.
   3            File name:   Wiegand.C
   4            Author: Zhangui Duan   Version: v1.2   Date: 2005-6-10
   5          
   6            Description:
   7               此程序文件主要是完成Wiegand26数据格式的产生以及发送。
   8                          1,偶校验位的产生
   9                          2,奇校验位的产生
  10                          3,Wiegand26输出 
  11            Other Description:
  12                           由 Keil C51 V7.05 编译通过
  13          
  14            Function List:  
  15              1.  偶校验位的产生
  16                          bit Even_Parity(unsigned char *a);
  17                  2,     奇校验位的产生
  18                          bit Odd_Parity(unsigned char *a);
  19                  3,     Wiegand26输出 
  20                          void Wiegand_Out(unsigned char fc,unsigned int cc);;
  21            History:          
  22              1. Date:
  23                 Author:
  24                 Modification:
  25          
  26          =====================================================================================*/
  27          
  28          
  29          #include  "wiegand.h"
  30          #include  "delay.h"
  31          /****************************************************************************************
  32            Function:        Even_Parity
  33            Description:     对Wiegand26中的第1-12位进行偶校验
  34                                             得出Wiegand26的第0位
  35            Calls:           
  36            Called By:      
  37                                   void Wiegand_Out(void);
  38            Input:     a 
  39                                   Wiegand26的第1-12位(12bit)数据   
  40            Output:    
  41            Return:    Bit_EP
  42                                   0 a的12字节中1的个数位偶数
  43                                   1 a的12字节中1的个数位奇数
  44            Others:    
  45          ****************************************************************************************/
  46           bit Even_Parity(unsigned char *a)
  47           {
  48   1         unsigned char i,j;
  49   1         bit Bit_EP;
  50   1         for(i=0,j=0;i<12;i++)
  51   1         {
  52   2               if(a[i]==0x01)
  53   2               {
  54   3                 j++;
  55   3                }
C51 COMPILER V7.02a   WIEGAND                                                              01/19/2006 15:39:32 PAGE 2   

  56   2         }
  57   1         if((j&0x01)==0x01)Bit_EP=1;
  58   1         else Bit_EP=0;
  59   1         return(Bit_EP);
  60   1       }
  61          
  62          /****************************************************************************************
  63            Function:        Odd_Parity
  64            Description:     对Wiegand26中的第13-24位进行偶校验
  65                                             得出Wiegand26的第25位
  66            Calls:           
  67            Called By:      
  68                                   void Wiegand_Out(unsigned char fc,unsigned int cc);
  69            Input:     a 
  70                                   Wiegand26的第13-24位(12bit)数据   
  71            Output:    
  72            Return:    Bit_OP
  73                                   0 a的12字节中1的个数为奇数
  74                                   1 a的12字节中1的个数为偶数
  75            Others:    
  76          ****************************************************************************************/
  77           bit Odd_Parity(unsigned char *a)
  78           {
  79   1         bit Bit_OP;
  80   1         unsigned char i,j;
  81   1         for(i=0,j=0;i<12;i++)
  82   1         {
  83   2               if(a[i]==0x01)
  84   2               {
  85   3                 j++;
  86   3                }
  87   2         }
  88   1         if((j&0x01)==0x01)Bit_OP=0;
  89   1         else Bit_OP=1;
  90   1         return(Bit_OP);
  91   1       }
  92          
  93          /****************************************************************************************
  94            Function:        Wiegand_Out
  95            Description:     按照Wiegand26格式输出数据
  96                                                  
  97            Calls:           
  98                                                  bit Odd_Parity(unsigned char *a)
  99                                                  bit Even_Parity(unsigned char *a)
 100                                                  Delay100us()
 101            Called By:      
 102                                                  void main(void);
 103            Input:                fc:机器码
 104                                                  cc:卡号 
 105            Output:                       
 106                                                  如果此位是0,则在DATA0上输出100US的低电平
 107                                                  如果此位是1,则在DATA1上输出100US的低电平
 108                                                  两个数据位输出间隔是1MS   
 109            Return:    
 110            Others:    
 111          ****************************************************************************************/
 112           void Wiegand_Out(unsigned char fc,unsigned int cc)
 113           {
 114   1              unsigned char i;
 115   1              unsigned char cardno[26];
 116   1              //得到HID号的低8位
 117   1              for(i=1;i<9;i++)
C51 COMPILER V7.02a   WIEGAND                                                              01/19/2006 15:39:32 PAGE 3   

 118   1              {
 119   2               cardno[i]=(fc&0x80)>>7;
 120   2               fc=fc<<1;
 121   2               }
 122   1              //得到16位机器号
 123   1              for(i=9;i<25;i++)
 124   1              {
 125   2               if((cc&0x8000)==0x8000) cardno[i]=0x01;
 126   2               else cardno[i]=0x00;
 127   2               cc=cc<<1;
 128   2               }
 129   1              //偶校验位
 130   1              if((Even_Parity(&cardno[1]))==1)cardno[0]=0x01;
 131   1              else cardno[0]=0x00;
 132   1              //奇校验位
 133   1              if((Odd_Parity(&cardno[13]))==1)cardno[25]=0x01;
 134   1              else cardno[25]=0x00;
 135   1              for( i=0;i<26;i++)
 136   1              {
 137   2                 if(cardno[i]==0x01)
 138   2                 {
 139   3                      Data1=1;
 140   3      
 141   3                      //脉冲宽度100us
 142   3                      Delay100us(1);
 143   3                      Data1=0;
 144   3                 }
 145   2                 else
 146   2                 {
 147   3                 //脉冲宽度100us
 148   3                      Data0=1;
 149   3                      Delay100us(1);
 150   3                      Data0=0;
 151   3                 }
 152   2                //脉冲间隔1ms
 153   2                      Delay100us(10);
 154   2               }
 155   1        }
 156          
 157           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    241    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      33
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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