1第二十讲红外数据传输220.0项目演示效果图XP_20_01步骤1-红外数据传输项目的配置及启动3图XP_20_02步骤2-B板接收初始化数据并进行显示4图XP_20_03步骤3-A板传送S15键值到B板进行显示5图XP_20_04步骤4-A板传送S7键值到B板进行显示620.1项目目标设计1.学习红外射线的相关基础知识;2.学习红外线数据传输技术的基本工作原理;3.掌握红外线数据传输技术在项目开发板中的应用方法和原理;4.学习STC89C52RC单片机扩展INT3中断程序的编制和使用方法;5.掌握作为红外线数据传输核心器件的MAX3100集成芯片的原理和使用方法;6.掌握红外线数据传输电路的硬件连接方法;7.学习在项目开发板上如何实现红外线数据传输的软件编制方法;8.在达到以上七点目标的基础上,根据本章“项目扩展任务”中提出的问题,以组或个人为单位,在规定时间里完成扩展项目任务。720.2项目任务本项目需要两个PMY单片机开发板配合操作完成,红外数据传输部分的原理图如图20-1所示,MAX3100芯片完成红外数据的发送、接收及相关通信协议转换。对于发送端,4×4矩阵键盘的S1、S2~S16的编码分别为01H、02H~10H,按压任意按键后,相应的键值通过STC89C52RC单片机使用SPI通信方式传送给MAX3100,MAX3100再采用红外模式对被压键值进行发送。同时,STC89C52RC单片机控制板上的8个LED发光二极管和七段数码管显示被传键值。接收端的红外接收头应水平对准发射端的发射头,接收到的红外射线被MAX3100转换为SPI通信协议并转传给STC89C52RC单片机,与接收端处理显示的方式类似,STC89C52RC单片机实现将接收到的键值也在板上的8个LED发光二极管和七段数码管上同时进行显示。8图20-1红外线数据传输项目的电路原理图920.3系统板上硬件连线PMY单片机开发板上红外线数据传输项目的连接插线设置如图20-2所示。图20-2红外线数据传输项目系统板硬件连线图1020.4程序流程图图20-3红外线数据传输项目的发送程序流程图11图20-4红外线数据传输项目的接收程序流程图1220.5C语言源程序(略)20.6系统构成和程序分析20.6.1红外线的基本知识红外线(Infraredrays)是一种光线,其波长比红色光(750nm)长,超出了人眼可以识别的(可见光)范围,所以人眼看不见它。通常把波长为0.75~1000μm的光都称为红外线,对其继续细分为以下三部分,即近红外线,波长为0.75~1.50μm之间;中红外线,波长为1.50~6.0μm之间;远红外线,波长为6.0~l000μm之间。13由于红外线是一种光线,一次具有普通光的一般性质,如可以以光速直线传播、强度可调,可以通过光学透镜聚焦,可以被不透明物体遮挡等等。经过特殊工艺制造的半导体发光二极管,可以发出特定波长(通常是近红外)的红外线,通过控制二极管的电流可以很方便地改变红外线的强度,达到调制的目的,因此,在现代电子工程应用中,红外线常常被用做近距离视线范围内的通讯载波,最典型的应用就是电视机的遥控器。14使用红外线做信号载波的优点很多,如成本低、传播范围和方向可以控制(不会穿过墙壁,对隔壁家的电视造成影响)、不产生电磁辐射干扰,也不受干扰等等。因此被广泛地应用在各个技术领域中。由于红外线发光二极管的发光强度很容易被控制,所以通过简单的电路就可以产生出受特定频率调制的调幅红外光,具有这种特征的红外光线,即使非常微弱,也可以从环境杂射光中被识别并分离出来,达到很好的通讯效果。因此,可以使用这种微弱的红外光线,达到信号通讯的目的,这种红外通信方式被广泛应用于遥控、音频通讯和PC数据通讯等领域。1520.6.2MAX3100的引脚及内部功能PMY单片机开发板采用了MAX3100芯片来完成红外波调制、解调及协议转换功能,与其它外围器件正确搭配,可以构成红外数据传送和接收电路,完成近距离的数据传送任务(见图20-1)。MAX3100是一个全功能的串行通信协议转换器件,与SPI兼容的同步串行接口极易与微控制器接口【49】。MAX3100的引脚排列及内部功能图如图20-5所示,引脚功能如下:16图20-5MAX3100引脚及内部功能图17•DINSPITM/MicrowireTM串行数据输入引脚,串行时钟的上升沿锁存DIN数据.•DOUTSPITM/MicrowireTM推挽串行数据输出引脚,数据由串行时钟的下降沿同步输出。•SCLK串行时钟控制。用于数据输入和输出的串行总线定时。•CS片选控制。当CS为高电平时,DOUT输出引脚处于高阻状态,IRQ、TX、RTS的输出不受CS的控制。•IRQ中断请求信号。OC门输出,低电平有效。•SHDN待机模式的硬件控制端。SHDN=0,进入待机模式,不管当前是否正在通信,片内振荡器立即停振,此时芯片的工作电流仅为10μA。•X1和X2晶振引脚。18•CTS数据输入请求端。可以通过CTS位读取。•RTS数据输出允许端。可以通过RTS位控制。•RX异步串行输入。•TX异步串行输出。MAX3100包括1个简单的UART、SPI接口、波特率发生器和1个中断发生器,通过“写结构寄存器”完成波特率、字长、校验、8字节接收FIFO的设定并选择通用UART方式或IrDA(红外通信)方式,控制节电状态和4个中断任务【50】,见图20-5。MAX3100使用SPITM/MicrowireTM接口与控制器通信,适用于RS232、RS485和IrDA等通信场合。1920.6.3项目系统功能图及外部中断1的作用MAX3100具有独立的晶体振荡电路,通过软件设置波特率因子可以对通信速率进行选择,范围为300~230kbps。芯片内8字节的FIFO输入缓冲区可以显著提高CPU的工作效率。芯片内含4个可屏蔽的中断源,分别是接收帧校验(pr)、接收数据(R)、待机方式时发现RX端状态改变或正常工作时出现帧格式错(RA/FE)及发送缓冲器空(T),上述4个中断源都可以通过软件设置实现屏蔽功能。如图20-6所示,MAX3100需要4条接口线实现与微控制器接口握手,另一条中断信号线接STC89C52RC单片机的nINT3外部中断口。MAX3100在等待串行事件时,内部电路和UART进入休眠状态,其内部FIFO具有缓冲接收突发信息的作用。20图20-6红外数据传输项目的系统功能图21本项目的发送和接收分为两个程序,发送程序中的大部分代码段与接收程序相同,不同的地方将单独进行讲解。参照图20-1和图20-6,在发送程序中,SPI接口的4根信号线nCS3100、SCLK3100、DIN3100和DOUT3100分别接STC89C52RC单片机P1口的P12、P13、P14和P15,在实际操作前应注意连接插线短接片的设置。22外部中断1主要是用来检测由ZLG7290发出的按键中断信号,当矩阵键盘中的任一键被按下时,ZLG7290不但能够记录键值,而且还发出按键中断信号。源程序主函数中的以下代码对外部中断1进行了设置:EA=1;//允许所有中断被响应IT1=1;//外部中断1的触发方式为下降沿触发EX1=1;//允许外部中断1被响应(ZLG7290键盘中断第二句中设定IT1=1非常重要,通过实际测试可以验证,在本项目中,中断信号的下降沿触发比电平触发能更好地被检测出来。2320.6.4如何通过SPI总线向MAX3100写控制字C源程序main主函数中的max3100drv(0xe48e)语句,实现向MAX3100写控制字的功能。对MAX3100的控制可以通过写控制字、读控制字、写数据和读数据4种方式实现,这4条指令的具体含义见表20-1~表20-4所示【51】,指令中的每一位含义见表20-5所示。根据表20-1,若向MAX3100写控制字,则要求以16位的形式写入数据,其中规定D14和D15位必须为1,用以区别其它3条指令。如图20-6所示,对于STC89C52RC单片机,DIN数据线就是向MAX3100输出数据的信号线,控制字的其它位可根据程序的需要进行设定。24表20-1对MAX3100的写控制字位D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0DIN11nFENSHDNinTMnRMnPMnRAMIRSTPELB3B2B1B0DOUTRT0000000000000表20-2对MAX3100的读控制字位D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0DIN010000000000000TESTDOURTnFENSHDNonTMnRMnPMnRAMIRSTPELB3B2B1B025表20-3对MAX3100的写数据指令位D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0DIN10000nTERTSPtD7tD6tD5tD5tD4tD3tD7tD0tDOURTnFENSHDNonTMnRMnPMnRAMIRSTPELB3B2B1B0表20-4对MAX3100的读数据指令位D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0DIN0000000000000000DOURT000RA/FECTSPrD7rD6rD5rD4rD3rD2rD1rD0r26表20-5MAX3100控制和数据指令的位含义27表20-1和表20-2中的B0~B3位是MAX3100的波特率因子选择位,这些位选用不同的组合,MAX3100的串行通信接口所采用的波特率也不相同,具体的选择值见表20-6给出的MAX3100波特率选择表。再对向MAX3100写入的控制指令0xe48e进行解释。参照表20-1~表20-6的解释,本项目设定MAX3100在以下方式下进行工作:•FIFO(先入先出寄存器)禁止工作。•软件设置无掉电(Shutdown)状态。•R(接收数据有效)中断允许。•T(发送缓冲器空)中断源被屏蔽。•Pr(接收帧校验位为1)中断源被屏蔽。•RA和FE(待机方式时发现RX端状态改变或正常工作时出现帧格式错)中断源被屏蔽。•选择红外模式工作。•传送帧中包括1位停止位。28•无附加帧校验位被传送。•数据字长为8位。•红外通信速率为600bps。根据以上设定将控制指令0xe48e每一位的解释以图示的方式在图20-7中给出。控制字写入后将清除FIFO以及R、T、RA/FE、D0r~D7r、D0t~D7t、Pr和Pt等寄存器,而RTS、CTS的状态不受影响。新的控制字中的中断屏蔽将在MAX3100芯片SCLK的第16个上升沿时开始有效,而FEN、SHDNi、IR、ST、PE、L、B0~B3等需要到CS的上升沿和通信缓冲器空以及本次通信结束后方可有效。值得注意的是,控制字只允许接收数据R中断有效,所以由MAX3100产生的中断是由于它本身接收到新的数据而引起的,这一点在接收端程序进行红外数据接收的功能分析时特别要加以注意。29表20-6MAX3100波特率选择表30图20-7控制指令0xe48e的含义3120.6.5SPI通信的程序实现上节已经介绍过,向MAX3100写入控制指令0xe48e用到了max3100drv(0xe48e)语句,该函数的原型为uintmax3100drv(uintx),完成STC89C52RC单片机与MAX3100的SPI通信功能,本项目中给出的C语言源程序完全是根据MAX3100数据手册的SPI时序图编制,这里将结合SPI时序图对相关代码进行介绍和分析。uintmax3100drv(uintx)//MAX3100的SPI通信驱动函数,根据MAX3100数据手册SPI时序图编制{uinti;uinty=0;//从MAX3100将要接收的数据赋初值32nCS3100=0;DOUT3100=1;SCLK3100=0;DIN3100=1;y=0;//SPI通信起始条件i=0x8000;//SPI通信传送16位的计数值while(i)//i是否为0{DIN3100