求解??红外接收程序问题

2019-07-15 16:02发布

问题:在中断中为什么不用像串口通信那样对数组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;
  }
}   
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
a中蓝
1楼-- · 2019-07-15 20:21
程序太乱了,看不来。
longzhoubin
2楼-- · 2019-07-16 00:24
 精彩回答 2  元偷偷看……
haoshuaif1
3楼-- · 2019-07-16 00:41
longzhoubin 发表于 2015-9-28 18:38
已解决,还是谢谢你

不懂  能说说为什么吗?

一周热门 更多>