📄 wiegand.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 + -