⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pt2262.decoder.c

📁 PT2262解码C程序,这样应该就够了吧
💻 C
字号:
PT2262 解码程序-C语言(含实测波形图) 
[ 2007-3-18 15:50:00 | By: 123mcu ] 
  
图为我实测的波形图,PT2262一次发射4组相同的编码,每组码之间用同步码分开,考虑到用A4纸打印,每行只有一组码,共四行,第五行是把同步码单独切出来,方便看。


/******************************************************************************************

        项目名称:       意大利无线门铃
        程序功能:       PT2262解码程序
        晶    振:       4 MHz
        作    者:      123mcu  
        电子邮箱:      123mcu@163.com
        QQ      :       104076687
        日    期:       2007-03-19
        版    本:       V1.0


        
        PT2262震荡电阻为4.7M,如电阻不一样需改一下程序时间
        本程序是用来做无线收发所用,如果用于红外发光管请将震荡电阻改为430K-470K
        当然程序里的时间也要改哦
        我的连接方法是将PT2262的数据输出端经过三极管反向后直接接到AT89C2051的P3.2,
        PT2262与AT89C2051同一个5V电源
        PT2262是两个脉冲代表一位,我解码是将每个脉冲当成一位,宽的为1,窄的为0,
        这样就是24位,解码结果放在receive[3]里
        本程序刚刚写完,用仿真器试解码结果没有问题,还没有接高频发射线路试,
        先把它贴上来再说。
        
*******************************************************************************/

#i nclude <reg51.h>

sbit RemPin  =   P3^2  ; 

unsigned char receive[3];

void RemIn(void) interrupt 0 using 1
{
    unsigned char i,j;
    unsigned int temp;

 EA=0;
 TH0=0;
   TL0=0; 
   while (!RemPin); //等待高电平
    TR0=1;
    while (RemPin)  //等待低电平
        if (TF0==1)  goto RemExit;  //超时就退出;
    TR0=0;
    temp=TH0;
    temp=(temp<<8)+TL0;
    if (temp>6000 || temp<4000)   //判断同步码的宽度
    {
        temp=TH0;
  goto RemExit;
    }
//同步码检测成功
    for (i=0; i<3; i++) //解 3*8=24 位码 
    for (j=0; j<8; j++)
    {
        while (!RemPin);  //等待高电平
        TH0=0;
    TL0=0; 
  TR0=1;
        while (RemPin)  //等待低电平
            if (TF0==1) goto RemExit; //超时就退出
  TR0=0;
        temp=TH0;
        temp=((temp<<8)+TL0);
  //      /*
        if (temp>400 && temp<600)
        {
            receive[i]=receive[i]<<1;
            receive[i]=receive[i]+1; //保存 1
        }
        else if (temp>100 && temp<234)
            {
                receive[i]=receive[i]<<1;   //保存0
            }
            else goto RemExit;
    }
    temp=0;//在这里设置一个断点,运行到这里后看看receive里的三个字节数据就是解码的结果
    RemExit:
    {
        TR0=0;
  EA=1;
        RemPin=1;
        TF0=0;
        return; 
    } 
}

///*
main()
{
    RemPin=1;
    EA=1;
    IT0=1;  //设定INT0的触发方式为脉冲负边沿触发
    EX0=1;  //打开INT0中断请求
    TMOD=0x01;
    while (1);  
 //RemPin=1;
}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -