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

📄 infrarereceive.c

📁 讲述ADE7755芯片的基本知识和一些基本应用包含C语言编程
💻 C
字号:
#include <REG932.H>
#include <define.h>
#include <Stdio.h>
#include <Intrins.h>


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;
    }
}*/

⌨️ 快捷键说明

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