📄 wigen.lst
字号:
C51 COMPILER V8.05a WIGEN 10/20/2008 11:07:23 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE WIGEN
OBJECT MODULE PLACED IN WIGEN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE WIGEN.C ROM(COMPACT) DEBUG OBJECTEXTEND
line level source
1 #include "STC12C5410AD.h"
2 #include "app.h"
3 #include <string.h>
4 #include <stdio.h>
5 #include <INTRINS.H>
6
7
8
9 sbit DATA0 = P1^0; // green
10 sbit DATA1 = P3^7; // white
11 void send_wiegand26(unsigned char *str)
12 {
13 1 unsigned char i;
14 1 static unsigned char one_num; //计算 1 的个数
15 1 unsigned char check_temp; //韦根包奇偶效验中间暂存
16 1 bit data even; //韦根包前 12 位偶效验
17 1 bit data odd; //韦根包后 12 位齐效验
18 1 static unsigned char wiegand[3]; //韦根包数据 24 位
19 1 //================================数组到韦根包的转化
20 1 wiegand[0] = wiegand[0]|((*str)<<4);//原理是把每个字节的低 4 位取出,来计算这个字节的值
21 1 wiegand[0] = wiegand[0]|(*(str+1)&0x0f);
22 1 //--------------------------------计算前 8 位 1 的个数,为偶效验用
23 1 check_temp = wiegand[0];
24 1 for(i = 0;i<8;i++)
25 1 {
26 2 if(check_temp&0x01) //(check_temp&0x01)
27 2 {
28 3 one_num++;
29 3 }
30 2 check_temp >>= 1;
31 2 }
32 1 wiegand[1] = wiegand[1]|(*(str+2)<<4);
33 1 //--------------------------------计算接下来的 4 位 1 的个数,为偶效验用
34 1 check_temp = wiegand[1];
35 1
36 1 for(i = 0;i<4;i++)
37 1 {
38 2 if(check_temp&0x80)
39 2 {
40 3 one_num++;
41 3 }
42 2 check_temp<<=1;
43 2 }
44 1 //--------------------------------判断 1 的个数
45 1 one_num%2 == 0 ? (even = 0):( even = 1);
46 1 one_num = 0;
47 1 wiegand[1] = wiegand[1]|(*(str+3)&0x0f);
48 1 //--------------------------------计算接下来的 4 位 1 的个数,为奇效验用
49 1 check_temp = wiegand[1];
50 1 for(i = 0;i<4;i++)
51 1 {
52 2 if(check_temp&0x01)
53 2 {
54 3 one_num++;
55 3 }
C51 COMPILER V8.05a WIGEN 10/20/2008 11:07:23 PAGE 2
56 2 check_temp>>=1;
57 2 }
58 1 wiegand[2] = wiegand[2]|(*(str+4)<<4);
59 1 wiegand[2] = wiegand[2]|(*(str+5)&0x0f);
60 1 //--------------------------------计算接下来的 8 位 1 的个数,为奇效验用
61 1 check_temp = wiegand[2];
62 1 for(i = 0;i<8;i++)
63 1 {
64 2 if(check_temp&0x01)
65 2 {
66 3 one_num++;
67 3 }
68 2 check_temp >>= 1;
69 2 }
70 1 //--------------------------------判断 1 的个数
71 1 one_num%2 == 0 ? (odd = 1):( odd = 0);
72 1 one_num = 0;
73 1
74 1 }
75
76
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 161 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
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 + -