ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:73.28KB ,
资源ID:3681577      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3681577.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(韦根编码.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

韦根编码.docx

1、韦根编码韦根26经典讲 第一章 韦根协议简介Wiegand(韦根)协议是由摩托罗拉公司制定的一种通讯协议,它适用于涉及门禁控制系统的读卡器和卡片的许多特性,其协议并没有定义通讯的波特率、也没有定义数据长度韦根格式主要定义是数据传输方式:Data0和Data1两根数据线分别传输0和1,现在应用最多的是26bit,34bit,36bit,44bit等等,其中标准26-bit 格式是一个开放式的格式,任何人都可以购买某一特定格式的HID卡,并且这些特定格式的种类是公开可选的,26-Bit格式就是一个广泛使用的工业标准,并且对所有HID的用户开放,现在几乎所有的门禁控制系统都接受26-Bit格式的标准

2、。1传感器原理介绍韦根传感器是由一根双稳态磁敏感功能合金丝和缠绕其外的感应线圈组成的。其工作原理是:在交变磁场中,当平行于敏感丝的某极性(例如n极)磁场达到触发磁感应强度时,敏感丝中的磁畴受到激励会发生运动,磁化方向瞬间转向同一方向,同时在敏感丝周围空间磁场也发生瞬间变化,由此在感应线圈中感生出一个电脉冲。此后若该磁场减弱,敏感丝磁化方向将保持稳定不变,感应线圈也无电脉冲输出,但当相反极性(s极)磁场增强触发磁感应强度时,敏感丝磁化方向又瞬间发生翻转,并在感应线圈中感生出一个方向相反的电脉冲。如此反复,韦根传感器便将交变磁场的磁信号转换成交变电信号。2数据输出的基本概念韦根协议又称韦根码,韦根

3、码在数据的传输中只需两条数据线,一条为DATA0,另一条为DATA1。协议规定,两条数据线在无数据时均为高电平,如果DATA0为低电平代表数据0,DATA1为低电平代表数据1(低电平信号低于1V,高电平信号大于4V),数据信号波形如图1.1所示。图1.1中脉冲宽度在20s到200s之间,两个脉冲间的时间间隔在200s到20ms之间。3韦根6位输出格式标准韦根输出是由26位二进制数组成,每一位的含义如下: E XXXX XXXX XXXX XXXX XXXX XXXX O二进制第1位为2-13位的偶校验位第2-9位对应与电子卡HID码的低8位第10-25位对应电子卡的PID号码第26位为14-2

4、5位的奇校验位以上数据从左至右顺序发送,高位在前。如果电卡的地区码位2个字符,即8位则可用那设置255个地区码(1516)+15=255);电子卡的卡号位4个字符,即16位则可设置65536个卡号(15161616)+(151616)+(1516)+15=65,535)。例如:一个HID:16385,PID:00004的电子卡其26位韦根输出为:10000000100000000000001000检验位HID=16385(二进制的低8位)PID=4(二进制)检验位这26位数据在读出器的韦根输出线DATA0,DATA1上输出。DATA0,DATA1在没有数据输出时都保持+5V高电平。若输出为0,

5、则DATA0拉低一段时间,若输出为1,则DATA1拉低一段时间。两个电子卡韦根输出之间的最小间隔为0.25秒。4韦根26接收韦根的接收对时间的实时性要求比较高,如果用查询的方法接收会出现丢帧的现象:假设查询到DATA0为0时主程序正在指向其它任务,等主程序执行完该任务时DATA0已经变为1了,那么这样就导致了一个0bit丢了,这样读出的卡号肯定奇偶校验通不过,所以表现出MCU接收不到I C模块发送的卡号。唯一的办法是在外部中断里接收每个bit(仅仅在中断里获得开始接收wiegand数据还不行,因为这是尽管给开始接收wiegand数据标志位置位了,但是主程序还在执行其它代码而没有到达查询开始接收

6、wiegand数据标志位这条指令)。5韦根接口定义 Wiegand接口界面由三条导线组成: DATA0:暂定,兰色,P2.5(通常为绿色)。DATA1:暂定,白色,P2.6(通常为白色)。GND:(通常为黑色),暂定信号地。当安装读卡器时,在读卡器和门禁控制面板的连接点(终端)上都能够看到这三个名称。目前所有的标准型读卡器都提供可选择的Wiegand接口,这三条线负责传送Wiegand数据,也被称为Wiegand信号。6特别说明:在上述标准26位韦根格式中,只包含了电子卡HID码的低8位,即对应于韦根输出的第2位到第9位,实际上电子卡的HID码为16位。除非特别说明,所售Census产品的韦根

7、通讯协议均为上述标准协议。奇/偶校验(ECC)是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种,其原理如下:如果是采用奇校验,在传送每一个字节的时候另外附加一位作为校验位,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则,这个校验位就是“0”,这样就可以保证传送的数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果为奇数,表示传送正确,反之,表示传送错误。偶校验的过程和奇校验一样,只不过是检测数据中的“1”的个数为偶数。第二章 韦根协议的应用1Wiegand接口硬件设计将Wiegand接口的Data0和Data1两个输出通

8、过74LS573接到MCU的两个IO脚上,采用查询的方式接收数据,但这样接收并不可靠。比较好的方法是将Data0和Data1两个输出通过74LS573接到MCU的两个IO脚上,并将它们通过74LS08接到MCU的外部中断1上,采用中断的方式接收数据,其电路图如图2.1所示。2流程图3发送源程序/*/模块名称:IC卡卡号显示程序 /*/功能说明:读取IC卡卡号,并予以LCM24064显示;/连线说明:其中D0接MCU的P1.5,D1接MCU的P1.6,D0与D1相与输出端接/ MCU的外部中断1;/ 作者: */完成日期:2008年10月 */*#include #include #includ

9、e #include #include #include #include #include /*函数定义*/#define uint unsigned int#define uchar unsigned charsbit D0=P16; /韦根数据0sbit D1=P15; /韦根数据1bit even; /前16位偶校验bit odd; /后16位奇校验uint m=0;uchar t;uchar flag=1; /读数次数uchar wiegand3=0xff,0xff,0xff; /IC卡卡号 韦根26数据包24位bit Even_odd_ture=0; /奇偶校验正确判断位 ucha

10、r ICNo6; /*函数声明*/void Init( void );void zijiezhuanhuan(void);void INT0_ISR(void);bit data_check(void);/*INTO中断服务程序*/void INT0_ISR(void) interrupt 0 /外部中断0服务程序 bit SBUF0; /读数缓冲器 EX0=0; /关中断 SBUF0=D0; /读数据DATA0 switch(flag) case 1: if(SBUF0=0) even=0; /确定偶校验位 else even=1; flag+; break; case 2: /第29位为区

11、号码 if(SBUF0=0) wiegand0&=0x7f; else wiegand0|=0x80; flag+; break; case 3: if(SBUF0=0) wiegand0&=0xbf; else wiegand0|=0x40; flag+; break; case 4: if(SBUF0=0) wiegand0&=0xdf; else wiegand0|=0x20; flag+; break; case 5: if(SBUF0=0) wiegand0&=0xef; else wiegand0|=0x10; flag+; break; case 6: if(SBUF0=0) w

12、iegand0&=0xf7; else wiegand0|=0x08; flag+; break; case 7: if(SBUF0=0) wiegand0&=0xfb; else wiegand0|=0x04; flag+; break; case 8: if(SBUF0=0) wiegand0&=0xfd; else wiegand0|=0x02; flag+; break; case 9: if(SBUF0=0) wiegand0&=0xfe; else wiegand0|=0x01; flag+; break; case 10: /第1025位为卡号码 if(SBUF0=0) wieg

13、and1&=0x7f; else wiegand1|=0x80; flag+; break; case 11: if(SBUF0=0) wiegand1&=0xbf; else wiegand1|=0x40; flag+; break; case 12: if(SBUF0=0) wiegand1&=0xdf; else wiegand1|=0x20; flag+; break; case 13: if(SBUF0=0) wiegand1&=0xef; else wiegand1|=0x10; flag+; break; case 14: if(SBUF0=0) wiegand1&=0xf7;

