📄 wiegand.lst
字号:
C51 COMPILER V8.16 WIEGAND 12/10/2009 11:17:10 PAGE 1
C51 COMPILER V8.16, COMPILATION OF MODULE WIEGAND
OBJECT MODULE PLACED IN wiegand.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wiegand.c LARGE BROWSE INTVECTOR(0X1000) DEBUG OBJECTEXTEND
line level source
1 #include "global.h"
2
3
4
5 /***************************************************************************************
6 **函数功能:延时ms
7 **入参: uint x
8 **返回值: 无
9 **作者: jerkoh
10 **日期: 2009-03-16
11 **说明: 无
12 ***************************************************************************************/
13 void delayms (unsigned int x)
14 {
15 1 unsigned int j;
16 1 while(x--)
17 1 {
18 2 for(j=0;j<1500;j++){;}
19 2 }
20 1 }
21 /***************************************************************************************
22 **函数功能:延时us
23 **入参: uint t
24 **返回值: 无
25 **作者: jerkoh
26 **日期: 2009-03-16
27 **说明: 无
28 ***************************************************************************************/
29 void delayus (unsigned int t)
30 {
31 1
32 1 while(t--)
33 1 {
34 2 _nop_();
35 2 }
36 1 }
37
38 /***************************************************************************************
39 **函数功能:wiegand发送
40 **入参: wie
41 **返回值: 无
42 **作者: jerkoh
43 **日期: 2009-03-16
44 **说明: 判断wiegand格式
45 ***************************************************************************************/
46
47 void wiegandout(unsigned char wie,unsigned char chanl1)
48 {
49 1 unsigned char k,m;
50 1 unsigned char xdata wiebak[6]; //备份wie
51 1 switch(wie)
52 1 {
53 2 case 32:
54 2 {
55 3
C51 COMPILER V8.16 WIEGAND 12/10/2009 11:17:10 PAGE 2
56 3 for(k=2;k<6;k++)
57 3 {
58 4 wiedataout(k,chanl1);
59 4 }
60 3 }
61 2 break;
62 2
63 2
64 2 case 40:
65 2 {
66 3 for(k=1;k<6;k++)
67 3 {
68 4 wiedataout(k,chanl1);
69 4 }
70 3 }
71 2 break;
72 2
73 2 case 26:
74 2 case 34:
75 2 {
76 3 if(wie==26)
77 3 {m=3;}
78 3 else
79 3 {m=2;}
80 3
81 3 memcpy(wiebak,wiebuf,6);
82 3
83 3
84 3 if(even_parity(wie)) //str
85 3
86 3 {
87 4 if(chanl1==CHANL_DIN)
88 4 {
89 5 D1IN=1;
90 5 delayus(90); //50us脉冲宽度
91 5 D1IN=0;
92 5 }
93 4 else
94 4 {
95 5 D1OUT=1;
96 5 delayus(90); //50us脉冲宽度
97 5 D1OUT=0;
98 5 }
99 4
100 4
101 4 }
102 3 else
103 3 {
104 4 if(chanl1==CHANL_DIN)
105 4 {
106 5 D0IN=1;
107 5 delayus(90);
108 5 D0IN=0;
109 5 }
110 4 else
111 4 {
112 5 D0OUT=1;
113 5 delayus(90);
114 5 D0OUT=0;
115 5 }
116 4 }
117 3 delayms(2);
C51 COMPILER V8.16 WIEGAND 12/10/2009 11:17:10 PAGE 3
118 3 memcpy(wiebuf,wiebak,6);
119 3
120 3 for(k=m;k<6;k++)
121 3 {
122 4 wiedataout(k,chanl1);
123 4 }
124 3
125 3 memcpy(wiebuf,wiebak,6);
126 3 if(odd_parity(wie)) //end
127 3
128 3 {
129 4 if(chanl1==CHANL_DIN)
130 4 {
131 5 D1IN=1;
132 5 delayus(90); //50us脉冲宽度
133 5 D1IN=0;
134 5 }
135 4 else
136 4 {
137 5 D1OUT=1;
138 5 delayus(90); //50us脉冲宽度
139 5 D1OUT=0;
140 5 }
141 4 }
142 3 else
143 3 {
144 4 if(chanl1==CHANL_DIN)
145 4 {
146 5 D0IN=1;
147 5 delayus(90);
148 5 D0IN=0;
149 5 }
150 4 else
151 4 {
152 5 D0OUT=1;
153 5 delayus(90);
154 5 D0OUT=0;
155 5 }
156 4 }
157 3 }
158 2 break;
159 2
160 2 default:
161 2 break;
162 2
163 2 }
164 1 MSG_LIVE; //LED+BELL 100ms
165 1 }
166 /***************************************************************************************
167 **函数功能:wiegand data out
168 **入参: wie
169 **返回值: 无
170 **作者: jerkoh
171 **日期: 2009-06-16
172 **说明: 无
173 ***************************************************************************************/
174 void wiedataout(unsigned char k,unsigned char chanl2)
175 {
176 1 unsigned char i;
177 1
178 1 for(i=0;i<8;i++)
179 1 {
C51 COMPILER V8.16 WIEGAND 12/10/2009 11:17:10 PAGE 4
180 2 if(wiebuf[k]&0x80)
181 2 {
182 3 if(chanl2==CHANL_DIN)
183 3 {
184 4 D1IN=1;
185 4 delayus(90); //50us脉冲宽度
186 4 D1IN=0;
187 4 }
188 3 else
189 3 {
190 4 D1OUT=1;
191 4 delayus(90); //50us脉冲宽度
192 4 D1OUT=0;
193 4 }
194 3 delayms(2); //2ms脉冲间隔
195 3 wiebuf[k]<<=1;
196 3 }
197 2 else
198 2 {
199 3 if(chanl2==CHANL_DIN)
200 3 {
201 4 D0IN=1;
202 4 delayus(90);
203 4 D0IN=0;
204 4 }
205 3 else
206 3 {
207 4 D0OUT=1;
208 4 delayus(90);
209 4 D0OUT=0;
210 4 }
211 3 delayms(2);
212 3 wiebuf[k]<<=1;
213 3 }
214 2 }
215 1 }
216 /***************************************************************************************
217 **函数功能:Even_Parity 偶检验 前12bits or 前16bits
218 **入参: wiebuf, wieformat
219 **返回值: bit
220 **作者: jerkoh
221 **日期: 2009-06-16
222 **说明: 无
223 ***************************************************************************************/
224 bit even_parity(unsigned char wieformat)
225 {
226 1 unsigned char i,j;
227 1 bit opt;
228 1
229 1 if(wieformat==26)
230 1 {
231 2 for(i=0,j=0;i<8;i++)
232 2 {
233 3 if(wiebuf[3]&0x80)
234 3 {
235 4 j++;
236 4 }
237 3 wiebuf[3]<<=1;
238 3 }
239 2 for(i=0;i<4;i++)
240 2 {
241 3 if(wiebuf[4]&0x80)
C51 COMPILER V8.16 WIEGAND 12/10/2009 11:17:10 PAGE 5
242 3 {
243 4 j++;
244 4 }
245 3 wiebuf[4]<<=1;
246 3 }
247 2 }
248 1 else //34
249 1 {
250 2 for(i=0,j=0;i<8;i++)
251 2 {
252 3 if(wiebuf[2]&0x80)
253 3 {
254 4 j++;
255 4 }
256 3 wiebuf[2]<<=1;
257 3 }
258 2 for(i=0;i<8;i++)
259 2 {
260 3 if(wiebuf[3]&0x80)
261 3 {
262 4 j++;
263 4 }
264 3 wiebuf[3]<<=1;
265 3 }
266 2
267 2
268 2 }
269 1
270 1
271 1
272 1 if((j&0x01)==0x01) opt=1;
273 1 else opt=0;
274 1 return(opt);
275 1
276 1
277 1 }
278
279
280 /***************************************************************************************
281 **函数功能:Odd_Parity 奇检验 后12bits or 后16bits
282 **入参: wiebuf, wieformat
283 **返回值: bit
284 **作者: jerkoh
285 **日期: 2009-06-16
286 **说明: 无
287 ***************************************************************************************/
288 bit odd_parity(unsigned char wieformat)
289 {
290 1 unsigned char i,j;
291 1 bit opt;
292 1
293 1 if(wieformat==26)
294 1 {
295 2 wiebuf[4]<<=4; //先左移4位
296 2
297 2 for(i=0,j=0;i<4;i++)
298 2 {
299 3 if(wiebuf[4]&0x80)
300 3 {
301 4 j++;
302 4 }
303 3 wiebuf[4]<<=1;
C51 COMPILER V8.16 WIEGAND 12/10/2009 11:17:10 PAGE 6
304 3 }
305 2 for(i=0;i<8;i++)
306 2 {
307 3 if(wiebuf[5]&0x80)
308 3 {
309 4 j++;
310 4 }
311 3 wiebuf[5]<<=1;
312 3 }
313 2 }
314 1 else //34
315 1 {
316 2 for(i=0,j=0;i<8;i++)
317 2 {
318 3 if(wiebuf[4]&0x80)
319 3 {
320 4 j++;
321 4 }
322 3 wiebuf[4]<<=1;
323 3 }
324 2 for(i=0;i<8;i++)
325 2 {
326 3 if(wiebuf[5]&0x80)
327 3 {
328 4 j++;
329 4 }
330 3 wiebuf[5]<<=1;
331 3 }
332 2
333 2
334 2 }
335 1
336 1
337 1
338 1 if((j&0x01)==0x01) opt=0;
339 1 else opt=1;
340 1 return(opt);
341 1
342 1
343 1
344 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 723 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 11
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -