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