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

📄 wiegand.lst

📁 mifare 读卡器weigant输出有kei uvision打开!
💻 LST
字号:
C51 COMPILER V7.50   WIEGAND                                                               06/15/2005 09:19:44 PAGE 1   


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

line level    source

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

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

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    248    ----
   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 + -