搜索
bottom↓
回复: 22

哪为高手懂韦根协议啊。怎么用单片机来读取韦根26的ID卡的信息,以下为我写的程序,ID

[复制链接]

出0入0汤圆

发表于 2008-4-10 14:53:50 | 显示全部楼层 |阅读模式
源程序

#include <reg52.h>
#include <intrins.h>
#include <absacc.h>

/*类型声明*/
typedef unsigned char uchar;
typedef unsigned int  uint;
typedef unsigned long ulong;

void  delay(void);

sbit DATA1_INT0=P3^2;
sbit DATA0=P1^6;
uchar ReadIDflag=0;
bit RcvEven;
bit RcvOdd;
bit CheckEven=0;
bit CheckOdd=1;
bit RCVOK=0;
uchar RcvWG[3]={0,0,0};
uchar Rcnt=0;


sbit bell_cl=P1^7;  //蜂鸣器
sbit WD=P3^5;       //看门狗
sbit OE2_138=P1^5;  //低有效

sbit INT_1=P3^3;
uchar COUNT_T0=0;
ulong flashbell=0;

#define T0H  0Xf9
#define T0L  0X85  //1.8ms
#define NOP5()  _nop_();_nop_();_nop_();_nop_();_nop_()
#define selDW_CS_18ADD XBYTE[0X5fff]
#define selDW_CS_90ADD XBYTE[0X7fff]
#define selDM_ADD      XBYTE[0X3fff]

#define EN138          OE2_138=1
#define DISEN138       OE2_138=0

uchar code DM[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code IDindex[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
uchar ID[10]={0xE9,0xa0,0xa0,0x4f,0x00,0x00,0x00,0x00,0x00,0x00};

uchar code DW_CS[10]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfE,0xfD};
bit  b_ClrDog=0;
uchar ClrDogcount=0;


void initial(void)
{
  EA=0;
  EN138;
  bell_cl=1;
  COUNT_T0=0;
  //INT0=0;
  IT0=0;//低电平触发中断
  EX0=1;//外部中断允许
  //T0
  TMOD = 0x11;
  TH0  = T0H;
  TL0  = T0L;
  //T1
  TH1  = T1H;
  TL1  = T1L;
  ET0=1;
  TR0=1;
  ET1=1;
  TR1=0;
  EA=1;
}
void  delay(void)
{
uint i;
for(i=125;i>0;i--)
{}
}
void v_ClrDog(void)
{
    if(b_ClrDog)
    {
        b_ClrDog=0;
        WD=0;NOP5();
        WD=1;NOP5();
        WD=0;
    }
}

void main (void)
{
uchar i=0;
initial();
while(1)
    {
      v_ClrDog();
      if(ReadIDflag==1)
       {  EA=0;
           if(Rcnt<=1))//读偶校验位1
           {
             if(DATA0==0)RcvEven=0;
             else RcvEven=1;
           }
         else if(Rcnt>=26)//读奇校验位26
           {
            if(DATA0==0)RcvOdd=0;
            else RcvOdd=1;
           }
         else//读24位卡号数据
         {
         
           if(DATA0==0)
               {if(Rcnt<=9)
                RcvWG[0]=RcvWG[0]|0x00;
                else if(Rcnt<=17)
                RcvWG[1]=RcvWG[1]|0x00;
                else RcvWG[2]=RcvWG[2]|0x00;
               }   
           else
             {
                if(Rcnt<=9)                   //2~9位 用RcvWG[0]存
                RcvWG[0]=RcvWG[0]|0x01;
                else if(Rcnt<=17)              //10~17位 用RcvWG[1]存
                RcvWG[1]=RcvWG[1]|0x01;
                else RcvWG[2]=RcvWG[2]|0x01;   //18~25位 用RcvWG[2]存
                if(Rcnt<=13)CheckEven=~CheckEven; //偶校验
                else CheckOdd=~CheckOdd;  //奇校验
              }
             if(Rcnt<=9)
            RcvWG[0]=RcvWG[0]<<1;
            else if(Rcnt<=17)
            RcvWG[1]=RcvWG[1]<<1;
            else RcvWG[2]=RcvWG[2]<<1;
          }
        ReadIDflag=0;
        EA=1;
       }
        if(Rcnt>26)//26韦根数据读完
        {
          if((CheckEven==RcvEven)&&(CheckOdd==RcvOdd))//检验数据是否接受正确
            {
               for(i=0;i<10;i++)//显示卡号
               {
                 if(RcvWG[0]/16==IDindex) ID[0]= DM;
                 if(RcvWG[0]%16==IDindex) ID[1]= DM;
                 if(RcvWG[1]/16==IDindex) ID[2]= DM;
                 if(RcvWG[1]%16==IDindex) ID[3]= DM;
                 if(RcvWG[2]/16==IDindex) ID[4]= DM;
                 if(RcvWG[2]%16==IDindex) ID[5]= DM;
               }

               RcvWG[0]=0;
               RcvWG[1]=0;
               RcvWG[2]=0;
               RcvEven=0;
               RcvOdd=0;
               CheckEven=0;
               CheckOdd=1;
               temp=0;
               Rcnt=0;
               RWGcnt=0;
               RCVOK=1;

           }
        }
        if (RCVOK)//读卡成功后,延时,再开始读下一次
         {
          EX0=0;
          for(i=200;i>0;i--)
           delay();
          EX0=1;
         }
        if(ClrDogcount>=20){b_ClrDog=1;ClrDogcount=0;}
     }
}
void T0_interrupt (void) interrupt 1 using 1    //动态显示3字节卡号数据
{
  EA = 0;
  TR0 = 0;
  v_ClrDog();
  if(COUNT_T0>=10) COUNT_T0=0;
  selDW_CS_18ADD=0xff;
  selDW_CS_90ADD=0xff;
  selDM_ADD=0x00;
if(RCVOK)
   {
    switch (COUNT_T0)
         {
           v_ClrDog();

           case 0:{ selDW_CS_18ADD= DW_CS[0] ; selDM_ADD=ID[0];break;}
           case 1:{ selDW_CS_18ADD= DW_CS[1] ; selDM_ADD=ID[1];break;}
           case 2:{ selDW_CS_18ADD= DW_CS[2] ; selDM_ADD=ID[2];break;}
           case 3:{ selDW_CS_18ADD= DW_CS[3] ; selDM_ADD=ID[3];break;}
           case 4:{ selDW_CS_18ADD= DW_CS[4] ; selDM_ADD=ID[4];break;}
           case 5:{ selDW_CS_18ADD= DW_CS[5] ; selDM_ADD=ID[5];break;}
           case 6:{ selDW_CS_18ADD= DW_CS[6] ; selDM_ADD=ID[6];break;}
           case 7:{ selDW_CS_18ADD= DW_CS[7] ; selDM_ADD=ID[7];break;}
           case 8:{ selDW_CS_90ADD= DW_CS[8] ; selDM_ADD=ID[8];break;}
           case 9:{ selDW_CS_90ADD= DW_CS[9] ; selDM_ADD=ID[9];break;}

        }
     }
  else
   {  switch (COUNT_T0)
         {
           v_ClrDog();

           case 0:{ selDW_CS_18ADD= DW_CS[0] ; selDM_ADD=DM[0];break;}
           case 1:{ selDW_CS_18ADD= DW_CS[1] ; selDM_ADD=DM[1];break;}
           case 2:{ selDW_CS_18ADD= DW_CS[2] ; selDM_ADD=DM[2];break;}
           case 3:{ selDW_CS_18ADD= DW_CS[3] ; selDM_ADD=DM[3];break;}
           case 4:{ selDW_CS_18ADD= DW_CS[4] ; selDM_ADD=DM[4];break;}
           case 5:{ selDW_CS_18ADD= DW_CS[5] ; selDM_ADD=DM[5];break;}
           case 6:{ selDW_CS_18ADD= DW_CS[6] ; selDM_ADD=DM[6];break;}
           case 7:{ selDW_CS_18ADD= DW_CS[7] ; selDM_ADD=DM[7];break;}
           case 8:{ selDW_CS_90ADD= DW_CS[8] ; selDM_ADD=DM[8];break;}
           case 9:{ selDW_CS_90ADD= DW_CS[9] ; selDM_ADD=DM[9];break;}

        }
   }
  v_ClrDog();
  ClrDogcount++;
  COUNT_T0++;
  TH0 = T0H;
  TL0 = T0L;
  TR0 = 1;
  EA = 1;
}
void INT0_interrupt (void) interrupt 0 using 2
{
  EA = 0;
  ReadIDflag=1;
  Rcnt++;
  EA = 1;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2008-4-10 16:07:56 | 显示全部楼层
wiegand包括数据data0和data1。静态电平应该为高。
低电平脉冲表示有数据:data0线的低电平标志数据0,data1线的低电平表示1
脉冲宽度和脉冲间隔时间应该根据需要调整(RFID行业经验)
数据格式:
w26:bit0为bit1~bit12的偶校验
     bit25为bit13~bit24的奇校验


例子:      0     1     1     0  
            
data0 ------ ----------------- ----
           |_|               |_|
data1 ------------ ----- ----------
                 |_|   |_|

出0入0汤圆

 楼主| 发表于 2008-4-11 08:58:30 | 显示全部楼层
《〈脉冲宽度和脉冲间隔时间应该根据需要调整(RFID行业经验)〉,楼上的大虾,我想问一下,我的DATA0,DATA1是通过一个与非门接到INT0外部中断因脚上的,低电平触发中断,有中断说明有数据发过来,有中断我开始读DATA0,DATA1的状态,我还需要“调整脉冲宽度和脉冲间隔时间”吗?

出0入0汤圆

发表于 2008-4-11 09:12:16 | 显示全部楼层
接收的时候不需要,发送的时候需要注意

出0入0汤圆

发表于 2008-4-11 15:23:18 | 显示全部楼层
不用 IT0=0;//低电平触发中断 ,而该用下降沿触发中断,用与门

出0入0汤圆

 楼主| 发表于 2008-4-12 10:53:02 | 显示全部楼层
谢谢大家,【4楼】 avr1008 ,能不能麻烦你仔细的帮我查一下程序,除了你提到的《《该用下降沿触发中断,用与门》》,还有其他的问题吗?小女子万分感谢啊!!!!!

出0入0汤圆

 楼主| 发表于 2008-4-14 07:57:47 | 显示全部楼层
问题已完满解决,谢谢大家

出0入0汤圆

发表于 2008-4-14 09:52:56 | 显示全部楼层
是什么问题啊,说一说嘛

出0入0汤圆

 楼主| 发表于 2008-4-14 10:48:16 | 显示全部楼层
1。《《该用下降沿触发中断,用与门
2。读24位卡号数据 的时候,移位多移了一次

出0入0汤圆

发表于 2008-8-10 19:48:06 | 显示全部楼层
留个记号

出0入0汤圆

发表于 2008-8-10 22:35:51 | 显示全部楼层
收藏

出0入0汤圆

发表于 2009-3-13 13:46:23 | 显示全部楼层
韦根硬件通信电路怎么连接,比如说通信电压是几伏,是直接用TTL接口,还是要电平转换下,请大虾赐教!!

出0入0汤圆

发表于 2009-4-15 09:32:26 | 显示全部楼层
我网站很久就收录了篇文章,看看应该会明白

Pyramid Series Wiegand Data Format(韦根数据格式)
http://www.zhlab.cn/technique/T0000006.htm

出0入0汤圆

发表于 2009-4-19 21:42:02 | 显示全部楼层
楼上的DD比较好,可是是全E文的啊,有没高手帮忙翻译下呢

出0入0汤圆

发表于 2009-8-24 09:00:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-24 11:44:52 | 显示全部楼层
mark mark

出0入0汤圆

发表于 2009-9-17 22:58:22 | 显示全部楼层
标记

出0入0汤圆

发表于 2010-4-8 12:41:13 | 显示全部楼层
楼主你好!我想请教一下用52单片机读韦根26ID卡信息的问题,我的邮箱是wmz128@163.com,可以把你的资料和程序源码发给我吗?万分感谢!

出0入0汤圆

发表于 2011-8-5 10:57:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-26 14:56:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-3 17:50:40 | 显示全部楼层
要是有个原理图就好了

出0入0汤圆

发表于 2014-9-24 14:27:33 | 显示全部楼层
程序先收藏了

出0入0汤圆

发表于 2015-3-6 10:36:59 | 显示全部楼层
jszjl2007 发表于 2008-4-14 07:57
问题已完满解决,谢谢大家

怎么解决的说一下,我也有类似问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 10:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表