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

📄 decode.bak

📁 自定简单无线协议.由AVR编码发送,51中断接收解码, 误码率低, 但通信速率较低
💻 BAK
字号:
/*12MHz晶振*/
#include "at89x52.h"

#define uchar unsigned char
#define uint unsigned int 


sbit beep=P3^7;
sbit inf=P3^3;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
sbit led9=P0^0;
unsigned char rec=0;
unsigned char data1[110]={0};
unsigned char k=0,n=0;

uchar key_code=0;/*key_code:遥控*/
uint  buf_key_code=0;/*键值暂存对应功能看主函数*/
uchar key_bit_count=0;/*键编码脉冲计数*/
uint  count_T=0,buf_CT=0;/*count_T:定时器中断次数计数,buf_CT用来截获某一时间的count_T值以供判断*/
uchar common_code_count=0;/*前导码脉冲计数*/
uchar inf_status=0;/*inf_status:脉冲接收器所处的状态,0:无信号,1:前导码接收区,2:数据编码接收区*/
uchar startkey=0;			//the number of startkey;
uchar codedata[12];
uchar n;
uchar frag=1;

void UART_START(void)
{
                     
   EA=0;
   ES=1;
   ET1=0;
   SCON=0X50;
   TMOD|=0X20;
   PCON=0X80;
   TL1=0xf3;
   TH1=0Xf3;
   TR1=1;
   EA=1;
  
}


void uart_int(void) interrupt SIO_VECTOR 
{
   RI=0;
   rec=SBUF;
}


void Putchar(a)
{
   SBUF=a;
   while(!TI);   
   TI=0;  
} 


void delay10us(uint t)
{
	while(t--);
}


void delayms(uint t)
{
	uint i;
	uchar j;
	for(i=0;i<t;i++)
		for(j=125;j>0;j--);
}



void main()
{
  
	EA=1;	  //开全局中断
	ET0=1;	  //开定时器0中断
	TMOD=0x02;//T0设置为8位自动装载模式
	TH0=0xCE; //自动装载值为202,中断间隔为50us
	TL0=0xCE; //初值为202
	IT1=1;	  //INT1为下降沿触发
	EX1=1;	  //开外部中断
//	TR0=1;	  //启动定时器计数
	 UART_START();
	count_T=0;
	
	while(1)
	{	 
	 
	}
}

void Time0(void) interrupt 1
{ 
    count_T++;//周期累加
//如果外部中断处于无信号区,则滤除前导宽脉冲中间的跳变毛刺
/*	if(inf_status==0&&count_T<160)
	{
		EX1=0;
	}
//如果外部中断处于信号区,则滤除宽脉冲中间的跳变毛刺
	else if(inf_status==1&&count_T<12)
{
		EX1=0;
	}
//渡过上升沿后重新开放外部中断
	else
	{
		EX1=1;
	}*/
//超过25ms,则锁定count_T值,等待下一次信号脉冲下降沿来解开
	if(count_T>1000)
	{
		inf_status=0;
		count_T=0;
	}
}

/***************************************************************
		外部中断1,用于捕获红外脉冲信号
****************************************************************/
void int_1(void) interrupt 2
{	unsigned char i;
    
//	led1=~led1;
	buf_CT=count_T;	
		TR0=1;
	
	count_T=0;
    



	if((buf_CT>15)&&(buf_CT<120))//若收到的信号合法,则再进行以下的信号分析
	{
		
		if(inf_status==0)//若当前信号接收系统处于空闲状态,则标志进入前导码接收区
		{	 
		
			  
			if((buf_CT>60)&&(buf_CT<120))
			{	
			
		      
				
					startkey++;
				
			
					if(startkey>=3)
			    	{//	led3=0 ;
						inf_status=1;//标志进入数据接收区
						buf_key_code=0;
						key_bit_count=0;					
						buf_CT=0;
						startkey=0;
				 	}
		
			
			if( (  (buf_CT>15)&&(buf_CT<25)  ) || ( (buf_CT>32)&&(buf_CT<45) ) )
				  startkey=0;
			
			}
		}

		

		else if(inf_status==1)//数据接收区
		{	   
					if((buf_CT>70)&&(buf_CT<90))
					{ 
						key_bit_count=0;
					}	
					

					if((buf_CT>15)&&(buf_CT<25))
					{//	led3=0;
						codedata[key_bit_count]=0;
						key_bit_count++;//数据脉冲数累加,一共有8
					

					
					}
					
					else if((buf_CT>32)&&(buf_CT<45))
					{	  
						codedata[key_bit_count]=1;
						key_bit_count++;//数据脉冲数累加,一共有8
					

					}
	


				if(key_bit_count==12&&codedata[0]==0&&codedata[1]==1&&codedata[2]==0&&codedata[3]==1)
				{	
					 for(i=4;i<12;i++)
					 {	 buf_key_code>>=1; 
					 	 buf_key_code=buf_key_code | (codedata[i]<<7);
					 }
					
					led9=0;
					
					data1[k]=buf_key_code  ;
					k++;
					if(k>=100) 
					{
						for(n=0;i<100;n++)
						{
							Putchar(data1[n]);
						}
					}
					inf_status=0;//标志接收系统返回空闲状态
					key_bit_count=0;
					key_code=buf_key_code;

					buf_key_code=0;
					TR0=0;
				}	


		
	/*	else if(inf_status==1)//数据接收区
		{
			
			if((buf_CT>15)&&(buf_CT<25))//窄脉冲接收
			{
			 

				buf_key_code>>=1;//接收0
				key_bit_count++;
			
								 
			}
			else if((buf_CT>32)&&(buf_CT<45))//宽脉冲接收
			{
				buf_key_code>>=1;
				buf_key_code|=0x80;//接收1
				key_bit_count++;//数据脉冲数累加,一共有8个
			
			} 

			if(key_bit_count>7)//若收完8位个数据脉冲,则进行以下的处理
			{	

			    P1=buf_key_code; 
				led9=0;
				inf_status=0;//标志接收系统返回空闲状态
				key_bit_count=0;
				key_code=buf_key_code;

				buf_key_code=0;
				TR0=0;
				

			}	*/		
		}
		buf_CT=0;
	} 
   EA=1;			 
 
}

⌨️ 快捷键说明

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