红外通讯NEC 协议 不出效果啊!!求解

2019-07-18 16:14发布

本帖最后由 dzfsy394168090 于 2013-5-29 08:16 编辑

程序如下  12M晶振
delaytime(1)测试延长时间:679us,
delaytime(2)测试延长时间:1332us

要实现目标:0x45键按下实现流水灯,按下0x46键关闭。其他键无反应。
不知道是测试的方法不对还是怎么的?求解
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar ram[4]={0,0,0,0};
sbit IRIN=P3^2;
uchar key,a[8];
void  run();
void delaytime(uint t);
void delaytime(uint t)
{uint a,b;
   for(a=t;a>0;a--)
    for(b=80;b>0;b--);
  }
void main()
  {
         T0=1;
     EA=1;
     EX0=1;
         IRIN=1;  
if(key==0x45)
   {while(1)
    run();
        }
else                                
  P1=0xff;
  }
void run()
{uint i;
  uchar a[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  for(i=0;i<8;i++)
   { P1=a;
   delaytime(1700);  }
  }


void IR()  interrupt 0
{  uchar m,n;
   uint i;
   for(i=0;i<1100;i++)
    {if(IRIN)
     return;
     }
   while(IRIN!=1);
   while(IRIN);
  for(m=0;m<4;m++)
  {        
   for(n=0;n<8;n++)
   {while(IRIN!=1);
    delaytime(1);
        if(IRIN)
          {ram[m]=ram[m]|0x80;
            delaytime(2);
          }
        else
           ram[m]=ram[m]>>1;
        }
  }
if(ram[2]!=(~(ram[3]&0x7f)))
  {         for(i=0;i<4;i++)
    ram=0;         
        return;
  }
  key=ram[2];
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。