最近在做一个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;
}
}
/*******************************************************/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
无线接收模块的输出端,我接了个三极管反相了,所以接收模块是低电平,单片机是高电平这样子的;我是这样想的,不知对不对,无线模块在没有接收到信号时,一直是低电平,当接收到信号时,变成高电平,经三极管反相后,单片机端就变成低电平;反相是可以了,就是单片机老是一进入学习就中断。。。。。!
最近有其他项目,太忙,还没有时间研究呢,无线的干扰信号比较大,程序里要想办法把干扰信号分辨出来,剩下的跟红外学习的是一样的,我也没有弄成功
一周热门 更多>