当前位置:文档之家› 光通信课程设计

光通信课程设计

光通信技术课程设计一、系统功能描述此系统是一个通过红外通信进行简单信号传输的装置,分为发送和接收两部分。

发送装置接有简易键盘,按下按键后,单片机采集信号处理后通过红外发送出去。

接收装置收到信号后,进行解析,然后通过数码管显示出相应的码型。

二、系统所用元器件及设备发送端: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是一个低电压,高性能CMOS 8位单片机,片内含4K BYTES的可反复擦写的只读程序存储器(PEROM)和128 BYTES的随机存取数据存储器(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.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

/ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在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:发射程序流程图图5:发射流程图接收端:图6.1:接收主程序流程图 图6.2:中断子程序流程图图6:接收流程图六、系统源程序见附2七、系统性能发射部分:接入电源后,3×3键盘对P1.7没有调制作用,P1.7输出波形为正弦波。

接收部分: 经38KHz 光源信号,显示器不亮。

P3.2管脚波形变化,说明接收到信号。

八、改进方案发射部分:改变单片机程序,使P1.7管脚输出方波,通过摄像头观察红外发射二极管变化,发现二极管明暗变化,说明输出方波。

接收部分:改变单片机程序,使得红外接收器接收到信号时共阳极数码管显示数字变化。

设置数码管初始读数为77,接收到信号后变为11。

延迟设置过大,不能进行循环,可通过复位键重置数码管显示数字77。

九、结束语在过去的14周里,我们以红外通信为基础,经过了理论课、方案设计、元件选择、焊接电路、成品测试过程,最终完成了简单的红外通信装置。

还记得理论课开始时的茫然无措,完全不知道如何进行后续的工作,经过网上查找资料等,确定最终的设计方案时,又觉得一切尽在掌握。

但在选择元件时才发现,我们对方案的原理、需要的器件等几乎一无所知,经过简单的了解后就开始了电路焊接,经过几周的电路焊接后,才隐隐觉得最终成品能否正常工作还是一个大问题。

完成电路焊接后接着要下载程序到芯片,这时才发现程序是用汇编语言写的,难以理解,如果程序有错误修改起来会特别困难。

还好在程序下载中没有遇到困难。

但在最终的测试时,由于对汇编语言的不熟悉,发射端无法正常工作的原因也很难找到,只能修改成简单的程序。

而在接收端测试时,数码管不亮的错误原因也草率的定为程序错误,没有仔细检查电路,在破坏原始电路后发现芯片管脚没有与电路连接(电路板内置线路利用错误),只好放弃原电路,重新编写程序测试电路。

经过14周的努力最终完成了红外通信装置,但成品与预期差距巨大。

这暴露了我学习过程中的许多问题,例如初期确定方案时草率,没有考虑后续的电路工作、程序修改的问题;学习中不积极思考、遇到问题消极对待,不从自身找问题,电路错误时第一时间归为程序原因,而没有仔细检查电路。

同时,在实际的设计电路、完成成品的过程中,我们也学到了许多课本上学不到的知识,让我们明白理论与实际的差距,学会了程序的编译下载、熟悉了电路焊接、巩固了模电知识、对单片机有了切实的认识。

总之,这一次的课程设计让我们学到了很多东西,也暴露了我们自身存在的问题,这对以后的学习、生活有巨大的裨益。

非常感谢周老师能为我们提供这样的机会。

附1:原始原理图:Send:Receive:附2:初始程序代码:发射程序;主程序和中断程序入口ORG 0000HAJMP STARTORG 0003HRETIORG 000BHRETIORG 0013HRETIORG 001BH ;定时器T1中断入口地址LJMP INTT1;初始化程序CLEARMEMIO: CLR ADEC AMOV P0,AMOV P1,AMOV P2,AMOV P3,ACLR P1.7MOV IE,#00H ;关所有中断MOV TMOD,#20H ;方式2MOV TH1,#0F5H ;定时初值MOV TL1,#0F5HSETB EARET;主程序START: LCALL CLEARMEMIOMAIN: LCALL KEYWORKLJMP MAIN;中断服务程序INTT1: CPL P1.7 ;38.5KHZ红外遥控信号RETIKEYWORK: MOV P1,#0FFH ;置P1口为输入状态CLR P1.7CLR P1.6CLR P1.0 ;扫描第1行MOV A,P1ANL A,#38HCJNE A,#38H,KEYCONSETB P1.0 ; 扫描第2行CLR P1.1MOV A,P1ANL A,#38HCJNE A,#38H,KEYCONSETB P1.1 ;扫描第3行CLR P1.2MOV A,P1ANL A,#38HCJNE A,#38H,KEYCONSETB P1.2 ;结束扫描RETKEYCON: LCALL DELAY ;延时去抖动MOV A,P1 ;读入P1口值ANL A,#38HCJNE A,#38H,KEYCHE ;确有键按下KEYOUT: RETKEYCHE: MOV A,P1MOV B,ALOOP: MOV A,P1ANL A,#38H ;低3位为0CJNE A,#38H,LOOP ;列选全为1(键按着)MOV R7,#00H ;放键,查表次数为0MOV DPTR,#KEYTABCHELOOP: MOV A,R7MOVC A,@A+DPTRXRL A,B ;查表值与P1口值比较JZ KEYOKINC R7CJNE R7,#09H,CHELOOPRETKEYOK: MOV A,R7MOV B,ARL AADD A,BMOV DPTR,#KEYFUNTAB ;散转功能程序首址JMP @A+DPTR ;散转至对应功能程序标号KEYFUNTAB: LJMP KEYFUN00 ;跳到键号对应功能程序标号LJMP KEYFUN01LJMP KEYFUN02LJMP KEYFUN03LJMP KEYFUN04LJMP KEYFUN05LJMP KEYFUN06LJMP KEYFUN07LJMP KEYFUN08RETKEYTAB: DB 36H,35H,33H,2EH,2DH,2BH,1EH,1DH,1BH,0FFH KEYFUN00: MOV A,#02H ;发送2个脉冲LCALL REMOTE ;转发送程序RETKEYFUN01: MOV A,#03H ;发送3个脉冲LCALL REMOTE ;转发送程序RETKEYFUN02: MOV A,#04H ;发送4个脉冲LCALL REMOTE ;转发送程序RETKEYFUN03: MOV A,#05H ;发送5个脉冲LCALL REMOTE ;转发送程序RETKEYFUN04: MOV A,#06H ;发送6个脉冲LCALL REMOTE ;转发送程序RETKEYFUN05: MOV A,#07H ;发送7个脉冲LCALL REMOTE ;转发送程序RETKEYFUN06: MOV A,#08H ;发送8个脉冲LCALL REMOTE ;转发送程序RETKEYFUN07: MOV A,#09H ;发送9个脉冲LCALL REMOTE ;转发送程序RETKEYFUN08: MOV A,#0AH ;发送10个脉冲LCALL REMOTE ;转发送程序RET;编码发射程序REMOTE: MOV R1,A ;装入发射脉冲个数LJMP OUT3OUT: MOV R0,#75H ;1MS宽低电平发射数据OUT1: SETB ET1 ;开T1中断SETB TR1 ;开定时器T1NOPNOPNOPNOPDJNZ R0,OUT1MOV R0,#32H ;1MS宽高电平间隙控制数据OUT2: CLR TR1 ;关定时器T1CLR ET1 ;关中断CLR P1.7 ;关脉冲输出NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPDJNZ R0,OUT2 ;时间不到,转OUT2再循环DJNZ R1,OUT ;脉冲未发完,转OUT再循环发射LCALL DL500MSRETOUT3: MOV R0,#0FFH ;装发射3MS宽控制数据LJMP OUT1DELAY: MOV R2,#0FFHDELAY1: DJNZ R2,DELAY1RET;10MS延时DL10MS: MOV R3,#14HDL10MS1: LCALL DELAYDJNZ R3,DL10MS1RET;500MS延时程序DL500MS: MOV R4,#32HDL500MS1: LCALL DL10MSDJNZ R4,DL500MS1RETEND接收程序;主程序和中断程序入口ORG 0000HAJMP STARTORG 0003H ;外部中断0中断入口LJMP INTEX0ORG 000BHRETIORG 0013HRETIORG 001BHRETIORG 0023HRETIORG 002BHRETI;初始化程序CLEAR: CLR ADEC AMOV P0,AMOV P1,AMOV P2,AMOV P3,ACLEARMEM: MOV IE,#00H ;关所有中断SETB EX0 ;开外中断SETB EA ;总中断允许RETSTART: LCALL CLEARSJMP $;遥控接收程序(采用中断接收)INTEX0: CLR EX0 ;关外中断JNB P3.2,READ1READOUT: SETB EX0 ;允许外部中断0中断RETIREAD1: CLR AMOV DPH,A ;DPTR清零MOV DPL,AHARD1: JB P3.2,HARD11 ;P3.2变高电平转HARD11INC DPTR ;低电平记数NOP ;1US延时NOPAJMP HARD1HARD11: MOV A,DPH ;DPTR高8位放入AJZ READOUT ;为0则脉宽小于(255*8US)2MS退出CLR A ;否则第一个为宽脉冲(计数器先清0)CLR P3.6READ11: INC AREAD12: JNB P3.2,READ12 ;低电平时等待MOV R1,#06HREAD13: JNB P3.2,READ11LCALL DELAY ;延时512USDJNZ R1,READ13 ;6次延时DEC A ;超过3MS判为结束,减1DEC AJZ FUN0 ;为0执行FUN0(2个脉冲)DEC AJZ FUN1 ;为0执行FUN1(3个脉冲)DEC AJZ FUN2 ;为0执行FUN2(4个脉冲)DEC AJZ FUN3 ;为0执行FUN3(5个脉冲)DEC AJZ FUN4 ;为0执行FUN4(6个脉冲)DEC AJZ FUN5 ;为0执行FUN5(7个脉冲)DEC AJZ FUN6 ;为0执行FUN6(8个脉冲)DEC AJZ FUN7 ;为0执行FUN7(9个脉冲)DEC AJZ FUN8 ;为0执行FUN8(10个脉冲)NOPNOPLJMP READOUT ;出错退出FUN0: MOV R0,#00HLJMP DISPLAYFUN1: MOV R0,#01HLJMP DISPLAYFUN2: MOV R0,#02HLJMP DISPLAYFUN3: MOV R0,#03HLJMP DISPLAYFUN4: MOV R0,#04HLJMP DISPLAYFUN5: MOV R0,#05HLJMP DISPLAYFUN6: MOV R0,#06HLJMP DISPLAYFUN7: MOV R0,#07HLJMP DISPLAYFUN8: MOV R0,#08HLJMP DISPLAYDISPLAY: MOV DPTR,#TABLEMOV P0,#0C0H ;关闭所有共阳7段LEDMOV P2,#02H ;片选高位MOV A,R0MOVC A,@A+DPTR ;查表得显示内容MOV P0,ALJMP READOUT;延时程序(512US)DELAY: MOV R0,#0FFHDELAY1: DJNZ R0,DELAY1RETTABLE: DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFHEND改进后程序代码:发射程序:#include <reg52.h>//寄存器定义文件sbit P17=P1^7;//P1口的7位void xx() interrupt 1main()//主程序{TMOD=1;//定时器1方式1=16位定时{ P17=!P17;TH1=-10000/256;TL1=-10000%256;//60000次中断一次=60ms }ET0=1;//开定时器1中断TR0=1;//启动定时器1EA=1;//开总中断while(1)//巡回检测{}}接收程序:#include <reg52.h>//寄存器定义文件sbit P32=P3^2;sbit P20=P2^0;sbit P21=P2^1;sbit P22=P2^2;int i;main()//主程序{while(1)//巡回检测{if(P32==0) {P20=1;P21=0;P22=0;for(i=0;i<60000;i++);}P20=0;P21=0;P22=0;}}。

相关主题