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

📄 main.c

📁 韦根解码程序,包括的原理图与KEIL C51原代码
💻 C
字号:
//**********************************************
//文件:MAIN.C
//版本:V1.0
//编写人:马一兵
//编写日期:2005年12月10日
//修改日期:
//功能说明:
//**********************************************
#include<reg52.h>
#include<string.h>
#include <intrins.h>


sbit DATA0=P1^0;
sbit DATA1=P1^1;

unsigned char Wigen_counter;
unsigned char Wigen_ReciveBuf[27];


/******************************************************************/
/******************************************************************/
/***************************主程序*********************************/
/******************************************************************/
/******************************************************************/
void main(void)
{
unsigned char idata even;
unsigned char idata odd;
unsigned char idata i,j;
unsigned char idata WIGEN_BUF[6];
//外中断0初始化              //用于捕获WIGEN信号
    EX0=1;                   //允许外中断0
    PX0=1;                   //置为最高优先级
    IT0=1;                   //负边沿触发中断

//开总中断
    EA=1;


    Wigen_counter=0;

    while(Wigen_counter<26);



//判断奇偶校验是否正确
    even=0;
    for(j=0;j<3;j++)
     {
     WIGEN_BUF[j]=0;
     for(i=(j*4);i<(j*4+4);i++)
      {
       WIGEN_BUF[j]=(WIGEN_BUF[j]<<1)&0xfe;
       if(Wigen_ReciveBuf[i+1]==1)
        {
         WIGEN_BUF[j]=WIGEN_BUF[j]|0x01;
         even=(~even)&0x01;
        }
      }
     }
     if(even!=Wigen_ReciveBuf[0])
      {
//清除标志
       Wigen_counter=0;
      goto end;
      }

    odd=1;
    for(j=3;j<6;j++)
     {
     WIGEN_BUF[j]=0;
     for(i=(j*4);i<(j*4+4);i++)
      {
       WIGEN_BUF[j]=(WIGEN_BUF[j]<<1)&0xfe;
       if(Wigen_ReciveBuf[i+1]==1)
        {
         WIGEN_BUF[j]=WIGEN_BUF[j]|0x01;
         odd=(~odd)&0x01;
        }
      }
     }
     if(odd!=Wigen_ReciveBuf[25])
      {
//清除标志
       Wigen_counter=0;
       goto end;
      }

//清除标志
       Wigen_counter=0;


       //wigen数据接收正确,存在WIGEN_BUF中,加入你的处理

end:
       Wigen_counter=0;
       
       
       
}





/******************************************************************/
/****************************外中断2子程序************************/
/******************************************************************/
void wigenISR (void) interrupt 0 using 1  
{

   //如果DATA0=1,则表示DATA1=0;
   if(DATA0) Wigen_ReciveBuf[Wigen_counter++]=1;
   else      Wigen_ReciveBuf[Wigen_counter++]=0;

   //D0和D1不能同时为0;

   IE0 = 0; 	//Clear interrupt request flag

}

⌨️ 快捷键说明

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