微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于PT2262解码问题

关于PT2262解码问题

时间:10-02 整理:3721RD 点击:
我用别人好的PT2262加315的遥控器 再用别人现程SYN400R做的315接收模块 想用80C51解码 在网上找了二个程序  试了都不行  接收模块我是这样连接的接收模块GND接地 5V接电源 OUT接P3。2口  硬件我都试个没问题  给我看一下程序那里要修的 我还另外加了如图所示的电路也不行 请高手看是那里的问题
谢谢
// 自适应频率的2262解码代码很感兴趣,经试验完全可以用谢谢LZ的好资料
//让PT2262无线解码不再神秘,让菜鸟们都能做解码程序
//自适应频率的2262解码代码 晶振11.0592到22.1184MHZ
#include"AT89x52.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit shou = P3^2; //外部中断 1
//=========================================================================
void InitTimer0(void)
{
  TMOD = 0x11;    //定时器1,定时器0用模式1 16位计时用,12T
  EA = 1;
  ET0 = 1;
  ET1=1;
}
//========================================================================
void main(void)
{
  InitTimer0();
  EX0=1;
  while(1);
}
//========================================================================
void ex0(void) interrupt 0          //外部中断        1
{
  bit err=0;
  uchar i,tl,th,ma1,ma2,ma3;
  uchar TimeCount;
  uint l,m;
  EX0=0;  //关闭外部中断
  TR1=1; //起动定时器
  i=0;
  if(TimeCount>0)//当按键按下释放后该值不在赋值就同通过递减直到该值等于0  ?
   {
    TimeCount--;//等于0后表示按键释放          ?
   }
  while(shou==0); //等待第一低电平
  while(i<24)
   {
    while(shou==0);        //等待高电平到来
    tl=TL1;
    th=TH1;
    TH1=TL1=0;         //记录低电平长度并初始化高电平头
    l=th;
    l=((l<<8)+tl);
    if(i==0)         //处理低电平
     {
      if(l>2360)      
       {        //确认是引导头
        m=l/31;
       }
      else         //不符合规则(出错)
       {
        i=0;
        TR1=0;
        TH1=TL1=0;
        err=1;
        break;
       }
     }
    else
     {
     if(((l>(m-(m/4)))&&(l<(m+(m/4))))||((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))));
     else
      {
       i=0;
       TR1=0;
       TH1=TL1=0;
       err=1;
       break;
      }        
     }
    while(shou==1);      //等待低电平到来
    th=TH1;
    tl=TL1;
    TH1=TL1=0;
    l=th;
    l=((l<<8)+tl);
    //  if((l>460)&&(l<760))    //短为0  短610
    if(((l>(m-(m/4)))&&(l<(m+(m/4)))))
     {
      i++;
      ma1<<=1; //纠正了LZ的高低位相反问题
     }
    //  else if((l>1577)&&(l<1977))  //长为1  长1777
    else if(((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))))
     {
      i++;
      ma1<<=1; //纠正了LZ的高低位相反问题
      ma1+=1;  //纠正了LZ的高低位相反问题
     }
    else        //不符合规则出错
     {
      i=0;
      TR1=0;
      TH1=TL1=0;
      err=1;
      break;
     }
    if(i==8)
     {
      ma3=ma1;
      //SBUF=ma3;
      //P1=ma3;
     }
    if(i==16)
     {
      ma2=ma1;
      //SBUF=ma2;
      //P1=ma2;
     }
    if(i==24)////解t==0)//为0表示是新的一次按下对其进行处理,如过该值大于0表示已经按下不在处理
       {  
        ACC=ma1;
        if(ACC==0xC0)
        //P1=0xef;
        P1_0=~P1_0;
        if(ACC==0x30)
        //P1=0xdf;
        P1_1=~P1_1;
        if(ACC==0x0c)
        //P1=0xbf;
        P1_2=~P1_2;
        if(ACC==0x03)
        //P0=0x7f;
        P1_3=~P1_3;
       }
      TimeCount=30;//防止按键没放开直在取反,保证按1次只做1次处理
     }
   }
  TR1=0;
  TH1=0;
  TL1=0;
  EX0=1;
}
码成功结束
     {
      if(TimeCoun


家里的电瓶车遥控器坏了,想配个新的,不过这东西拆不开了,就想把地址码读出来,就在自己单片机板上加了个315MHz的接收模块,解码成功后却发现另一个遥控器不正常就看了下结果震荡电阻不一样,于是在修改前写了个频率自适应的,刚写的,还热着呢,不过没修改完善,自适应解码成功率只有90%左右。
void inittimer1(void)
{
TR1=0;
TH1=TL1=0;
}
void InitTimer0(void)
{
TMOD = 0x11;    //定时器1,定时器0用模式1 16位计时用,12T
//    TL0 = 0xf9;
//    TH0 = 0x4b;     //定时25ms,22.1184MHz,12T模式
    EA = 1;
    ET0 = 1;
ET1=1;
}
void main(void)
{
InitTimer0();
EX0=1;
while(1);
}
void ex0(void) interrupt 0
{
uchar err=0;
uchar i,tl,th;
uchar ma1,ma2,ma3;
uint l,m;
EX0=0;
TR1=1;
i=0;
while(shou==0);
while(i<24)
{
  while(shou==0);        //等待高电平到来
  tl=TL1;
  th=TH1;
  TH1=TL1=0;         //记录低电平长度并初始化高电平头
  l=th;
  l=((l<<8)+tl);
  if(i==0)         //处理低电平
  {           //处理的是第一次(即引导头)
//   if((l>16259)&&(l<18259))  //17259 长度判断是否符合
   if(l>2360)      
   {        //确认是引导头
    m=l/32;
   }
   else         //不符合规则(出错)
   {
    i=0;
    TR1=0;
    TH1=TL1=0;
    err=1;
    break;
   }
  }
  else
  {           //短555 长1666
//   if(((l>405)&&(l<705))||((l>1466)&&(l<1866)));
   if(((l>(m-(m/4)))&&(l<(m+(m/4))))||((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))));
   else
   {
    i=0;
    TR1=0;
    TH1=TL1=0;
    err=1;
    break;
   }        
  }
  while(shou==1);      //等待低电平到来
  th=TH1;
  tl=TL1;
  TH1=TL1=0;
  l=th;
  l=((l<<8)+tl);
//  if((l>460)&&(l<760))    //短为0  短610
  if(((l>(m-(m/4)))&&(l<(m+(m/4)))))
  {
   i++;
   ma1>>=1;
  }
//  else if((l>1577)&&(l<1977))  //长为1  长1777
  else if(((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))))
  {
   i++;
   ma1>>=1;
   ma1+=128;
  }
  else        //不符合规则出错
  {
   i=0;
   TR1=0;
   TH1=TL1=0;
   err=1;
   break;
  }
  if(i==8)
  {
   ma3=ma1;
   SBUF=ma3;
  }
  if(i==16)
  {
   ma2=ma1;
   SBUF=ma2;
  }
  if(i==24)////解码成功结束
  {
   led=!led;
   if(ma1==0x03)ma1=1;
   if(ma1==0x0c)ma1=2;
   if(ma1==0x30)ma1=3;
   if(ma1==0xc0)ma1=4;
   SBUF=ma1;
   Delay(255);
   Delay(255);
   Delay(255);
   Delay(255);
   
  }
}
TR1=0;
TH1=0;
TL1=0;
EX0=1;
/* TR1=0;
th=TH1;
tl=TL1;
TH1=TL1=0
TR1=1;
time1_us=1;
tim_t=th;
tim_t<<=8;
tim_t+=tl;
if(        */
}

这个不错!呵呵!支持一下!单片机论坛www.arm8.net

这个不错!呵呵!支持一下!单片机论坛

315接收模块输出直接P3。2口吗 有没有什么地方需要改动的?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top