威廉希尔官方网站 设计william hill官网
直播中

mhx321

10年用户 352经验值
擅长:电源/新能源 嵌入式技术 模拟技术 光电显示 控制/MCU RF/无线
私信 关注
[问答]

315M无线学习型遥控问题

最近在做一个315M的无线学习型遥控,功能是能学习无线遥控器的按键功能,学习好后,发射出去可以实现所学遥控器的功能控制设备。无线接收我用的是外部中断来接收,但是程序写入单片机,运行时,一按学习键,马上就中断,我把超外差接收模块去掉按学习键时不会立即运行中断,接上就不正常,马上就中断,怀疑是不是干扰问题,请大神给看看如何解决?

/*********无线数据接收程序**************************/
void intt0(void) interrupt 0   //外部中断0服务程序
{
        EX0=0;
//        IT0=0;
        EA=0;

if(R_315M==0)
{
Delay1ms(100);    //延时程序
if(R_315M==1)
{
clear_buf();  //数据缓存清0
goto receive_end;
}

        receive_cnt=0;
        F_dat[receive_cnt]=0x0011; //315M标志  自定
        while(receive_cnt<250)
        {
                receive_cnt++;
                TR0=1;//启动定时器0
                while(R_315M==0);  //低电平
                TR0=0;
                F_dat[receive_cnt]=TH0*256+TL0;  //脉宽宽度测量
                receive_cnt++;
                TH0=0;
                TL0=0;
                TF0=0;
                TR0=1;
                while(R_315M==1)
                {
                        if(TF0==1)
                        {
                                goto receive_end;
                        }
                }
                TR0=0;
                F_dat[receive_cnt]=TH0*256+TL0;  //脉宽宽度测量
                TH0=0;
                TL0=0;
                TF0=0;
        }
}
        receive_end:
            if(F_dat[5]>=50)         //消除干扰
                {
                    TR0=0;
                    receive_OK=1;  //接收完毕标志
                        F_dat[receive_cnt]=0x0000;
                        receive_cnt=0;
                        TH0=0;
                        TL0=0;
                        TF0=0;
                }
                else
                {
                        clear_buf();  //数据缓存清0
                        receive_cnt=0;
                        TR0=0;
                        TH0=0;
                        TL0=0;
                        TF0=0;
                        EX0=1;
        //                IT0=1;
                        EA=1;
                }               
}
/*******************************************************/

回帖(9)

吴明467

2015-10-29 05:19:33
PIN_INT 低电平触发 肯定会中断 问题是你判别不了超外差模块发来的的数据流
举报

mhx321

2015-10-30 02:17:43
引用: 吴明467 发表于 2015-10-29 05:19
PIN_INT 低电平触发 肯定会中断 问题是你判别不了超外差模块发来的的数据流

无线接收模块的输出端,我接了个三极管反相了,所以接收模块是低电平,单片机是高电平这样子的;我是这样想的,不知对不对,无线模块在没有接收到信号时,一直是低电平,当接收到信号时,变成高电平,经三极管反相后,单片机端就变成低电平;反相是可以了,就是单片机老是一进入学习就中断。。。。。!
举报

coderTao

2015-10-31 10:07:24
你这个肯定是加了PT2272 PT2262,没有什么意思,还不如纯模拟威廉希尔官方网站
举报

mhx321

2015-11-3 21:25:24
引用: coderTao 发表于 2015-10-31 10:07
你这个肯定是加了PT2272 PT2262,没有什么意思,还不如纯模拟威廉希尔官方网站

我没有加PT2262和PT2272的,我是想要单片机来模拟的!如果要加,我直接用上就行,何必加单片机麻烦。我想做个万解码的无线接收发射模块,要用单片机做!
举报

zeroleo12345

2016-2-26 10:53:57
楼主, 最近我也研究这个, 可以告诉下现在是怎么实现的吗
举报

mhx321

2016-3-2 16:36:17
引用: zeroleo12345 发表于 2016-2-26 10:53
楼主, 最近我也研究这个, 可以告诉下现在是怎么实现的吗

最近有其他项目,太忙,还没有时间研究呢,无线的干扰信号比较大,程序里要想办法把干扰信号分辨出来,剩下的跟红外学习的是一样的,我也没有弄成功
举报

