打印

江湖救急——红外NEC接收

[复制链接]
1654|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
badbird1234|  楼主 | 2009-8-6 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因为片子比较垃圾没下降沿中断;中断函数也放不下东西
程序如下:
tu08 b[4];
tu08 RFstate;           // receiver state
tu08 RFcount;           // timer counter
tu08 BitCount;
tu08 Bptr;
#define address   b[0]
#define address_1 b[1]
#define command   b[2]
#define command_1 b[3]
#define TRFreset    0
#define TRFSYNC     2
#define TRFSYNCO    1
#define TRFUNO      3
#define TRFZERO     4

#define LOW_TO       17       // longest low  Te
#define SHORT_HEAD   70      //
#define LONG_HEAD    157         //
volatile bit RFFull;            // buffer full
volatile bit RFBit;             // sampled RF signal
volatile bit fall_down;
#define NBIT       32




__interrupt power_check(void)
{

if(FTC0IEN&&FTC0IRQ){
           
               FTC0IRQ=0;
   
                    if (RFFull)return;                 // avoid overrun
                     
         if(RFBit != RFIn){ RFBit= RFIn;if(RFBit==0)fall_down=1;}
      if(RFcount>200)RFcount=200;
      else RFcount++;
            
     
           }
}


void rtx(void)
{
fall_down=0;
                     if(RFstate==TRFUNO){ if ( RFcount >= LOW_TO) { RFstate = TRFSYNC; RFcount = 0;}
                           else{ b[Bptr] >>= 1;
                                                if ( RFcount >= 10)b[Bptr]|=0x80;
                                                 RFcount = 0;
               
                                               if ( ( ++BitCount & 7) == 0) Bptr++;
                              
                                               if (BitCount == NBIT){RFstate = TRFreset; RFFull = 1; }
         
                   }  
                                             
                             }
      else if(RFstate==TRFSYNC){
      
                                              if ( ( RFcount < SHORT_HEAD)  || ( RFcount >= LONG_HEAD)){ RFstate=TRFreset;RFcount = 0;}
           
                                               else { RFcount =0; RFstate= TRFUNO;}                                                           
                                 }
   
      else {RFstate = TRFSYNC;  RFcount = 0;  Bptr = 0;  BitCount = 0;     }      
                        
                          
}                    

定时器为1/3采样频率0.56MS
我的问题是红外接收一开始没问题接收正常
怎么反复按键反复搞后一会就像死机了不好使了
手动给复位才能用但实际没死机别的功能还能用
我找了一天了
没找到毛病在哪
波形在这http://hi.baidu.com/c51_mcu/blog/item/776fef2b7a2a26315343c1a5.html
谢谢了

相关帖子

沙发
badbird1234|  楼主 | 2009-8-6 15:25 | 只看该作者
#define RFIn FP15

使用特权

评论回复
板凳
badbird1234|  楼主 | 2009-8-6 16:56 | 只看该作者

那为兄弟搞过帮帮忙

使用特权

评论回复
地板
古道热肠| | 2009-8-6 17:13 | 只看该作者
做些冗余代码再试试,尤其要注意状态的切换,按您的现象来看,似乎处于某种状态无法跳出.

使用特权

评论回复
5
badbird1234|  楼主 | 2009-8-6 17:15 | 只看该作者
我TMD 本人
郁闷死了
就一个变量的事
改后
运行了半小时没出现问题
修改if(RFcount>200)RFcount=200;
为if(RFcount>200)RFstate = TRFreset;

使用特权

评论回复
6
badbird1234|  楼主 | 2009-8-6 17:20 | 只看该作者
谢4楼
我也是这么想的
把所有的变量都查看过了
发现在TRFSYNC和TRFreset跳
我就怀疑是硬件干扰
拿示波器看下没有干扰
我就想人为在加个复位过程
加后发现好了
谢谢了

使用特权

评论回复
7
badbird1234|  楼主 | 2009-8-6 17:24 | 只看该作者
怎么把骂人的话翻译成了  本人
斑竹你太有才了

使用特权

评论回复
8
古道热肠| | 2009-8-6 17:28 | 只看该作者
俺做串口接收时,超时都转空闲态,不然有时也会出现假机,

使用特权

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

本版积分规则

38

主题

254

帖子

0

粉丝