韦根数据格式.docx
《韦根数据格式.docx》由会员分享,可在线阅读,更多相关《韦根数据格式.docx(23页珍藏版)》请在冰豆网上搜索。
韦根数据格式
韦根数据输出格式
一、韦根数据输出的基本概念:
韦根数据输出由二根线组成,分别是
DATA0
和
DATA1
;二根线分别将‘
0’或
‘1’输出。
输出‘0’时:
DATA0线上出现负脉冲;
输出‘1’时:
DATA1线上出现负脉冲;
具体时序如下:
例如:
数据‘1011’时序如下:
DATA0
DATA1
TP
TW
负脉冲宽度TP=100us;周期TW=1000us
二、几种韦根输出格式:
韦根26位输出格式:
ECCCCCCCCCCCCCCCCCCCCCCCCO
12BIT偶校验12BIT奇校验
E/O:
偶/奇校验位。
C:
卡片ID号。
以上数据从左至右顺序发送。
韦根34位输出格式:
ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCO
16BIT偶校验16BIT奇校验
E/O:
偶/奇校验位。
C:
卡片ID号。
以上数据从左至右顺序发送。
韦根36位输出格式:
ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCIIO
17BIT偶校验17BIT奇校验
E/O:
偶/奇校验位。
C:
卡片ID号。
I:
2位卡片发行码。
以上数据从左至右顺序发送。
韦根44位输出格式:
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCIIIIIIIIXXXX
C:
卡片ID号。
I:
8位卡片发行码。
XXXX:
LRC校验。
以上数据从左至右顺序发送。
韦根26韦根34发送程序
WG26协议
Wiegand26格式:
各数据位的含义:
第1位:
为输出数据2—13位的偶校验位
第2—9位:
ID卡的HID码的低8位
第10-25位:
ID卡的PID号码
第26位:
为输出数据14-25位的奇校验位数据输出顺序:
HID码和PID码均为高位在前,低位在后
例:
一张ID卡内容为:
HID:
32769PID:
34953(卡面印:
2147584137001,34953)
相应的二进制为:
HID:
1000000000000001(只输出低8位)
PID:
1000100010001001
输出如下:
12
910
25
26
0
0000
0001
1000
1000
1000
1001
1
|HID_L
|
PID
|
输出端D0、D1时序:
图示:
(1)D0、D1在没有数据输出时均保持高电平;
(2)输出数据位时间为420uS(TL),如输出为0,D0拉低420uS(TL)后为高电平,若输出为1,则D1拉低420uS(TL)
后为高电平;
输出数据位之间的间隔时间为2mS(TL),如输出00:
D0拉低420uS(TL)后为高电2mS(TL),再拉低为低电平
420uS(TL),然后释放为高电平;
WG34协议
Wiegand34格式:
各数据位的含义:
第1位:
为输出第2—17位的偶校验位
第2-17位:
ID卡的HID码
第18-33位:
ID卡的PID号码
第34位:
为输出第18-33位的奇校验位数据输出顺序:
HID码和PID码均为高位在前,低位在后
例:
一张ID卡内容为:
HID:
32769PID:
34953(卡面印:
2147584137001,34953)
相应的二进制为:
000110000100001111110010
HID:
1000000000000001
PID:
1000100010001001
输出如下:
12
1718
33
34
0
1000
0000
0000
0001
1000
1000
1000
1001
0
|
HID_L
|
PID
|
输出端D0
、D1
时序:
图示:
(1)D0、D1在没有数据输出时均保持高电平;
(2)输出数据位时间为420uS(TL),如输出为0,D0拉低420uS(TL)后为高电平,若输出为1,则D1拉低420uS(TL)
后为高电平;
(3)输出数据位之间的间隔时间为2mS(TL),如输出00:
D0拉低420uS(TL)后为高电2mS(TL),再拉低为低电
平420uS(TL),然后释放为高电平;发送程序如下:
Str[]中存的是4字节卡号。
voidSend_Weigand34(unsignedchar*str)
{
unsignedcharone_num=0;
unsignedchareven=0;
unsignedcharodd=0;
unsignedcharcheck_temp,i;
check_temp=*str;
for(i=0;i<8;i++)
{
if(check_temp&0
×01)
one_num++;
check_temp>>=1;
}
check_temp=*(str+1);
for(i=0;i<8;i++)
{
if(check_temp&0
×01)
one_num++;
check_temp>>=1;
}
if(one_num%2)
even=1;
else
even=0;
one_num=0;
check_temp=*(str+2);
for(i=0;i<8;i++)
{
if(check_temp&0
×01)
one_num++;
check_temp>>=1;
}
check_temp=*(str+3);
for(i=0;i<8;i++)
{
if(check_temp&0
×01)
one_num++;
check_temp>>=1;
}
if(one_num%2)
odd=0;
else
odd=1;
one_num=0;
WG_DATA0=1;
WG_DATA1=1;
Delay_1ms
(2);
if(even)
{
WG_DATA1=0;/*偶校验位为1*/
Delay_50us(8);
WG_DATA1=1;
}
else
{
WG_DATA0=0;/*偶校验位为0*/
Delay_50us(8);
WG_DATA0=1;
}
Delay_1ms
(2);/*延时2ms*/
for(i=0;i<32;i++)
{
WG_DATA0=1;
WG_DATA1=1;
if(str[0]&080)×
{
WG_DATA1=0;
Delay_50us(8);
WG_DATA1=1;
}
else
{
WG_DATA0=0;
Delay_50us(8);
WG_DATA0=1;
}
(*(long*)&str[0])<<=1;
Delay_1ms
(2);/*延时2ms*/
}
WG_DATA0=1;
WG_DATA1=1;
if(odd)
{
WG_DATA1=0;
Delay_50us(8);
WG_DATA1=1;
}
else
{
WG_DATA0=0;
Delay_50us(8);
WG_DATA0=1;
}
Delay_1ms
(2);
}
/*
韦根26发送函数
*/
voidSend_Weigand26(unsignedchar*str)
{
unsignedcharone_num=0;
unsignedchareven=0;
unsignedcharodd=0;
unsignedcharcheck_temp,i;
check_temp=*str;
for(i=0;i<8;i++)
{
if(check_temp&0
×01)
one_num++;
check_temp>>=1;
}
check_temp=*(str+1);
for(i=0;i<4;i++)
{
if(check_temp&0
×80)
one_num++;
check_temp<<=1;
}
if(one_num%2)
even=1;
else
even=0;
one_num=0;
check_temp=*(str+1);
for(i=0;i<4;i++)
{
if(check_temp&0
×01)
one_num++;
check_temp>>=1;
}
check_temp=*(str+2);
for(i=0;i<8;i++)
{
if(check_temp&0×01)
one_num++;
check_temp>>=1;
}
if(one_num%2)
odd=0;
else
odd=1;
one_num=0;
WG_DATA0=1;
WG_DATA1=1;
Delay_1ms
(2);
if(even)
{
WG_DATA1=0;
Delay_50us(8);
WG_DATA1=1;
}
else
{
WG_DATA0=0;
Delay_50us(8);
WG_DATA0=1;
/*偶校验位为1*/
/*偶校验位为0*/
}
Delay_1ms
(2);
/*
延时
2ms*/
for(i=0;i<24;i++)
{
WG_DATA0=1;
WG_DATA1=1;
if(str[0]&0
{
80)×
WG_DATA1=0;
Delay_50us(8);
WG_DATA1=1;
}
else
{
WG_DATA0=0;
Delay_50us(8);
WG_DATA0=1;
}
(*(long*)&str[0])<<=1;
Delay_1ms
(2);/*延时2ms*/
}
WG_DATA0=1;
WG_DATA1=1;
if(odd)
{
WG_DATA1=0;
Delay_50us(8);
WG_DATA1=1;
}
else
{
WG_DATA0=0;
Delay_50us(8);
WG_DATA0=1;
}
Delay_1ms
(2);
}