打印

红外接收很郁闷,找不出问题

[复制链接]
2672|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jakey0225|  楼主 | 2011-6-30 21:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jakey0225 于 2011-7-1 08:50 编辑

__interrupt rfserver(void)//SN2501B,外部中断0,下降沿触发
{
unsigned char lowtime,hightime,i,j;
if(FP00IRQ==1)
  { FP00IRQ=0;
   T0C=0;                 //
   FT0ENB=1;              // 定时器开始计时,定时器每记一个数是64us
   while(FP00==0);
   FT0ENB=0;
   lowtime=T0C;                     // 起始信号低电平时间
   T0C=0;
   FT0ENB=1;
   while(FP00==1);//每次到这都死循环了,这是为什么呢,仿真发现上面低电平计数237,相当于近15ms
   FT0ENB=0;
   hightime=T0C;                   //起始信号高电平时间
   if((lowtime>130)&&(lowtime<150)&&(hightime>60)&&(hightime<80))//判断是否是起始信号
   {
    for(i=0;i<4;i++)
    {
     for(j=0;j<8;j++)
     {
      rf=rf>>1;
      T0C=0;
      FT0ENB=1;
      while(FP00==0);
      FT0ENB=0;
      lowtime=T0C;
      T0C=0;
      FT0ENB=1;
      while(FP00==1);
      FT0ENB=0;
      hightime=T0C;
      if((lowtime>5)&&(lowtime<10))i=j=8;
      if((hightime>6)&&(hightime<10))rf&=0x7f;
      else if((hightime>21)&&(hightime<30))rf|=0x80;
      else i=j=8;
     }
    }
    if(rf[2]==~rf[3])
      i=9;
   
   }
   
  }
}

相关帖子

沙发
NE5532| | 2011-6-30 22:23 | 只看该作者
你连注释都不想写,不出问题才怪。

使用特权

评论回复
板凳
jakey0225|  楼主 | 2011-7-1 08:48 | 只看该作者
对不起
接受批评

使用特权

评论回复
地板
linbei1988| | 2011-7-1 13:31 | 只看该作者
15MS会不会是同步码

使用特权

评论回复
5
jakey0225|  楼主 | 2011-7-1 15:03 | 只看该作者
同步码是什么呀
刚开始学遥控

使用特权

评论回复
6
joyme| | 2011-7-1 17:55 | 只看该作者
程序不是这么写的,你想用扫描的方式读取码值,必须关掉中断
否则在扫描过程出现下降沿,程序会又响应中断,那么后面的程序就不会被执行了

使用特权

评论回复
7
jakey0225|  楼主 | 2011-7-1 18:36 | 只看该作者
我用的是松翰的2501b进中断后自动关中断

使用特权

评论回复
8
lfb112| | 2011-7-1 21:56 | 只看该作者
呵呵,这样写程序很浪费资源,松翰的单片机本来资源就少。你可以用示波器看看你发射的红外码是什么样,15MS有可能是引导码。

使用特权

评论回复
9
linbei1988| | 2011-7-2 17:27 | 只看该作者
同步码是什么呀
刚开始学遥控
jakey0225 发表于 2011-7-1 15:03

同步码顾名思义就是同步用的,用来指示数据信号从哪里开始
看看遥控芯片的手册

使用特权

评论回复
10
老鱼探戈| | 2011-7-3 20:59 | 只看该作者
路过~ 看看

使用特权

评论回复
11
weiyg8051| | 2011-7-5 11:08 | 只看该作者
不能死等,死等就会出意外。用定时器做个时标,用中断捕捉上下沿,算出脉冲宽度

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:呵呵

25

主题

45

帖子

0

粉丝