新人一枚,研究红外有一阵子了,从刚开始的什么都不懂,到现在了解了皮毛。现在遇到问题卡住了,特来求助,希望大神不吝惜赐教!
先说一下我现在的状况:首先我想实现红外通信。有两个小模块红外发射和接收,这两个模块都是很简单的那种,没有电路的38K载波信号,得通过软件实现。我用的是51单片机。接收的程序我用的是买来开发板的程序,现在大概能看懂,但是自己还没尝试写过解码程序。另外自己写了个红外发射的程序原本觉得应该是个很简单就能完成的程序,可没想到运行起来后接收不到。后来改了改接收的程序后能接收到了,可一直显示一个固定值(无论我怎么改要发射的数据)。
再来说下我的程序:接收程序解码部分的大概思路是通过判断两个下降沿的时间间隔来确定0、1。同时将解码出来的数据通过串口打印出来,就是赋值给SBUF,然后打印出来。
发射程序我用的是TO中断来实现38K的载波信号,初值给的是FFF2,晶振12M,这样就是13US中断一次,每次我从新赋值后会执行a=~a和counter++的命令,这样就产生了占空比1:2的38K信号。发送数据时执行TX=y&a(TX就是发送端,y是要发送的数据0还是1),counter用来计时,而发送高低电平的时间则用counter_end(每次都会从新赋值)来限制。通过if(counter<counter_end)语句来控制发送数据0、1的时间。
现在遇到的问题大概有几个:
1、红外接收程序中是四个打印命令可下载后实际操作每次只会打印出三个字符。而如果屏蔽掉一个打印命令后在操作打印的数据会出错,对于串口打印不是很懂?
2、红外发射部分,我设置FFF2这样可以么,这样是不是精度不高,太过频繁的进入中断会有什么不良影响么?个人认为接收不到是因为时间控制的不是很准确,大家用软件的时候都是怎么控制0,1发送的时间的?
3、最后想问下用硬件大家都怎么搭建38K的载波信号,除了555还有什么?
附:我尝试加大接收程序中的接收时间宽度也没有有达到效果。现在还不太会传文件,过一阵子我把整个程序发上来大家帮忙看看。 |