资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
红外遥控通信系统现在家电产品大部分配有红外线遥控器,在 PC 上也有红外传输的接口,有些鼠 标加了红外控制接口,变成了无线鼠标。所以说使用红外已经是一种非常广泛的 通信方式。红外通信知识的概述。实验内容简介实验目的1、掌握红外通信系统的知识。2、学会对接收到的红外信号进行解码操作。3、学会如何使用单片机来控制红外发射器发射红外信号。4、了解 NEC 码的编码方式等相关知识。实验要求1、使用开发板上的红外发射器TSAL6200模拟一个采用NEC码的红外遥控器进行 红外信号的发射。2、红外的编码使用开发板上的矩阵键盘实现(按键扫描实验)。3、开发板通过红外接收模块(HS0038)完成红外数据的接受,同时进行解码等 操作。4、MCU 对解码后的数据进行处理,将其显示在数码管上。简单硬件需求分析1、一般的红外通信系统都由发射与接收两个部分组成,所以我们需要一个发送 红外信号的发射器和一个红外接收器,由于我们需要对接收到的红外信号进行解 码,然后送给单片机进行处理,所以选择的接收器应该可以解码出单片机可以直 接处理的数据。2、选择一个 MCU 对红外发射器进行控制,得到想要的红外数据。3、由于我们实验需要显示接收到的红外数据,所以需要一个显示器件,数码管 就能够满足显示的需求。开发板设计HS0038 模块:HS0038是一个直接输出MCU可以处理的数字信号,所以在电路连接中,可以直 接将它的 OUT 引脚接在单片机的 I/O 口上,进行红外数据的处理,但是在我们的 开发板上,不仅接在了 I/O 口上,同时也将其接在了 8259A中断控制器上,这样 做,可以让我们在编写程序时有多种做法。这里的OUT引脚默认情况下为高电平的,这是上拉电阻所起到的作用。VCC 5VU23红外接收器CCVOLIT|HS0038RN9IRJNT接中斷 控制器的店1 上TSAL6200 模块:该器件是一个红外发射器,发射器的一端接在5V电源上,另一段接在PNP型三 极管的发射极上,三极管主要起到一个电流放大的作用。这里的IR_OUT信号通 过电阻接在电源上,除了让IR_OUT信号线在默认情况下输出高电平的作用外(IR_OUT=1红外发射管不工作),还起到了分压的作用,因为TSAL6200的正向 压降只有1.35V (详细内容见TSAL6200)。在默认情况下,由于IR_OUT为高电平,所以三极管的基极是高电平,此时三极 管不导通,TSAL6200没有工作,不会发射红外信号,只有当IR OUT信号输出低8259A 中断控制器模块:8259A中断控制器是分为奇地址以及偶地址(主要通过8259A的A0引脚进行控 制):它们分别是 0x6001、0x6000。由于这里我们只用到单片8259A,所以SP/EN引脚接高电平表示为单片,CAS0CAS2 是级联使用的,单片 8259A 时这些引脚都无用,所以直接悬空了。1、INT引脚:这里我们用8051控制8259,由于8259有中断请求时INT引脚变 为高电平,而 8051 中断外部中断只有下降沿和低电平触发方式,为了满足两者 之间的兼容性,使用该信号与地线接在或非门上,实现一个反向的功能。2、INTA 引脚处理:由于 8051 没有中断应答引脚,所以这里我们要借助8051 的 RD引脚和8259的INT引脚模拟出中断应答信号,由于中断应答也是变为低电平 有效,而8051 的 RD 为低电平有效,开发板的设计如下:RD 信号线通过一个与非门之后,再和 INT 一起接在另一个与非门的输入端,然 后与非门的输出端接在8259A的26号引脚INTA#上作为中断响应的应答信号。 (注:由于需要将 RD 信号线取反,我们使用一个与非门实现了一个非门的功能, 这样做可以节约成本,因为一个 74LS00 芯片上包含了多个与非门。与非门的输入引脚接相同的信号就相当是给这个信号取反。)HALLJNTIRNTLED I NT,引脚1按键中曲 输入引脚18怡IR3 厂IR丄I尺5阳IR6 24-2527片选信号01234567RRRRRRRRAOINTARD_WR cs01234567DDDDDDDDCASOCAS1CAS2SP/ENINJTDAQ1DDA1gDA2aDA3JZDA4rDA55DA64DA712VCCR3伯10K一了INTS259AtSQ51 话菠中斷的 引脚各个部件与MCU的连接:IR_IN (P1.2)与红外接收器的OUT引脚相连,单片机可从该引脚获取红外数据 信息;IR_OUT (P1.3与红外发射器相连)单片机对此引脚进行控制,可以改变 TSAL6200的工作状态,以达到进行红外数据的发送功能;P3.3引脚是单片机的外 部中断1引脚,与中断控制器8259A相连,单片机的P0 口是8位数据的传输线, 分别与8259A的数据线相连;单片机的P1.0和P1.1用来当I2C总线,使用软件 进行I2C的模拟,详细内容可见IIC。冋丈心ra.QAOQ PO.ADI P0.2AD2 PO.SADa PO.AOdP2.&ABP2.3!AT1P2.41M2P2.A!A-13P2.6A1dP2.7j!A15FS.a-RXE- pa.i.Twa pa.alNTS pa.aiNKiP3.1TDP3.&T1P3.BWRF3.7iR5 IO5 -55冬 P1.S637怕RDi?P1 DjT2回.2ECIPT.aGEXD程序流程分析1、先进行初始化操作,包括数码管驱动芯片CH452、数码管、定时器0、定时器1、8259A 中断控制器的初始化。2、当有按键时,会产生8259A中断,在中断服务函数中,把1赋给Flagl,用 来标志有键按下,并且进行按键值的查找,并用一个全局变量 Keycode 记录按键 值。3、主程序中检测到 Flag1=1 后(为了不影响接收程序,此时先关闭按键中断的 允许位,等本次发送过程结束再打开允许位),就会调用红外发送程序,发送的 内容为引导码、地址码以及命令,对于同一个遥控器件来说,它们的地址码应该 是不变的,我们这里的地址码应该为0x40bd。(如下图所示:)1 00 1 10100101010101 1010uimimiuiuuIS BMSELSBMSB1SB h M一 5m 曲 AddressAddress匚 ommard!low!i从图中我们可以看出,命令码(command,data code)发送两次,第一次发送的 是原码,第二次发送的是反码,这样是为了提高红外传输过程的可靠性。需要注 意的是,不管是地址码还是数据码,都是先发送最低有效位。4、在发送程序中,先发送引导码,由9ms的高电平和4.5ms的低电平组成,由 下图所示:n& E. ma引导码发送完毕之后,紧接着就会发送 4 个字节的数据,包括地址码和命令码 数据编码格式如下图所示:0.56ms的高电平和0.56ms的高电平代表数据0,0.56ms的高电平和1.12ms 的低电平代表数据1。5、接收过程应该和发送过程是同时的,在红外发送程序执行的过程中,当红 外接收器HS0038接收到红外信号后,在红外信号出现上升沿(程序中设置了IT1=1),会产生8259A中断,此时我们可以在中断服务程序中进行解码操作, 获取红外数据。6、解码操作时,先进行引导码的判断,由于HS0038会将接收到的红外信号反向, 所以引导码就变成了 9ms的低电平和4.5ms的高电平,第一次产生8259A中断是 在9ms之后,下一次中断产生则是在发送数据位的0.56ms之后,所以两次中断 之间的时间间隔应该为4.5ms左右,如果时间在这个范围之内,则说明引导码判 断成功,同样的方法我们可以判断产生两次中断时间间隔来判断接收到的数据。賀帼.按谴中断真真真真FifstiImn外产生的 断?:1有鍵开姐 )J 就 丿邮码却作FirstNimFl.打开 定时聲査核抜键怕flS239A的谶盘 中断允许也要发送的数据存放 到数组中至示搂收到的虹朴逮取中所号发送38辰的红外鐵波信号Count 1 ii数伯加一初姐化拶作解红外发射程序 谜行颜馆的发送#include #include #include #include 8259a.h#include ch452.hsbi t Ir_ out二 P3; 外发射引脚/红/用程序代码分析/* 头文件*/ unsigned int Countl=0; 于计数、判断时间使用unsigned char Ir_Code=0x00,Flag=0,Keycode=0xff,Flagl=0;/Flagl用来标志有按键按下了,Flag用来判断是否需要发送红外载波信号, Keycode用来记录按键值LeadCode=O,Da ta=0x00,Da taNum=O,Firs tNum=O,ReceiveDa ta8 = 0; /LeadCode用来标记引导码判断是否成功,Data用来接收红外数据,DataNum 表示已经接收了多少位数据了,FirstNum表示是否为第一次产生中断, ReceiveData用来存储数码管显示的数据unsigned char Code4 = 0x02,0xbd;/用来存放将要发送的数据,前两位为地址码,固定的,后两位数据为命令码,互为 相反unsigned char Key table44 = OxOf, OxOe, OxOd, 0x0c,0x0b, 0x0a,0x09,0x0&0x07, 0x06,0x05,0x04,0x03, 0x02,0x01,0x00;/键值查找表/*延时函数*/ void Delayus(unsigned int x)while(x-);/*/ /* 红外发射的部分*/ void Send_Data(unsigned char Data) unsigned char i; for(i=0;i8;i+)Flag=1;送红外载波TR0=1;Count1=0;whil e(Coun t1 20);0.56ms的高电平Flag=0;Ir_out二1;Count1=0; 波了,Flag=0/发送八位数据的函数/置Flag为1,表明需要发/打开定时器0/计数值赋为.0/判断是否已经发送了/
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号