www.pudn.com > DDS485.rar > infrarereceive.c


#include  
#include  
#include  
#include  
 
 
void infrarereceive(void) 
{ 
    unsigned char i,InData; 
    bit k,j,DataRch; 
    i=InData=0; 
    k=j=DataRch=0; 
    //InitDelay(1); 
    time0fg=0; 
    TR1=1; 
    //TR0=0; 
    EX1=0; 
    while(!time0fg); 
    //time0fg=0; 
    while(i<8) 
    { 
        InData>>=1; 
        if(HwRxd) 
        { 
            //HwTxd=0; 
            InData|=0x80; 
            j=~j; 
        } 
        i++; 
        time0fg=0; 
        while(!time0fg); 
    } 
    if(HwRxd) 
    { 
        DataRch=1; 
    } 
    else 
    { 
        DataRch=0; 
    } 
    time0fg=0; 
    while(!time0fg); 
    //TR1=0; 
    //TR0=1; 
    if(j==DataRch) 
    { 
        k=1; 
    } 
    else 
    { 
        k=0; 
    } 
    if(SendEndFg)//----------------------------------------------------------上次数据是否发送完毕? 
    { 
//        ComInceptTime=3;//------------------------------------------------如果两秒内没有接收结束自动中断接收并清除已经接收的数据 
        //k=1; 
        //HwTxd=0; 
        if(k)  
        {    
            //HwTxd=0; 
            if(InfraredBufDptr<50) 
          	{ 
          		if(InfraredBufDptr==0)//--------------------------------------数据缓冲区地址指针是否为零 
          		{		 
          			if(InData==0x68)//----------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68 
          			{ 
          				//HwTxd=0; 
          				InceptBuf[0]=InData; 
    					InfraredBufDptr++;//----------------------------------缓冲区地址累加 
          			} 
          			else 
          			{ 
          	            InfraredBufDptr=0;//----------------------------------缓冲区地址归零 
          			} 
          		} 
          		else 
          		{						          
          			if(InfraredBufDptr==7)//----------------------------------缓冲区指针是否等于7 
                    { 
                        if(InData==0x68)//------------------------------------缓冲区已接收的第8位是否等于0x68 
                        { 
                            InceptBuf[7]=InData;//----------------------------数据保存到缓冲区 
          			        InfraredBufDptr++;//------------------------------缓冲区地址累加 
          			         
                        } 
                        else 
                        { 
                            InfraredBufDptr=0;//------------------------------缓冲区地址归零 
                        } 
                    } 
                    else 
                    { 
                        InceptBuf[InfraredBufDptr]=InData;//------------------数据保存到缓冲区 
                        InfraredBufDptr++;//----------------------------------缓冲区地址累加 
                    } 
          		} 
          	} 
          	else 
          	{ 
          		InfraredBufDptr=0;//------------------------------------------缓冲区地址归零 
          	} 
        }  
 
        if(InceptBuf[InceptBuf[9]+11]==0x16)//----------------------------是否完成一帧数据的接收?结束符是否等于0x16 
        { 
            SerSendFg=0;//------------------------------------------------非串口状态 
            InfSendFg=1;//------------------------------------------------红外状态 
            CmdParseFg=1;//-----------------------------------------------启动命令解析使能位 
        	SerialBufDptr=0; 
        	InfraredBufDptr=0;//------------------------------------------缓冲区地址归零 
        	SendEndFg=0;//------------------------------------------------已发送完毕位归零 
        	SendStrFg=1; 
        }    
        EX1=1;//----------------------------------------------------------使能外部中断1 
       // ES=1; //----------------------------------------------------------使能串口中断 
    } 
    else 
    { 
        HwRxd=1; 
    } 
    //TR1=0; 
    //TR0=1; 
} 
 
/*void infrarereceive(void) 
{ 
    unsigned char i,InData; 
    bit k,j,DataRch;    
    EX1=0; 
    //ES=0;  
    i=InData=0; 
    DataRch=0;     
    j=k=0; 
    InitDelay(5); 
    while(i<10) 
   	{ 	     
  		if(i<9) 
        { 
            InData>>=1;  
            if(HwRxd) 
         	{ 
         	  InData|=0x80; 
         	  j=~j;	 
         	}  
         } 
        else 
        { 
            if(HwRxd) 
            { 
                DataRch=1; 
            } 
            else 
            { 
                DataRch=0; 
            } 
        }  		 
  		InitDelay(55);//--->11.0592M 
  		i++; 
   	} 
    if(j==DataRch) 
    { 
        k=1; 
    } 
    else 
    { 
        k=0; 
    } 
    if(SendEndFg)//----------------------------------------------------------上次数据是否发送完毕? 
    { 
//        ComInceptTime=3;//------------------------------------------------如果两秒内没有接收结束自动中断接收并清除已经接收的数据 
        if(k)  
        {    
            if(InfraredBufDptr<50) 
          	{ 
          		if(InfraredBufDptr==0)//--------------------------------------数据缓冲区地址指针是否为零 
          		{		 
          			if(InData==0x68)//----------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68 
          			{ 
          				InceptBuf[0]=InData; 
    					InfraredBufDptr++;//----------------------------------缓冲区地址累加 
          			} 
          			else 
          			{ 
          	            InfraredBufDptr=0;//----------------------------------缓冲区地址归零 
          			} 
          		} 
          		else 
          		{						          
          			if(InfraredBufDptr==7)//----------------------------------缓冲区指针是否等于7 
                    { 
                        if(InData==0x68)//------------------------------------缓冲区已接收的第8位是否等于0x68 
                        { 
                            InceptBuf[7]=InData;//----------------------------数据保存到缓冲区 
          			        InfraredBufDptr++;//------------------------------缓冲区地址累加 
          			         
                        } 
                        else 
                        { 
                            InfraredBufDptr=0;//------------------------------缓冲区地址归零 
                        } 
                    } 
                    else 
                    { 
                        InceptBuf[InfraredBufDptr]=InData;//------------------数据保存到缓冲区 
                        InfraredBufDptr++;//----------------------------------缓冲区地址累加 
                    } 
          		} 
          	} 
          	else 
          	{ 
          		InfraredBufDptr=0;//------------------------------------------缓冲区地址归零 
          	} 
        }  
 
        if(InceptBuf[InceptBuf[9]+11]==0x16)//----------------------------是否完成一帧数据的接收?结束符是否等于0x16 
        { 
            SerSendFg=0;//------------------------------------------------非串口状态 
            InfSendFg=1;//------------------------------------------------红外状态 
            CmdParseFg=1;//-----------------------------------------------启动命令解析使能位 
        	SerialBufDptr=0; 
        	InfraredBufDptr=0;//------------------------------------------缓冲区地址归零 
        	SendEndFg=0;//------------------------------------------------已发送完毕位归零 
        	SendStrFg=1; 
        }    
        EX1=1;//----------------------------------------------------------使能外部中断1 
       //ES=1;//----------------------------------------------------------使能串口中断 
    } 
    else 
    { 
        HwRxd=1; 
    } 
}*/