一个红外解码程序,求解释

2019-07-15 22:45发布

函数功能:对4个字节的用户码和键数据码进行解码
说明:解码正确,返回1,否则返回0
出口参数:dat
*************************************************************/
bit DeCode(void)        
{
   
   unsigned char  i,j;
unsigned char temp;    //储存解码出的数据
for(i=0;i<4;i++)      //连续读取4个用户码和键数据码
   {
   for(j=0;j<8;j++)  //每个码有8位数字
    {
          temp=temp>>1;  //temp中的各数据位右移一位,因为先读出的是高位数据         
      TH0=0;         //定时器清0
      TL0=0;         //定时器清0
      TR0=1;         //开启定时器T0
        while(IR==0)   //如果是低电平就等待
                ;       //低电平计时
        TR0=0;         //关闭定时器T0
      Lowtime=TH0*256+TL0;    //保存低电平宽度
      TH0=0;         //定时器清0
      TL0=0;         //定时器清0
      TR0=1;         //开启定时器T0
      while(IR==1)   //如果是高电平就等待
          ;      
      TR0=0;        //关闭定时器T0
      HighTime=TH0*256+TL0;   //保存高电平宽度
      if((LowTime<370)||(LowTime>640))
           return 0;        //如果低电平长度不在合理范围,则认为出错,停止解码   
      if((HighTime>420)&&(HighTime<620))   //如果高电平时间在560微秒左右,即计数560/1.085=516次
              temp=temp&0x7f;       //(520-100=420, 520+100=620),则该位是0
      if((HighTime>1300)&&(HighTime<1800)) //如果高电平时间在1680微秒左右,即计数1680/1.085=1548次
              temp=temp|0x80;       //(1550-250=1300,1550+250=1800),则该位是1
       }                 
    a[i]=temp; //将解码出的字节值储存在a[i]                     
    }         
  if(a[2]=~a[3])  //验证键数据码和其反码是否相等,一般情况下不必验证用户码
  return 1;     //解码正确,返回1
}

请高手指教一下,当中的temp的初值是多少,解码出的数据为什么就会存到它里面的呢?同样是字符型变量,为什么解出来的数据就不会存到 i  或 j 里面去呢?求详细解释
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
小浩神倾城
2019-07-16 03:57

这是个简单的NEC解码程序。
temp的初始值不管是什么都没关系,temp=temp>>1这样移除最高位变为0,
如果接收到的是0, temp=temp&0x7f; 这最高位为0.
如果接收到的是1, temp=temp|0x80;最高位为1.这个如果看不懂,建议你去看C语言基础吧,简单的清零置位操作。

为什么解出来的数据就不会存到 i  或 j 里面去呢?  ----------这句完全是废话,程序都那么明显了,怎么会到i,j去????

一周热门 更多>