通过红外接口实现单片机之间的通信
扫描二维码
随时随地手机看文章
红外线是波长在750nm~lmm的电磁波,它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。红外通信一般采用红外波段内的近红外线,波长在0.75μm~25μm,目前无线电波和微波已被广泛地应用在长距离的无线通信之中。但由于红外线的波长较短,对障碍物的衍射能力差,所以更适合应用在需要短距离无线通信的场合,进行点对点的直线数据传输,从应用领域来看,红外通信主要应用于遥控和数据通信这两方面。红外通信口一般数据传输速率可达2400bit/s~115.2kbit/s,有些甚至可达4Mbit/s。
本设计实现单片机之间通过红外接口进行通信。通信双方约定发送方为甲机,接收方为乙机。甲机向乙机发送一组数据,如果乙机接收到的数据正确,就向甲机发送0x55;如果乙机接收到的数据不正确,就向甲机发送0xFF,甲收方收到0xFF后重传数据。
红外通信技术主要是利用红外发射器和红外接收器来完成信号的无线收发工作。在发射端,对发送的数字信号经过适当的调制后,送入电光变换电路、驱动红外发光二极管发射红外光脉冲;在接收端,红外接收器对收到的红外信号进行光电逆变换,并进行相应的解调后、恢复出原信号,如下图所示。
红外通信的硬件电路由发射电路和接收电路两个部分组成。如下图所示,图中的上半部分为发射部分电路,下半部分为接收部分电路。当然作为通信的另一方,也有类似的一组收发电路。
由于系统中采用的红外线接收模块TSOP1838的光响应频率为38kHz,为降低数据交换的误码率,红外线发射部分的载波频率也应调整为38kHz。该载波信号由单片机89C51的内部定时器产生,载波信号从Pl.0引脚输出经74HC08与门对发送数据输出端TXD调制后,经过三极管T1放大,由发射管TSAL6200发出脉动的红外光,其发射功率可通过调整其限流电阻R3来改变。
红外线接收电路为了改善接收信号的波形,将其输出信号经过两级反相整形。本接收电路用一个与门的目的是如果系统还有其他的通信接口,那么该通信接口的数据接收端也可通过该与门将数据送入RXD引脚。当然,用户也可以不用该与门电路,而直接将第二级非门的输出接RXD引脚。
红外通信与常规的有线通信相比,只是利用了不同的传输介质而已,因此通信的程序与前面描述的类似,不同的只是红外通信还存在着载波的问题,因此,程序只包括串口初始化、定时器初始化、定时中断服务程序、通信的收、发程序等。
1.串口初始化程序init()
串口初始化程序如下,串行口工作在方式1,波特率为9600bit/s。单片机的定时器T0定时中断产生38kHz的载波信号,Tl定时器作为波特率发生器。
程序利用定时器T0产生一定频率的中断,在中断服务程序里控制引脚输出高低电平,
以此来产生载波信号,定时器TO的中断服务程序代码如下:
说明:程序编写时,只有在发送时才打开产生载波频率的定时中断,当发送完毕后,关掉中断,置Pl.0为0。
2.甲机发送子程序voidsend()
甲机发送子程序send0完成甲机发送数据功能。计算校验和并发送数据,等待乙机响应,若乙机响应正确则从子程序中返回,否则再次发送数据并等待乙机响应,程序代码如下:
3.乙机接收程序voidrecv()
乙机接收程序根据制定的联络信号接收数据。接收数据并计算校验和,若校验正确则发送0x55表明数据正确,否则发送0xFF说明数据接收错误。程序代码如下:
在红外通信的设计、使用时,应注意如下几个问题。
·距离与功率问题:红外通信的距离主要取决于发射的强度(电流)。
·通信的速度问题:由于调制的载波频率为38kHz,为很好地接收到发射的信号,建议单片机设置的数据传输速率不要超过9600bit/s。
·在使用时,应考虑发射管与接收管的角度问题,角度越大,接收距离将越近,甚至接收不到。
·对于单工方式下,发送方只保留发送部分电路,而接收方只保留接收部分电路,如不需要返回信息的主动遥控器,只有发送电路,而被动接收的控制器,只有接收电路。
·载波频率也可由其他可产生振荡方波信号的电路获得,如555电路。
·目前市场上还有专用的收发一体的红外模块、只发不收的发射模块、只收不发的接收模块等,这些模块内部大都集成了调制、驱动、解调等电路,用户只需选好型号并掌握其接口关系即可。