zgp1514

2016-3-17 01:04:08
以下为C程序:

#include
#include

#define uchar unsigned char
#define uint unsigned int

***it TX_STATUS=P1^0;//定义P1.0口为发射状态指示
***it PA_CNTL=P1^1;//定义P1.1口为功放电源控制信号
***it data_out=P1^2;//定义P1.2口为数据输出

//初始化程序
void init()
{
        TX_STATUS=0;//初始化,灭发射状态指示灯
        PA_CNTL=0;//初始化,关功放电源使能
        data_out=0;//初始化,关数据输出
}
//初始化程序


//延时程序
void delayms(uint x)
{
        uchar i;
        while(x--)
        {
                for(i=0;i<120;i++);
        }
}
//延时程序


//功放电源开启
void PA_POWER_ON()
{
        PA_CNTL=1;//开功放电源
}
//功放电源开启



//功放电源关闭
void PA_POWER_OFF()
{
        PA_CNTL=0;//关功放电源
}
//功放电源关闭



//发射状态指示程序
void TX_LED()
{
        TX_STATUS=1;//点亮发射指示灯
        delayms(150);//延时150ms
        TX_STATUS=0;//灭发射指示灯
}
//发射状态指示程序



//产生1010        000000        0波形
void wave01()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        delayms(150);//第7位

        delayms(150);//第8位

        delayms(150);//第9位

        delayms(150);//第10位

        delayms(150);//第11位
}





//产生1010        000001        1波形
void wave02()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        delayms(150);//第7位

        delayms(150);//第8位

        delayms(150);//第9位

        data_out=1;
        delayms(150);//第10位

        delayms(150);//第11位
}



//产生1010        000010        1波形
void wave03()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        delayms(150);//第7位

        delayms(150);//第8位

        data_out=1;
        delayms(150);//第9位

        data_out=0;
        delayms(150);//第10位

        data_out=1;
        delayms(150);//第11位
}



//产生1010        000011        0波形
void wave04()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        delayms(150);//第7位

        delayms(150);//第8位

        data_out=1;
        delayms(150);//第9位

        delayms(150);//第10位

        data_out=0;
        delayms(150);//第11位
}



//产生1010        000100        1波形
void wave05()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        delayms(150);//第7位

        data_out=1;
        delayms(150);//第8位

        data_out=0;
        delayms(150);//第9位

        delayms(150);//第10位

        data_out=1;
        delayms(150);//第11位
}



//产生1010        000101        0波形
void wave06()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        delayms(150);//第7位

        data_out=1;
        delayms(150);//第8位

        data_out=0;
        delayms(150);//第9位
        
        data_out=1;
        delayms(150);//第10位

        data_out=0;
        delayms(150);//第11位
}




//产生1010        000110        0波形
void wave07()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        delayms(150);//第7位

        data_out=1;
        delayms(150);//第8位

        delayms(150);//第9位
        
        data_out=0;
        delayms(150);//第10位

        delayms(150);//第11位
}


//产生1010        000111        1波形
void wave08()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        delayms(150);//第7位

        data_out=1;
        delayms(150);//第8位

        delayms(150);//第9位
        
        delayms(150);//第10位

        delayms(150);//第11位
}



//产生1010        001000        1波形
void wave09()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        data_out=1;
        delayms(150);//第7位

        data_out=0;
        delayms(150);//第8位

        delayms(150);//第9位
        
        delayms(150);//第10位

        data_out=1;
        delayms(150);//第11位
}


//产生1010        001001        0波形
void wave10()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        data_out=1;
        delayms(150);//第7位

        data_out=0;
        delayms(150);//第8位

        delayms(150);//第9位
        
        data_out=1;
        delayms(150);//第10位

        data_out=0;
        delayms(150);//第11位
}



//产生1010        001010        0波形
void wave11()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        data_out=1;
        delayms(150);//第7位

        data_out=0;
        delayms(150);//第8位

        data_out=1;
        delayms(150);//第9位
        
        data_out=0;
        delayms(150);//第10位

        delayms(150);//第11位
}


