红外通信误码率奇高如何解决? 我做的红外遥控老是误码,请大家帮帮忙,看看怎么回事!不尽感激!

遥控如图。就攒这点分了,请笑纳!
起初改的红外遥控1602显示,第一按下遥控的时候,用户码会出现错误情况,稳定时用户码是01,开始会先出个00(按了7,再按其它就会这样),此外,这用户码在这程序里好像没多大意义,换了三个遥控都是01-ff
关键是:后面弄成头文件的就问题大了!数值传递是个问题,结果直接就不对了!
如果有测试好的欢迎上传,非常感谢!
我写的上传至我的空间!http://hi.baidu.com/styp88101/blog
我的QQ:315557950,全天在线
具体说说:后面弄成头文件,数值传递不对这个问题

原因很多,最常见的是:干扰、接地不好或不对、以及双方定时不一致(例如晶振不准)等等。
你可以从以下几方面试一试:
1、减小波特率
2、用屏蔽线传输信号(屏蔽层不要当地线用,要单点接地)
3、改用485/422
4、检查地线连接,不要形成大的环路,强弱电分开等等
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-23
你的解码原理不好,太繁索了追问

有没有好的给我参考下!要是能带连续发送方式解码就更好了!谢谢!

追答

我的百度空间主页里面有,也是NCE编码方式,引导码(9ms+4.5ms)+32位编码:

Proteus红外遥控仿真电路+发射程序+接收程序(含附件下载)。

还有,问问,什么是“连续发送方式解码”,不太理解???

字数限制,下面是接收解码程序部分,完整的在我空间主页:

/********************** 外部中断函数************************/
void exint0() interrupt 0
{
uint cnt=0;
uchar i;
EX0 = 0;

if(IR) {EX0=1;return;} //高电平,错误,返回
while(!IR) cnt++; //记录引导码时间
if(cnt 400){EX0=1;return;} //4.5ms检测,防卡死超时保护
if(cnt 200){EX0=1;return;} //防卡死超时保护
N[i/8] >>= 1;
if(cnt>60) N[i/8] |= 0x80; //分辨0和1
}

if(N[0] == ~N[1] && N[2] == ~N[3]) //校验用户码正反码,操作码正反码
{
X1 = N[0]/16; //更新数码管显示数据
X2 = N[0]%16;
X3 = N[2]/16;
X4 = N[2]%16;
}

EX0 = 1;
}

本回答被提问者采纳
相似回答