📄 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 + -