最近在做一个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;
}
}
/*******************************************************/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#include<stdio.h>
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit TX_STATUS=P1^0;//定义P1.0口为发射状态指示
sbit PA_CNTL=P1^1;//定义P1.1口为功放电源控制信号
sbit 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();
}
一周热门 更多>