韦根26协议以及示例程序_第1页
韦根26协议以及示例程序_第2页
韦根26协议以及示例程序_第3页
韦根26协议以及示例程序_第4页
韦根26协议以及示例程序_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

韦根26协议以及示例程序一、引言韦根26协议是一种用于传输数据的通信协议,在门禁系统、考勤系统等领域有着广泛的应用。它定义了数据传输的格式和规则,使得不同设备之间能够准确地交换信息。本文将详细介绍韦根26协议的相关内容,并提供示例程序,帮助读者更好地理解和应用该协议。

二、韦根26协议概述2.1协议定义韦根26协议规定了数据通过物理线路传输时的电气特性、信号编码、数据格式等方面的标准。它通常采用差分信号传输,具有抗干扰能力强的特点。

2.2数据格式韦根26协议传输的数据由起始位、数据位、校验位和停止位组成。1.起始位:一个逻辑"0",表示数据传输的开始。2.数据位:共26位,用于传输实际的数据信息。3.校验位:采用奇校验或偶校验方式,用于验证数据的准确性。4.停止位:一个逻辑"1",表示数据传输的结束。

2.3传输方向韦根26协议支持单向传输,数据只能从读卡器等设备向控制器等接收设备传输。

三、韦根26协议工作原理3.1读卡器工作读卡器读取卡片信息后,按照韦根26协议的格式将数据编码,并通过物理线路发送出去。

3.2控制器工作控制器接收来自读卡器的韦根26协议数据,对数据进行解码、校验等处理,然后根据接收到的信息执行相应的操作,如开门、记录考勤等。

四、韦根26协议示例程序4.1基于单片机的示例程序4.1.1硬件连接假设使用的单片机为51单片机,读卡器输出的韦根26协议信号连接到单片机的某个I/O口。1.将读卡器的数据线连接到单片机的P1口。2.为了保证信号的稳定性,可以在数据线上连接上拉电阻或下拉电阻。

4.1.2软件实现```cinclude<reg51.h>

sbitWiegandData=P1^0;//定义接收韦根数据的I/O口

unsignedcharWiegandBuffer[4];//用于存储接收到的26位数据unsignedcharbitCount=0;unsignedcharbyteIndex=0;

voidWiegand_ISR(void)interrupt1//外部中断服务程序{if(WiegandData==0)//检测到起始位{bitCount=0;byteIndex=0;for(bitCount=0;bitCount<26;bitCount++)//接收26位数据{while(WiegandData==0);//等待数据稳定WiegandBuffer[byteIndex]<<=1;if(WiegandData==1){WiegandBuffer[byteIndex]|=0x01;}while(WiegandData==1);//等待数据结束if((bitCount+1)%8==0)//每8位数据存储到一个字节{byteIndex++;}}//校验数据unsignedcharparity=0;for(bitCount=0;bitCount<24;bitCount++){parity^=WiegandBuffer[bitCount/8]&(1<<(bitCount%8));}if(parity!=WiegandBuffer[3]&0x03)//校验失败处理{//可在此处添加错误提示或处理代码}else{//处理接收到的有效数据//例如将数据发送给上位机或进行其他操作}}}

voidmain(void){IT0=1;//设置外部中断0为下降沿触发EX0=1;//使能外部中断0EA=1;//使能总中断while(1){//主循环可进行其他操作}}```

4.2基于ARM的示例程序4.2.1硬件连接以STM32为例,假设读卡器输出的韦根26协议信号连接到STM32的PA0引脚。1.配置PA0为输入模式,并使能上拉电阻。2.使用外部中断线EXTI0来检测数据变化。

4.2.2软件实现```cinclude"stm32f10x.h"

unsignedcharWiegandBuffer[4];unsignedcharbitCount=0;unsignedcharbyteIndex=0;

voidEXTI0_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line0)!=RESET){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)//检测到起始位{bitCount=0;byteIndex=0;for(bitCount=0;bitCount<26;bitCount++)//接收26位数据{while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0);//等待数据稳定WiegandBuffer[byteIndex]<<=1;if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1){WiegandBuffer[byteIndex]|=0x01;}while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1);//等待数据结束if((bitCount+1)%8==0)//每8位数据存储到一个字节{byteIndex++;}}//校验数据unsignedcharparity=0;for(bitCount=0;bitCount<24;bitCount++){parity^=WiegandBuffer[bitCount/8]&(1<<(bitCount%8));}if(parity!=WiegandBuffer[3]&0x03)//校验失败处理{//可在此处添加错误提示或处理代码}else{//处理接收到的有效数据//例如将数据发送给上位机或进行其他操作}}EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志}}

voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉输入模式GPIO_Init(GPIOA,&GPIO_InitStructure);

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);//配置EXTI0EXTI_InitTypeDefEXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line0;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);

NVIC_InitTypeDefNVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x00;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}

intmain(void){GPIO_Configuration();

while(1){//主循环可进行其他操作}}`

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论