14、else wiegand1|=0x08; flag+; break; case 15: if(SBUF0=0) wiegand1&=0xfb; else wiegand1|=0x04; flag+; break; case 16: if(SBUF0=0) wiegand1&=0xfd; else wiegand1|=0x02; flag+; break; case 17: if(SBUF0=0) wiegand1&=0xfe; else wiegand1|=0x01; flag+; break; case 18: if(SBUF0=0) wiegand2&=0x7f; else wiegand

15、2|=0x80; flag+; break; case 19: if(SBUF0=0) wiegand2&=0xbf; else wiegand2|=0x40; flag+; break; case 20: if(SBUF0=0) wiegand2&=0xdf; else wiegand2|=0x20; flag+; break; case 21: if(SBUF0=0) wiegand2&=0xef; else wiegand2|=0x10; flag+; break; case 22: if(SBUF0=0) wiegand2&=0xf7; else wiegand2|=0x08; fla

16、g+; break; case 23: if(SBUF0=0) wiegand2&=0xfb; else wiegand2|=0x04; flag+; break; case 24: if(SBUF0=0) wiegand2&=0xfd; else wiegand2|=0x02; flag+; break; case 25: if(SBUF0=0) wiegand2&=0xfe; else wiegand2|=0x01; flag+; break; case 26: if(SBUF0=0) odd=0; else odd=1; t=flag; flag=1; m+; break; defaul

17、t:break; EX0=1; /开中断 /*IC卡号数据奇偶校验*/偶校验:bit 1的个数为偶数,则为0/ bit 1的个数为奇数,则为1 /奇校验:bit 1的个数为奇数,则为0/ bit 1的个数为偶数,则为1bit data_check(void) uchar i,check_temp; / uchar one_num=0; /bit 1的个数 bit even_temp; /偶校验位缓冲器 bit odd_temp; /奇校验位缓冲器 check_temp=wiegand0; /先进行偶校验 for(i=0;i=1; /右移 check_temp=wiegand1; for(i=0

18、;i4;i+) /第912位 if(check_temp&0x80)one_num+; /判断是否为1,若为1,则one_num加1 check_temp=1; /左移 one_num%2=0?(even_temp=0):(even_temp=1); / one_num=0; /bit 1的个数清零 if(even_temp=even) /若偶校验正确,则进行奇校验 check_temp=wiegand1; for(i=0;i=1; check_temp=wiegand2; /第1824位 for(i=0;i=1; one_num%2=0?(odd_temp=1):(odd_temp=0);/

19、 one_num=0; if(odd=odd_temp) return 1; /若奇偶校验正确,则返回1 else return 0; /否则返回0void Init( void ) LcmInit( );IT0=1; /外部中断0,下降沿触发有效 EX0=1; /允许外部中断0中断 EA=1; LcmClear(0); display();void zijiezhuanhuan(void) ICNo0=ASC(wiegand0&0xF0)4; /取wiegand0的高4位 ICNo1=ASCwiegand0&0x0F; /取wiegand0的低4位 ICNo2=ASC(wiegand1&0x

20、F0)4; ICNo3=ASCwiegand1&0x0F;/0 ICNo4=ASC(wiegand2&0xF0)4; ICNo5=ASCwiegand2&0x0F;/4/*主函数*/void main(void) uint i=0,j=0; Init(); while(1) if(t= =26) if(m= =1) LcmClear(0); /首次刷卡后执行清屏动作 Even_odd_ture=data_check(); /奇偶校验 if(Even_odd_ture= =1) / Even_odd_ture= =1为有效数据 Even_odd_ture=0; zijiezhuanhuan(); if(i29)j+;i=0; /一行显示完后,自动换行 if(j7)LcmClear(0);j=0; / 整屏显示完后,自动清屏 PutChar(i+,j,ICNo0); /字符显示 PutChar(i+,j,ICNo1); PutChar(i+,j,ICNo2); PutChar(i+,j,ICNo3); PutChar(i+,j,ICNo4); PutChar(i+,j,ICNo5); t=0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1