搜索
bottom↓
回复: 6

无线软解码进

[复制链接]

出0入0汤圆

发表于 2011-9-27 22:58:29 | 显示全部楼层 |阅读模式
void eint0(void) interrupt 0//外部中断0 中断子程序  
{  
static unsigned int tempaddr;//接收地址缓存  
static unsigned int tempkey;//接收数据缓存  
unsigned int timecnt;     //时间  
timecnt=(TH0*256+TL0)*1.085;  
TH0=0;  
TL0=0;        // 在外部中断中对定时器清零,重新计数   

if((timecnt>80)&&(timecnt<600)&&(cntint<24))  
{  
if(cntint<16)//接收地址码  
{  
tempaddr=tempaddr<<1;//将接收的到最低位移到最高位  
if(timecnt>250)//210为宽脉冲与低脉冲界线,当振荡电阻为1M时,窄脉冲为110uS,宽脉冲为320uS  
{  
tempaddr|=1;//宽脉冲为1  
}  
cntint++;//中断次数加1  
}  
else if(cntint<24)//接收数据码  
{  
tempkey=tempkey<<1;  
if(timecnt<250)  
{  
tempkey|=1;  
}  
cntint++;  
}  
else//cntint大于24也就是中断了25次时,关闭外部中断0,等待同步码  
{  
TMOD&=0xf0;//设定时器0为定时方式  
TMOD|=0x01;  
TH0=0xf1;  
TL0=0x9a;  
cntint=0;  
EX0=0;//关外部中断0  
addr=tempaddr;  
key=tempkey;  
tempaddr=0;  
tempkey=0;  
}  
}  
else  
{  
TMOD&=0xf0;//设定时器0为定时方式  
TMOD|=0x01;  
TH0=0xf1;  
TL0=0x9a;  
cntint=0;  
EX0=0;//关外部中断0  
tempaddr=0;  
tempkey=0;  
}  

}  
void timer0(void) interrupt 1//定时器0中断,只有初始化时,空闲时和同步码到来时才中断  ??
{  
//TMOD&=0xf0;//将定时器0的工作方式设为门控定时,用以检测脉宽。  
TMOD|=0x09;  
cntint=0;//外部中断0中断次数设为0  
TH0=0;//设定时器0定时初值为0  
TL0=0;  
EX0=1;//允许外部中断0  
IE0=0;//清除外部中断0标志  
}

这是模拟PT2272解码的程序段
请问这个程序是如何确定同步码的?if((timecnt>80)&&(timecnt<600)&&(cntint<24)) 是这句吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-6-16 17:03:02 | 显示全部楼层
你这个是2262的吗 老兄 程序看起来挺精简的

出0入0汤圆

发表于 2012-6-21 14:26:52 | 显示全部楼层
很精简呀,收藏了

出0入0汤圆

发表于 2012-6-21 14:50:36 | 显示全部楼层
看来不像这句。
接收到完整一帧数据后关闭了外部中断,不如不打开应该是收不到数据的。
你应该看看程序的其它地方在哪里重新打开了这个中断口,应该就是那里接收同步信号的。
确定收到同步信号后才进入这一段去接收数据。

出0入0汤圆

发表于 2012-6-21 17:12:18 | 显示全部楼层
额看看~~~~~

出0入0汤圆

发表于 2012-6-21 17:29:43 | 显示全部楼层
以前用在STC芯片上的,对遥控器无要求
程序没整理有点乱,将就看吧

#include <config.h>


bit PT2272(uint HDa,uint LDa)
{static uchar Id;
static uint SMin,SMax,LMin,LMax,DMin,DMax;
static uint32 ChDa;
if(!Head)
   {if(Up)
          {DMin=HDa*29;//<<5-IntDa;
           DMax=HDa*33;//<<5+UpDa;
           SMin =HDa-Min;
           SMax =HDa+Max;
           LMin =(HDa<<1)+HDa-Min;  //UpDa*3-Min;
           LMax =(HDa<<1)+HDa+Max;
          }
        else
          {if(Down)
                 {if(DMin<LDa&&DMax>LDa)
                         {Head=1;
                          Id=0;
                          RfDa=0;
                         }
                  else
                     Head=0;
                 }
          }
        }
  else
        {if(Up)
           {if(HDa>SMin&&HDa<SMax)                                      //短高脉冲
                  {RfDa+=0x01;
                   RfDa<<=1;
                   Id++;
                  }
                else
                  {if(HDa>LMin&&HDa<LMax)                                   //长高脉冲
                         {RfDa+=0x00;
                          RfDa<<=1;
                          Id++;
                         }
                   else
                         {Head=0;
                          return(0);
                         }
                   }
           }
         else
           {if(Down)
                  {if(!(LDa>SMin||LDa>LMax))
                      {Head=0;
                           return(0);
                          }
                  }
           }
         if(Id>23)
           {if(ChDa==RfDa)
              {Head=0;
                   ChDa=0;
                   Id=0;
                   return(1);
                  }
            else
                  {ChDa=RfDa;  
                   Head=0;
                   RfDa=0;
                   Id=0;
                   return(0);
                  }
           }
        }
return(0);       
}

/********************************信号中断********************************************/
void RFIn() interrupt 7
{if(CCF1)
   {CR=0;
    CL=CH=0;
        CR=1;
    if(RFin)
      {((uchar *)&DownDa)[0]=CCAP1H;                        //低电平宽度
       ((uchar *)&DownDa)[1]=CCAP1L;
           Down=1;
      }
    else
      {((uchar *)&UpDa)[0]=CCAP1H;                    //高电平宽度
       ((uchar *)&UpDa)[1]=CCAP1L;
           Up=1;
           Down=0;
      }
        CCAP1L=CCAP1H=0;
   }
CF=CCF0=CCF1=0;
}          

出0入0汤圆

发表于 2012-6-21 22:21:11 | 显示全部楼层
interrupt 7 ? 中断7?有这个么?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表