//产生1010        001011        1波形
void wave12()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        data_out=1;
        delayms(150);//第7位

        data_out=0;
        delayms(150);//第8位

        data_out=1;
        delayms(150);//第9位
        
        delayms(150);//第10位

        delayms(150);//第11位
}



//产生1010        001100        0波形
void wave13()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        data_out=1;
        delayms(150);//第7位

        delayms(150);//第8位

        data_out=0;
        delayms(150);//第9位
        
        delayms(150);//第10位

        delayms(150);//第11位
}


//产生1010        001101        1波形
void wave14()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        data_out=1;
        delayms(150);//第7位

        delayms(150);//第8位

        data_out=0;
        delayms(150);//第9位
        
        data_out=1;
        delayms(150);//第10位

        delayms(150);//第11位
}


//产生1010        001110        1波形
void wave15()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        data_out=1;
        delayms(150);//第7位

        delayms(150);//第8位

        delayms(150);//第9位
        
        data_out=0;
        delayms(150);//第10位

        data_out=1;
        delayms(150);//第11位
}



//产生1010        001111        0波形
void wave16()
{
        data_out=1;
        delayms(150);//第1位

        data_out=0;
        delayms(150);//第2位

        data_out=1;
        delayms(150);//第3位

        data_out=0;
        delayms(150);//第4位

        delayms(150);//第5位

        delayms(150);//第6位

        data_out=1;
        delayms(150);//第7位

        delayms(150);//第8位

        delayms(150);//第9位
        
        delayms(150);//第10位

        data_out=0;
        delayms(150);//第11位
}


void key_scan()
{
                uchar x,y,z;
        P2=0x0f;
        x=P2&0x0f;
        P2=0xf0;
        y=P2&0xf0;
        z=x|y;
        
        switch(z)
        {
        case 0xee:PA_POWER_ON();wave01();PA_POWER_OFF();TX_LED();break;//按键01,输出波形01
        case 0xde:PA_POWER_ON();wave02();PA_POWER_OFF();TX_LED();break;//按键02,输出波形02
        case 0xbe:PA_POWER_ON();wave03();PA_POWER_OFF();TX_LED();break;//按键03,输出波形03
        case 0x7e:PA_POWER_ON();wave04();PA_POWER_OFF();TX_LED();break;//按键04,输出波形04
        case 0xed:PA_POWER_ON();wave05();PA_POWER_OFF();TX_LED();break;//按键05,输出波形05
        case 0xdd:PA_POWER_ON();wave06();PA_POWER_OFF();TX_LED();break;//按键06,输出波形06
        case 0xbd:PA_POWER_ON();wave07();PA_POWER_OFF();TX_LED();break;//按键07,输出波形07
        case 0x7d:PA_POWER_ON();wave08();PA_POWER_OFF();TX_LED();break;//按键08,输出波形08
        case 0xeb:PA_POWER_ON();wave09();PA_POWER_OFF();TX_LED();break;//按键09,输出波形09
        case 0xdb:PA_POWER_ON();wave10();PA_POWER_OFF();TX_LED();break;//按键10,输出波形10
        case 0xbb:PA_POWER_ON();wave11();PA_POWER_OFF();TX_LED();break;//按键11,输出波形11
        case 0x7b:PA_POWER_ON();wave12();PA_POWER_OFF();TX_LED();break;//按键12,输出波形12
        case 0xe7:PA_POWER_ON();wave13();PA_POWER_OFF();TX_LED();break;//按键13,输出波形13
        case 0xd7:PA_POWER_ON();wave14();PA_POWER_OFF();TX_LED();break;//按键14,输出波形14
        case 0xb7:PA_POWER_ON();wave15();PA_POWER_OFF();TX_LED();break;//按键15,输出波形15
        case 0x77:PA_POWER_ON();wave16();PA_POWER_OFF();TX_LED();break;//按键16,输出波形16
        default:;
        }
}               
        
        
        

void main()
{        init();//上电初始化
        key_scan();
}
举报

爱馨无限

2016-12-11 18:50:02
请问现在成功了吗?这是单片机接受部分的程序吧?我也好想
举报

爱馨无限

2016-12-11 18:51:43
好想有人一起学习,自学好辛苦!多谢大神分享的程序和经验!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分