⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wg26.c

📁 韦根26C语言程序,主要于门禁上面读起WG26信号
💻 C
字号:
#include<reg52.h>
#include<string.h>
#include<intrins.h>
#define uchar unsigned char
#define p2 P2 
sbit DATA0=P1^0;  //d0
sbit DATA1=P1^1; //d1
uchar temp;	 //标志位
uchar buf[27];	 //韦根26数据存储位
uchar table[]={0,0,0};	 //卡号存储数组
void main(void)
{
	uchar i,j,even=0,odd=1;								
    EX0=1;                   //允许外中断0
    PX0=1;                   //置为最高优先级
    IT0=1;                   //负边沿触发中断	
    EA=1;					//开总中断	  
  	temp=0; 		//初始化标志位
    while(temp<26); //等待读取完26位				
    even=0;					//判断奇偶校验是否正确
    for(j=1;j<13;j++)
     {
	 	if(buf[j]==1)	
	  	even=(~even)&0x01; 
     }
     if(even!=buf[0])
      {
	      temp=0;	 //清除标志	 
	      goto end;
      }	 
    odd=1;
    for(i=13;i<25;i++)
     {
	    if(buf[i]==1)			 
		odd=(~odd)&0x01;	      
     }
     if(odd!=buf[25])
      {
		 temp=0;	//清除标志
	       goto end;
      }	
    temp=0;//清除标志  
	for(i=0;i<3;i++)
	{
		for(j=(i*8);j<i*8+8;j++)
		{

			table[i]=table[i]<<1|buf[j+1];
		}
	}
	p2=table[0];        
	end:
       temp=0;		          
}
void wigenISR (void) interrupt 0 using 1  
{    
   if(DATA0)
   	buf[temp++]=1; //如果DATA0=1,则表示DATA1=0;
	else
	buf[temp++]=0;
	IE0=0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -