微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求解?红外接收程序问题

求解?红外接收程序问题

时间:10-02 整理:3721RD 点击:
问题:在中断中为什么不用像串口通信那样对数组IrValue[k]赋值?
程序如下:
void ReadIr() interrupt 0
{
unsigned char j,k;
unsigned int err;
Time=0;      
DelayMs(70);
if(IRIN==0)  //确认是否真的接收到正确的信号
{  
  
  err=1000;    //1000*10us=10ms,超过说明接收到错误的信号
  /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
  侯,程序死在这里*/
  while((IRIN==0)&&(err>0)) //等待前面9ms的低电平过去   
  {   
   DelayMs(1);
   err--;
  }
  if(IRIN==1)   //如果正确等到9ms低电平
  {
   err=500;
   while((IRIN==1)&&(err>0))   //等待4.5ms的起始高电平过去
   {
    DelayMs(1);
    err--;
   }
   for(k=0;k<4;k++)  //共有4组数据
   {   
    for(j=0;j<8;j++) //接收一组数据
    {
     err=60;  
     while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
//     while (!IRIN)
     {
      DelayMs(1);
      err--;
     }
   
     while((IRIN==1))  //计算高电平的时间长度。
     {
      DelayMs(1);//0.14ms
      Time++;
     
      if(Time>30)
      {
       EX0=1;
       return;
      }
     }
     IrValue[k]>>=1;  //k表示第几组数据
     if(Time>=8)   //如果高电平出现大于565us,  那么是1
     {
      IrValue[k]|=0x80;
     }
     Time=0;  //用完时间要重新赋值      
    }
   }
  }
  if(IrValue[2]!=~IrValue[3])
  {
   return;
  }
}   
}

程序太乱了,看不来。

已解决,还是谢谢你

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top