1光通信技术课程设计一、系统功能描述此系统是一个通过红外通信进行简单信号传输的装置,分为发送和接收两部分。发送装置接有简易键盘,按下按键后,单片机采集信号处理后通过红外发送出去。接收装置收到信号后,进行解析,然后通过数码管显示出相应的码型。二、系统所用元器件及设备发送端:AT89C52×1、红外发射二极管×1、8050×1、按键开关×10、11.0592M晶振×1电容:10μF×1、20pF×2电阻:1kΩ×2、100Ω×1接收端:74LS273×1、AT89C52×1、按键开关×1、7段共阳极数码管×2、8550×2、11.0592M晶振×1、红外接收器SM0038×1电容:10μF×2、20pF×2电阻:100Ω×2、1kΩ×1、4.7kΩ×2设备:稳压电源5v示波器三、系统实现功能原理发送端:输入方式采用3×3阵列(9按键)键盘,一共6根信号线,接入单片机P1口。每个按键在单片机P1口上对应唯一8位2进制值。当按下键盘上的不同按键时,通过编码器产生与之相应的特定的二进制脉冲码信号。将此二进制脉冲码信号先调制在38KHz的载波上,经过放大后,激发红外发光二极管转发成波长940nm的红外线光传输出去。接收端:红外接收器采用一体化红外遥控接收器SM0038,红外线数字信号则经过红外接收器取出数字信号数据经单片机译码,最后送到显示电路。主要芯片AT89C51:引脚图:功能介绍:AT89C51是一个低电压,高性能CMOS8位单片机,片内含4KBYTES的可反复擦写的只2读程序存储器(PEROM)和128BYTES的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和FLASH存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和FLASH存储器结合在一起,特别是可反复擦写的FLASH存储器可有效地降低开发成本。管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。/ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可3在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。四、系统原理图及说明见附1五、程序流程图发射端:图5.1:发射主程序流程图图5.2:发射程序流程图NYNY键按下逐行扫描,按P口值查键号按键号转至相应的发射程序装入发射脉冲个数到(R1)发3ms脉冲停发1ms(R1)-1=0?发1ms脉冲停发1ms开始发射初始化扫描键盘延时消抖结束4图5:发射流程图接收端:图6.1:接收主程序流程图图6.2:中断子程序流程图图6:接收流程图六、系统源程序见附2七、系统性能发射部分:接入电源后,3×3键盘对P1.7没有调制作用,P1.7输出波形为正弦波。接收部分:经38KHz光源信号,显示器不亮。P3.2管脚波形变化,说明接收到信号。八、改进方案发射部分:NYNYNY初始化低电平脉宽2ms?接收并对低电平脉冲计数高电平脉冲宽3ms?按脉冲个数至对应功能程序中断返回中断开始开始是否有中断?调中断子程序按照按键数显示5改变单片机程序,使P1.7管脚输出方波,通过摄像头观察红外发射二极管变化,发现二极管明暗变化,说明输出方波。接收部分:改变单片机程序,使得红外接收器接收到信号时共阳极数码管显示数字变化。设置数码管初始读数为77,接收到信号后变为11。延迟设置过大,不能进行循环,可通过复位键重置数码管显示数字77。九、结束语在过去的14周里,我们以红外通信为基础,经过了理论课、方案设计、元件选择、焊接电路、成品测试过程,最终完成了简单的红外通信装置。还记得理论课开始时的茫然无措,完全不知道如何进行后续的工作,经过网上查找资料等,确定最终的设计方案时,又觉得一切尽在掌握。但在选择元件时才发现,我们对方案的原理、需要的器件等几乎一无所知,经过简单的了解后就开始了电路焊接,经过几周的电路焊接后,才隐隐觉得最终成品能否正常工作还是一个大问题。完成电路焊接后接着要下载程序到芯片,这时才发现程序是用汇编语言写的,难以理解,如果程序有错误修改起来会特别困难。还好在程序下载中没有遇到困难。但在最终的测试时,由于对汇编语言的不熟悉,发射端无法正常工作的原因也很难找到,只能修改成简单的程序。而在接收端测试时,数码管不亮的错误原因也草率的定为程序错误,没有仔细检查电路,在破坏原始电路后发现芯片管脚没有与电路连接(电路板内置线路利用错误),只好放弃原电路,重新编写程序测试电路。经过14周的努力最终完成了红外通信装置,但成品与预期差距巨大。这暴露了我学习过程中的许多问题,例如初期确定方案时草率,没有考虑后续的电路工作、程序修改的问题;学习中不积极思考、遇到问题消极对待,不从自身找问题,电路错误时第一时间归为程序原因,而没有仔细检查电路。同时,在实际的设计电路、完成成品的过程中,我们也学到了许多课本上学不到的知识,让我们明白理论与实际的差距,学会了程序的编译下载、熟悉了电路焊接、巩固了模电知识、对单片机有了切实的认识。总之,这一次的课程设计让我们学到了很多东西,也暴露了我们自身存在的问题,这对以后的学习、生活有巨大的裨益。非常感谢周老师能为我们提供这样的机会。6附1:原始原理图:Send:Receive:7附2:初始程序代码:发射程序;主程序和中断程序入口ORG0000HAJMPSTARTORG0003HRETIORG000BHRETIORG0013HRETIORG001BH;定时器T1中断入口地址LJMPINTT1;初始化程序CLEARMEMIO:CLRADECAMOVP0,AMOVP1,AMOVP2,AMOVP3,ACLRP1.7MOVIE,#00H;关所有中断MOVTMOD,#20H;方式2MOVTH1,#0F5H;定时初值MOVTL1,#0F5HSETBEARET;主程序START:LCALLCLEARMEMIOMAIN:LCALLKEYWORKLJMPMAIN;中断服务程序INTT1:CPLP1.7;38.5KHZ红外遥控信号RETIKEYWORK:MOVP1,#0FFH;置P1口为输入状态CLRP1.7CLRP1.6CLRP1.0;扫描第1行8MOVA,P1ANLA,#38HCJNEA,#38H,KEYCONSETBP1.0;扫描第2行CLRP1.1MOVA,P1ANLA,#38HCJNEA,#38H,KEYCONSETBP1.1;扫描第3行CLRP1.2MOVA,P1ANLA,#38HCJNEA,#38H,KEYCONSETBP1.2;结束扫描RETKEYCON:LCALLDELAY;延时去抖动MOVA,P1;读入P1口值ANLA,#38HCJNEA,#38H,KEYCHE;确有键按下KEYOUT:RETKEYCHE:MOVA,P1MOVB,ALOOP:MOVA,P1ANLA,#38H;低3位为0CJNEA,#38H,LOOP;列选全为1(键按着)MOVR7,#00H;放键,查表次数为0MOVDPTR,#KEYTABCHELOOP:MOVA,R7MOVCA,@A+DPTRXRLA,B;查表值与P1口值比较JZKEYOKINCR7CJNER7,#09H,CHELOOPRETKEYOK:MOVA,R7MOVB,ARLAADDA,BMOVDPTR,#KEYFUNTAB;散转功能程序首址JMP@A+DPTR;散转至对应功能程序标号KEYFUNTAB:LJMPKEYFUN00;跳到键号对应功能程序标号LJMPKEYFUN01LJMPKEYFUN02LJMPKEYFUN039LJMPKEYFUN04LJMPKEYFUN05LJMPKEYFUN06LJMPKEYFUN07LJMPKEYFUN08RETKEYTAB:DB36H,35H,33H,2EH,2DH,2BH,1EH,1DH,1BH,0FFHKEYFUN00:MOVA,#02H;发送2个脉冲LCALLREMOTE;转发送程序RETKEYFUN01:MOVA,#03H;发送3个脉冲LCALLREMOTE;转发送程序RETKEYFUN02:MOVA,#04H;发送4个脉冲LCALLREMOTE;转发送程序RETKEYFUN03:MOVA,#05H;发送5个脉冲LCALLREMOTE;转发送程序RETKEYFUN04:MOVA,#06H;发送6个脉冲LCALLREMOTE;转发送程序RETKEYFUN05:MOVA,#07H;发送7个脉冲LCALLREMOTE;转发送程序RETKEYFUN06:MOVA,#08H;发送8个脉冲LCALLREMOTE;转发送程序RETKEYFUN07:MOVA