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

📄 main.c

📁 读标准韦根26码的程序
💻 C
字号:
#include "at89x52.h"

typedef unsigned char BYTE;
typedef unsigned int  WORD;

BYTE state;
BYTE wg0;
BYTE wg1;
BYTE wg2;
BYTE count;
BYTE cnt;
bit r_done;
bit firstbit;
bit lastbit;
bit D0_done;
bit D1_done;


sbit WG_IN1	  = P3^2;
sbit WG_IN0	  = P3^3;

void delay_30us(void)
{
	TR0 = 0; 
	TH0 = (65536 - 20)/256; //定时30us 
	TL0 = ((65536 - 20)%256); 
	TF0 = 0; 
	ET0 = 0; 
	TR0 = 1; 
	while (!TF0) { ;} 
	TF0 = 0;
}

void Sys_init(void)  //4800
{
/* RCAP2L=0xb8;
   RCAP2H=0xFF;
   SCON=0x40;
   T2CON=0x34;*/
   SCON=0x50;			// UART_mode=1,REN=1
   PCON=0x00;
   TMOD=0x21;
   TL1=0xfa;
   TH1=0xfa;
   TR1=1;
//   ES=1;
   ES=0;
   IT0=1;
   IT1=1;
//  IP=0x10;
   EX0=1;
   EX1=1;
   EA=1;
}
void IT0_int(void) interrupt 0   //D1
{
/*	delay_30us();
	if(WG_IN1==0)
	{
		delay_30us();
		if(WG_IN1==0)
		{
			delay_30us();
			if(WG_IN1==0)
			{*/
				if(count==0){
	 	 			firstbit=1;
   				}else if(count<9){
   					wg0=(wg0<<1)|0x01;
   				}else if(count<17){
   		   			wg1=(wg1<<1)|0x01;
				}else if(count<25){
			  		wg2=(wg2<<1)|0x01;
   				}else {lastbit=1;r_done=1;}
   				count++;
   				if(count==26)
     				count=0;
/*			}else count=0;
		}else count=0;
	}
	else count=0;*/
 //  cnt=3;
}
void IT1_int(void) interrupt 2   //D0
{
/*	delay_30us();
	if(WG_IN0==0)
	{
		delay_30us();
		if(WG_IN0==0)
		{
			delay_30us();
			if(WG_IN0==0)
			{*/
				if(count==0){
					firstbit=0;
   				}else if(count<9){
    		  		wg0=(wg0<<1)&0xfe;
  		 		}else if(count<17){
  		    		wg1=(wg1<<1)&0xfe;
  		 		}else if(count<25){
  		    		wg2=(wg2<<1)&0xfe;
  		 		}else {lastbit=0;r_done=1;}
  		 		count++;
  		 		if(count==26)
  			   		count=0;
/*			}else count=0;
		}else count=0;			 
	}else count=0;*/
//   cnt=3;
}

void T0_init(void)
{

//   TMOD=0x01;
   TH0=TL0=0;
   ET0=1;
   TR0=1;
   IP=0x03;
   
}

void T0_Int(void) interrupt 1
{
  if(cnt){
    cnt--;
    if(cnt==0){
      count=0;
    }
  }
}

void wg_process(void)
{

//   BYTE i;
   BYTE sum=0;
 /* for(i=0;i<8;i++)
   {
       if(wg0&(0x01<<i))
       sum++;
   }
   for(i=0;i<4;i++)
   {
       if(wg1&(0x10<<i))
	   sum++;
   }
   if((sum%2)!=firstbit){ return;}
   sum=0;
   for(i=0;i<8;i++)
   {
       if(wg2&(0x01<<i))
       sum++;
   }
   for(i=0;i<4;i++)
   {
       if(wg1&(0x01<<i))
	   sum++;
   }
   if((sum%2)==lastbit){ return;}*/
   SBUF=wg0;
   while(TI==0);
   TI=0;
   SBUF=wg1;
   while(TI==0);
   TI=0;
   SBUF=wg2;
   while(TI==0);
   TI=0;
}

void main(void)
{
    Sys_init();
    T0_init();
	cnt=0;
	while(1){
       if(r_done){
	      r_done=0;
          wg_process();
		  wg0=wg1=wg2=0;
       }
    }
}

⌨️ 快捷键说明

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