51单片机的红外收发
一、设计任务和性能指标
1.1设计任务
红外遥控技术是一种利用红外线进行点对点通信的技术,其相应的软件和硬件技术都已比较成熟。它是把红外线作为载体的遥控方式。在现代电子工程应用中,红外线常常被用做近距离视线范围内的通讯载波,最典型的应用就是家电遥控器。使用红外线做信号载波的优点很多:成本低、传播范围和方向可以控制、不产生电磁辐射干扰,也不收干扰等等。因此被广泛地应用在各种技术领域中。
红外线遥控具有结构简单,制作方便,成本低廉,抗干扰能力强,工作可靠性高等一系列优点,特别是室内遥控的优先遥控方式。同时,由于采用红外线遥控器件时,工作电压低,功耗小,外围电路简单,因此它在日常工作生活中的应用越来越广泛。
1.2性能指标
1. 基本要求
(1) 能够实现利用红外线实现无线数据的收发;
(2) 能够将发送的数据或接收的数据进行显示,或根据接收的命令执行相应的功
能。
2. 选做
(1) 所发送的数据利用PC 机进行控制;
(2) 能够实现的数据通信采用一对多的主从模式;
(3) 能够实现远程的参数数据传送,如实现远程抄表、温度、湿度等。
二、设计方案
按照性能设计指标的要求,设计红外收发系统有发射和接收两大模块组成。发射部分包括键盘矩阵、编码调制、红外发送器;接收部分包括光、电转换放大器、解调、解码电路。具体框图如下:
图1:红外发射框图图2:红外接收框图
三、系统硬件设计
3.1 红外发射模块设计
(一)单片机的最小系统
ATMEL 公司生产的AT89C51单片机它是硬件电路的核心部分,时钟电路晶振使用11.0592MHZ ,复位电路采取按键复位方式。具体连接见附录1。
1、主要元器件介绍
单片机主控电路的主要元件是AT89C51,其外型如图3:
图3: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 存储器可有效地降低开发成本。
2、管脚说明:
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:来自反向振荡器的输出。
(二)键盘电路
键盘采用列扫描。
列扫描的原理是:使第一行线为低电平,如果这条列线上没有闭合键,则各条线的状态都为高电平,如果行线上有闭合键,则相应的那条列线即变为低电平。于是就可以根据按行线号和列线号求得闭合键的键码。行号分别接到了P1.0,P1.1,P1.2, 列号分别接到了P1.3,P1.4,P1.5,做成了3*3的矩阵式键盘。
(三)红外线发射编码
AT89C51的P1.7引脚外接元件组成了红外驱动放大发射电路。它主要是由驱动管和红外发射二极管组成的。当P1.7脚有指令信号输出时,该信号经驱动管放大后,加至红外发射二极管上,遥控指令则以红外线的形式发射出去。 当按下键盘上的不同按键时,通过编码器产生与之相应的特定的二进制脉冲码信号。将此二进制脉冲码信号先调制在38KHz 的载波上,经过放大后,激发红外发光二极管转发成波长940nm 的红外线光传输出去。
3.2 红外接收模块设计
(一)红外接收器设计
红外接收器采用一体化红外遥控接收器SM0038,实验电路如图4:
OUT VCC GND
图4:SM0038
OUT 接单片机的P3.2口,若有红外线数字信号则经过红外接收器取出数字信号数据经单片机译码,最后送到显示电路。GND 接地,VCC 接高电平。
(二)显示电路的设计
显示部分采用普通的共阳数码管显示,使用动态扫描,以便减少硬件电路。考虑到一次扫描7位数码管显示时会出现闪烁情况,设计时采用多次调用显示子程序解决这个问题。驱动数码管的芯片采用驱动能力较强的74HC373,使用单片机的P0口作为并行输出,74HC373是高电平锁存,用P1.4口作为74HC373时钟控制端口,即置‘1’控制端。由于数码管采用共阳接法,使用P2.0-P2.1口作为数码管的位选。74HC373在得到高电平后,将8位数据锁存,并行输出送至数码管各段选控制口。
(三)键盘接口的设计
键盘只有4个,其中2个用于单片机上电复位,其中一个用于电源转换电路中,另外一个用于红外发射程序和红外接收程序能下载到不同单片机上的转换开关。
四、系统软件设计
系统软件可分为发射部分、接收部分和显示三部分。软件可由汇编语言完成。 发射和接收部分都采用AT89C51。
发射程流程图如图5:
图5.1:发射主程序流程图
图5:发射流程图
图5.2:发射程序流程图
接收流程图如图6:
图6.1:接受主程序流程图 图6.2:中断子程序流程图
6:接收流程图
图
五、调试及性能分析
5.1调试步骤
调试分为硬件调试和软件调试。
硬件调试主要是检测硬件电路是否有短路、断路、虚焊等。具体步骤及测试结果如下:
(1)检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导线是否完全连接,测试结果所有连接线都已连接好;
(2)检验单片机的晶振是否起振,用示波器观察波形;测试结果波形都很好;
(3)检查各芯片的功能是否正常,检测按键的导通情况。测试结果正常。 软件调试主要是程序调试,可以分块进行调试,分别对发射模块和接收模块程序进行调试。首先都要在实验台上进行调试。具体步骤如下:
(1)发射模块程序调试,首先将程序输入到电脑中,对逻辑功能和语句进行检查,再用软件进行调试,调试无错误后才可以下载到单片机中。
(2)接收模块程序调试,程序无错误后,下载到单片机中,结合接收模块程序,验证实验功能,当发射部分有键按下时,接收模块中的接收器接收红外线并在数码管中显示出按键数,完成实验要求。
5.2性能分析
首先单片机按键复位后,数码管无显示,指示灯灭。然后把发射程序和接收程序分别下载到相应的单片机中,当发射部分有键按下时,经过内部编码,然后根据键值设定按键的脉冲个数,再调制成40HZ 方波由红外发射管发射出去。红外接收模块的红外接收器SM0038接收红外线,当红外接收器输出脉冲帧数据时,第一位码的低电平将启动终端程序,实时接收数据帧。在数据帧接收时,将对第一位码的码宽进行验证,若第一位低电平的脉冲小于2ms, 将作为错误码处理,当间隔位的高电平脉冲宽大于3ms 时,结束接收。再经过单片机的译码来确定所按键的脉冲数,并经过解码功能确定相应的功能,最后经过数码管显示出按键数。
红外接收器输出的一帧遥控码波形如图7:
图7:红外接收器一帧遥控码波形图
六、心得体会
这次课程设计是对我们学习微机原理及单片机课程的检验及实际应用能力的一次提高。我们所设计的是红外收发器。所能实现的是红外的发射和接收,发射部分通过键盘输入数字通过AT89C51编码并用红外二极管发射出去。接收部分通过另外一块AT89C51通过中断方式接收红外信号并解码,最后从数码管显示所按下的键号。
原理图的设计时我们使用了Altium6.0这个强大的绘图工具,由于一些实际的器件在器件库中无法找到,我们只有自己制作,在这个过程中我们学到了很多的知识和方法。在制作PCB 印刷电路板的时候,很多器件的封装与实际尺寸存在很大的差别,为了获得准确的封装,我们实际测量了所给器件的大小与规格,自己制作与之匹配的封装库,这让我们明白实践是出真知的唯一途径,只有亲自动手,实际才能测试才能获得最可靠的设计数据。当然我们也出现了严重的失误,由于对电源与地的距离估计不足,导致两者过近,出现了短接的危险。因此我们不得不重新处理这个问题,这个教训也告诫了我们,对于任何小的细节都不能掉以轻心,小的疏忽也会造成大的损失。对于电路图和电路板都应当采取科学谨慎的态度,这是保证是的基本实验结果产生的前提,在正式焊接前,对电路板的核查测试应当细心备至,反复检测才不会导致最终的失败。
程序的编写过程也给了我们很大的收获。在编写程序之前,我们查阅了大量的相关资料,力求做到规范清晰。在把握了整体的思路后,我们先从程序流程图着手, 将整个程序分成若干模块,分开编写,一边发现问题一边解决问题,并在实验板上检验程序测试情况,根据现象不断修改。在这个过程中我们体会到编程的技巧,设置子程序的合理性,同时对单片机最小系统的设计有了整体的理解和深刻的体会,使我们的思维的锻炼与能力培养有了很大的提高和长足的进步。
本次课程设计虽然时间很短,但收获却很大。首先我们对单片机最小系统的设计有了整体的把握,对程序编写的合理与规范性有了深刻的理解,建立起程序设计的一般思路,以及Altium6.0的使用方法,其强大的功能给我们提供了很大的帮助,通过原理图的设计过程,使我们认识到了这个软件的重要性,我们会以此为契机,在日后的学习中会继续使用它,使其发挥更大的功能。
经过三个星期的课程设计,我们得到了充分的锻炼,不仅对单片机的学习有了深刻的理解,同时也增强了我们的毅力和处理突发问题的能力。学习是要付出一定的艰辛与努力的,做事情一定要有不怕困难的吃苦精神,唯有坚持不懈,发扬团队协作才能够克服困难,取得最后的胜利。
相信本次课程设计对我们以后的学习将会有很大的影响,我们一定会积极地总结经验与教训,改进不足,争取在日后做得更好。当然要感谢老师和同学们的帮助,在我们束手无策,陷入困境的时候给予热情的帮助,使我们顺利渡过难关。
课程设计是一次很好的实践动手机会,通过实践,我们的知识得到了应用,真正实现了知识的学以致用,理论联系实际,我们会更加注重实践能力的锻炼,注重动手能力的培养。
参考文献
[1] 彭为、黄科、雷道仲. 单片机典型系统设计实例精讲. 北京:电子工业出版社,2006
[2] 陈明荧. 8051单片机课程设计实训教材. 北京: 清华大学出版社,2004 [3] 李群芳, 黄建. 单片机微型计算机与接口技术. 北京:电子工业出版社,2001 [4] 楼然苗、李光飞. 51系列单片机设计实例. 北京:北京航空航天大学出版社,2003
[5] 李光飞、楼然苗. 单片机课程设计指导. 北京航空航天大学出版社,2007
附录
1程序清单
发射程序
; 主程序和中断程序入口 ORG 0000H
AJMP START ORG 0003H RETI ORG 000BH
RETI ORG 0013H
RETI
ORG 001BH ; 定时器T1中断入口地址 LJMP INTT1 ; 初始化程序
CLEARMEMIO: CLR A DEC A MOV P0,A MOV P1,A MOV P2,A MOV P3,A
CLR P1.7
MOV IE,#00H ; 关所有中断 MOV TMOD,#20H ; 方式2 MOV TH1,#0F5H ; 定时初值
MOV TL1,#0F5H SETB EA RET ; 主程序
START: LCALL CLEARMEMIO MAIN: LCALL KEYWORK LJMP MAIN ; 中断服务程序
INTT1: KEYWORK: KEYCON: KEYOUT: KEYCHE: LOOP: CHELOOP: CPL P1.7 ;38.5KHZ 红外遥控信号 RETI
MOV P1,#0FFH ; 置P1口为输入状态 CLR P1.7 CLR P1.6
CLR P1.0 ; 扫描第1行 MOV A,P1 ANL A,#38H
CJNE A,#38H,KEYCON
SETB P1.0 ; 扫描第2行 CLR P1.1 MOV A,P1 ANL A,#38H
CJNE A,#38H,KEYCON
SETB P1.1 ; 扫描第3行 CLR P1.2 MOV A,P1 ANL A,#38H
CJNE A,#38H,KEYCON
SETB P1.2 ; 结束扫描 RET
LCALL DELAY ; 延时去抖动
MOV A,P1 ; 读入P1口值 ANL A,#38H
CJNE A,#38H,KEYCHE ; 确有键按下
RET
MOV A,P1 MOV B,A
MOV A,P1
ANL A,#38H ; 低3位为0 CJNE A,#38H,LOOP ; 列选全为1(键按着) MOV R7,#00H ; 放键,查表次数为0 MOV DPTR,#KEYTAB
MOV A,R7 MOVC A,@A+DPTR
XRL A,B ; 查表值与P1口值比较 JZ KEYOK INC R7
CJNE R7,#09H,CHELOOP RET
KEYOK: MOV A,R7
MOV B,A RL A ADD A,B
KEYFUNTAB: KEYTAB: KEYFUN00:
KEYFUN01:
KEYFUN02:
KEYFUN03:
KEYFUN04:
KEYFUN05: MOV DPTR,#KEYFUNTAB ;散转功能程序首址 JMP @A+DPTR ; 散转至对应功能程序标号 LJMP KEYFUN00 ; 跳到键号对应功能程序标号 LJMP KEYFUN01 LJMP KEYFUN02 LJMP KEYFUN03 LJMP KEYFUN04 LJMP KEYFUN05 LJMP KEYFUN06 LJMP KEYFUN07 LJMP KEYFUN08 RET
DB 36H,35H,33H,2EH,2DH,2BH,1EH,1DH,1BH,0FFH MOV A,#02H ; 发送2个脉冲 LCALL REMOTE ; 转发送程序 RET MOV A,#03H ; 发送3个脉冲 LCALL REMOTE ; 转发送程序 RET MOV A,#04H ; 发送4个脉冲 LCALL REMOTE ; 转发送程序 RET MOV A,#05H ; 发送5个脉冲 LCALL REMOTE ; 转发送程序 RET MOV A,#06H ; 发送6个脉冲 LCALL REMOTE ; 转发送程序 RET MOV A,#07H ; 发送7个脉冲 LCALL REMOTE ; 转发送程序
RET
KEYFUN06: MOV A,#08H ; 发送8个脉冲 LCALL REMOTE ; 转发送程序 RET
KEYFUN07: MOV A,#09H ; 发送9个脉冲 LCALL REMOTE ; 转发送程序 RET
KEYFUN08: ; 编码发射程序
REMOTE: OUT: OUT1: OUT2: 发射
MOV A,#0AH ; 发送10个脉冲 LCALL REMOTE ; 转发送程序 RET MOV R1,A ; 装入发射脉冲个数
LJMP OUT3
MOV R0,#75H ;1MS 宽低电平发射数据 SETB ET1 ; 开T1中断 SETB TR1 ; 开定时器T1 NOP NOP NOP NOP
DJNZ R0,OUT1
MOV R0,#32H ;1MS 宽高电平间隙控制数据 CLR TR1 ; 关定时器T1 CLR ET1 ; 关中断
CLR P1.7 ; 关脉冲输出 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP
DJNZ R0,OUT2 ; 时间不到, 转OUT2再循环 DJNZ R1,OUT ; 脉冲未发完, 转OUT 再循环
LCALL DL500MS RET
OUT3: MOV R0,#0FFH ; 装发射3MS 宽控制数据 LJMP OUT1
DELAY: MOV R2,#0FFH DELAY1: DJNZ R2,DELAY1
RET ;10MS 延时
DL10MS: MOV R3,#14H DL10MS1: LCALL DELAY
DJNZ R3,DL10MS1 RET
;500MS 延时程序
DL500MS: MOV R4,#32H DL500MS1: LCALL DL10MS
DJNZ R4,DL500MS1 RET END 接受程序
; 主程序和中断程序入口 ORG 0000H
AJMP START
ORG 0003H ; 外部中断0中断入口 LJMP INTEX0 ORG 000BH
RETI ORG 0013H
RETI
ORG 001BH RETI ORG 0023H
RETI ORG 002BH
RETI ; 初始化程序 CLEAR: CLR A DEC A MOV P0,A MOV P1,A MOV P2,A MOV P3,A
CLEARMEM: MOV IE,#00H ; 关所有中断
SETB EX0 ; 开外中断 SETB EA ; 总中断允许 RET
START: LCALL CLEAR SJMP $ ; 遥控接收程序(采用中断接收)
INTEX0: CLR EX0 ; 关外中断 JNB P3.2,READ1
READOUT: SETB EX0 ; 允许外部中断0中断 READ1: HARD1: HARD11: 退出
清0)
READ11: READ12: READ13: RETI CLR A
MOV DPH,A MOV DPL,A
JB P3.2,HARD11 INC DPTR NOP NOP
AJMP HARD1
MOV A,DPH JZ READOUT CLR A CLR P3.6 INC A JNB P3.2,READ12 MOV R1,#06H JNB P3.2,READ11
LCALL DELAY DJNZ R1,READ13 DEC A DEC A
JZ FUN0 DEC A JZ FUN1 DEC A
JZ FUN2 DEC A
JZ FUN3 DEC A
JZ FUN4 DEC A
JZ FUN5 DEC A
;DPTR 清零 ;P3.2变高电平转HARD11 ; 低电平记数 ;1US 延时 ;DPTR 高8位放入A ; 为0则脉宽小于(255*8US)2MS ; 否则第一个为宽脉冲(计数器先 ; 低电平时等待 ; 延时512US ;6次延时
; 超过3MS 判为结束, 减1 为0执行FUN0(2个脉冲)
为0执行FUN1(3个脉冲) 为0执行FUN2(4个脉冲) 为0执行FUN3(5个脉冲) 为0执行FUN4(6个脉冲) 为0执行FUN5(7个脉冲)
; ; ; ; ; ;
JZ FUN6 ; 为0执行FUN6(8个脉冲) DEC A
JZ FUN7 ; 为0执行FUN7(9个脉冲) DEC A
JZ FUN8 ; 为0执行FUN8(10个脉冲) NOP NOP
LJMP READOUT ; 出错退出 FUN0: MOV R0,#00H LJMP DISPLAY FUN1: MOV R0,#01H
LJMP DISPLAY FUN2: MOV R0,#02H LJMP DISPLAY FUN3: MOV R0,#03H LJMP DISPLAY FUN4: MOV R0,#04H LJMP DISPLAY FUN5: MOV R0,#05H LJMP DISPLAY FUN6: MOV R0,#06H LJMP DISPLAY FUN7: MOV R0,#07H LJMP DISPLAY FUN8: MOV R0,#08H
LJMP DISPLAY
DISPLAY: MOV DPTR,#TABLE
MOV P0,#0C0H ; 关闭所有共阳7段LED MOV P2,#02H ; 片选高位 MOV A,R0
MOVC A,@A+DPTR ; 查表得显示内容 MOV P0,A
LJMP READOUT
; 延时程序(512US)
DELAY: MOV R0,#0FFH DELAY1: DJNZ R0,DELAY1
RET
TABLE: DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH END
2硬件原理图
发射原理图
接收原理图
大连民族学院2005级通信工程专业单片机课程设计报告
大连民族学院2005级通信工程专业单片机课程设计报告