基于AT89S51单片机的红外遥控设计 刘才新052140.docx
《基于AT89S51单片机的红外遥控设计 刘才新052140.docx》由会员分享,可在线阅读,更多相关《基于AT89S51单片机的红外遥控设计 刘才新052140.docx(16页珍藏版)》请在冰点文库上搜索。
基于AT89S51单片机的红外遥控设计刘才新052140
基于AT89S51单片机的红外遥控设计
摘要:
红外线遥控是利用波长为0.76~1.5μm之间的红外线来传送控制信号的,常用的红外遥控系统一般分发射和接收两个部分。
本文主要介绍怎样利用AT89S51单片机以及其周边电路实现红外线遥控的,它由发射部分和接收部分电路、程序代码调试组成,在选择合适的环境,红外遥控电路设计了多个控制按键,可以对不同的设备,也可以对同一设备的多个功能进行不同的控制。
关键词:
AT89S51单片机;红外发光二极管;晶振
Abstract:
Infraredremotecontrolistheuseofwavelengthnearinfraredbetween0.76and1.5μmtotransmitthecontrolsignal,infraredremotecontrolsystemsaregenerallydividedintotransmitandreceivetwoparts.ThispapermainlyintroduceshowtouseAT89S51MCUanditsperipheralcircuitrealizationofinfraredremotecontrol,whichiscomposedofpartsoftransmittingandreceivingcircuit,codedebugging,inthechoiceofasuitableenvironment,infraredremotecontrolcircuitdesignofmultiplecontrolbutton,canbeofdifferentequipment,canalsobeafunctionofthesameequipmentaredifferentcontrol.
Keywords:
AT89S51MCU;infraredemittingdiodes;crystal
1引言
随着远程教育系统的不断发展和日趋完善,红外遥控得到了广泛应用。
同时使用于多种设备,如:
数字投影机、DVD、VCD、录像机、电视机等。
由于各种设备都自带遥控器,因而使用多种遥控器,通过基于单片机的控制指令来对多种设备进行远程控制不同的设备。
红外遥控是目前家用电器中用得较多的遥控方式,红外遥控系统一般分发射和接收两个部分。
红外遥控的特点是不影响周边环境的、不干扰其他电器设备、功能强、成本低等。
由于其无法穿透墙壁,故不同房间的家用电器可使用的遥控器而不会产生相互干扰以实现多路遥控。
系统设计利用红外传输控制指令及智能控制系统,借助微处理器强大灵活的控制功能发出脉冲编码,组成的一个遥控系统。
2系统总体设计
红外遥控系统由发射和接收两大部分组成,系统采用编/解码专用集成电路和单片机芯片来进行控制操作。
设计的电路由几个基本模块组成:
直流稳压电源,红外发射电路,红外接收电路及控制部分。
系统框图如图所示:
图2-1红外遥控发射系统图
图2-2红外遥控接收系统图
本设计的主要技术指标如下:
(1)遥控范围:
4—6米;
(2)显示可控制的通道;
(3)灵敏可靠,抗干扰能力强;
(4)控制用电器电流最高为2A。
3系统硬件设计
3.1主要芯片——单片机AT89S2051介绍
同一般微处理器的AT89S2051的控制器由指令寄存器IR、指令译码器ID、定时及控制逻辑电路和程序计数器PC等组成。
程序计数器PC是一个16位的计数器(PC不属于特殊功能寄存器SFR范畴),它总是存放着下一个要取得指令的16位存储单元地址。
CPU总是把PC的内容作为地址,从内存中取出指令码或含在指令中的操作数。
指令寄存器保存当前正在执行的一条指令。
执行一条指令,先把他从程序存储器取到指令存储器中。
指令内容含操作码和地址码,操作码送往指令译码器ID,并形成相应指令的微操作信号,地址码送往操作数地址形成实际的操作数地址。
定时与操作是微处理器的核心部件,他的任务是控制取指令、执行指令、存取操作数或运算结果等操作,向其他部件发出各种微操作控制信号,协调各部件的工作。
AT89S2051单片机内设有振荡电路,只需外接石英晶体和频率微调电容就可产生内部时钟信号。
3.2AT89S2051的引脚
AT89S2051采用引脚双列直插式封装,现将个引脚的功能说明如下:
·Vcc(20):
电源电压端。
·GND(10):
地端。
·RST
(1):
复位输入端。
当RST引脚出现两个机器周期的高电平时,单片机复位。
复位后,AT89S2051内部专用寄存器及I/O口的处置与8051的情况一样,而内部的状态保持不变。
·XTAL1(5):
振荡器反相放大器的输入和内部时钟发生器的输入端。
·XTAL1(4):
振荡器反相放大器的输出端。
·P1口:
P1口是一个8位双向I/O口。
P1.2-P1.3引脚内部接有上拉电阻。
P1.0和P1.1分别作为片内精密模拟比较器的同相输入(AIN0)和反相输入(AIN1)。
P1口输出缓冲器可吸收20mA电流并能直接驱动LED显示。
当P1口的锁存器写入“1”时,P1口可作为输入端。
当引脚P1.2--P1.7用作输入并被外部拉低时,它们将因内部的上拉电阻而流出电流(In)。
P1口还在闪速编程和程序校验期间接受代码数据。
·P3口:
P3口的P3.0-P3.5和P3.7是带有内部上拉电阻的七个双向I/O引脚。
P3.6用于固定输入片内比较器的输入信号并且他作为一通用I/O引脚而不能访问。
P3口缓冲器可吸20mA电流。
当P3口锁存器写入“1”时,它们被上拉电阻拉高并可作为输入端。
用作输入时,被外部拉低的P3口引脚将由于上拉电阻而流出电流(In)。
P3口还接收一些用于闪速存储器编程和程序校验的控制信号。
P3口还用于实现AT89S2051的一些特殊功能。
AT89S2051单片机的引脚图如下:
图3-1AT89S2051引脚图
如上图所示,AT89S2051共有20条引脚。
P1口共8脚,准双向端口。
P3.0~P3.6共7脚,准双向端口,如P3.0、P3.1的串行通讯功能,P3.2、P3.3的中断输入功能,P3.4、P3.5的定时器输入功能。
在引脚的驱动能力上,AT89S2051具有很强的下拉能力,P1,P3口的下拉能力均可达到20mA。
相比之下,AT89S51的端口下拉能力每脚最大为15mA。
但是限定9脚电流之和小于71mA。
这样,引脚的平均电流9mA。
AT89S2051驱动能力的增强,使得它可以直接驱动LED数码管。
AT89S2051的一些功能,它的功耗少,便于携带,更经济使他在发射电路中起着重要的地位。
因此,在本设计红外发射电路中就用了他来实现脉冲信号的产生。
3.3红外发射电路图
通常,红外遥控器将遥控编码脉冲对频率为40KHz(周期为26.3ms)的载波信号进行脉幅调制(PAM),再经缓冲放大后送到红外发光管。
激励红外光二极管产生不同的脉冲,通过空间的传送到受控机的遥控接收器。
P1口作为按键部分,P3.5口作为发射部分,然后用三极管的放大驱动红外发射。
电路如下图所示:
图3-2红外发射电路图
3.4红外接收电路图
在接收过程中,脉冲通过光学滤波器和红外二极管转换为40KHZ的电信号,此信号经过放大,检波,整形,解调,送到解码与接口电路。
如图所示:
图3-3红外接收电路
4系统软件设计
4.1系统的功能实现方法
4.1.1摇控码的编码格式
该遥控器采用脉冲个数编码,不同的脉冲个数代表不同的码,最小为2个脉冲,最大为17个脉冲。
为了使接收可靠,第一位码宽为3ms,其余为1ms,遥控码数据帧间隔大于10ms,如图4-1所示。
4.1.2遥控码的发射
当某个操作按键按下时,单片机先读出键值,然后根据键值设定遥控码的脉冲个数,再调制成40kHz方波由红外线发光管发射出去。
P3.5端口的输出调制波如图4-1所示。
4.1.3数码帧的接收处理
当红外线接收器输出脉冲帧数据时,第一位码的低电平将启动中断程序实时接收数据帧。
在数据帧接收时,将对第一位码的码宽进行验证。
若第一位低电平码的的脉宽小于2ms,将作为错误码处理。
当间隔位的高电平脉宽大于3ms时,结束接收,然后根据累加器A中的脉冲个数,执行相应输出口操作。
图4-2就是红外线接收器输出的一帧遥控码波形图。
4.2发射编码的软件设计
首先,初始化定时器,定时频率为40KHz的时间段。
当按下某一按键时,送数据1,就开始工作。
同时定时器溢出,也就是定时器记满了,执行定时器中断,中断程序如下:
INTT1:
CPLP3.5;40KHZ红外线遥控信号产生
RETI;中断返回
由此就产生了40KHZ的载波信号。
当发送数据0时,定时器不工作。
程序流程图如图4-3和图4-4所示:
4.3接收编码的软件设计
单片机上电复位后,首先对其内部定时器初始化,用定时器及软件计数的方法,当有信号输入时,单片机产生中断,并在P3.1口进行计脉冲个数,测量P3.1高、低电平的宽度。
P3.1引脚平时为高电平,当接收到红外遥控信号时,由于一体化红外接收头的反向作用,INT0引脚下跳至低电平。
图4-5接收编码设计图
5调试结果及其分析
(1)电路要求遥控控制距离为4—6m,在利用38KHz的接收头时,虽然能接收到信号,但是接收的距离很有限。
经过反复调试,换用40KHz的接收头时基本满足了设计需求。
(2)由于将3ms的接收脉冲放在1ms的后面,编码解调出现错误,导致接受端无信号输出。
解决方法是将3ms的接收脉冲放在前面就可以接收到信号。
单片机进行数码帧的接收处理,3ms的脉冲检验,当第一位低电平码的脉宽小于2ms时就会错误处理。
图5-1程序调试图
图5-2硬件电路调试图
6结论
由于目前的遥控装置大多对某一设备进行单独控制,而在本设计中的红外遥控电路设计了多个控制按键,对同一设备的多个功能进行不同的控制。
此设计主要元件是单片机,它是整个硬件及软件设备中最为重要的接合器,它的功能在此次实验中得到有效发挥。
在符合距离范围里,用软件和硬件设备可以实现近距离无线通信,达到信号从设备一端通过红外线发送另一端设备接收的效果,基本符合技术要求。
参考文献:
[1]全国大学生电子设计竞赛组委会.第五届全国大学生电子设计竞赛获奖作品选编[M].北京理工大学出版社,2005年,P10-17.
[2]康华光,陈大钦.电子技术基础模拟部分[M].高等教育出版社,2006年,第五版,P82-155.
[3]康华光,邹寿彬.电子技术基础数字部分[M].高等教育出版社,2006年,第五版,P83-155.
[4]李锦春,蔡仁明.常用晶体二极管、大功率三极管手册[M].人民邮电出版社,1981年,第一版,P23-55.
[5]黄智伟,王彦,陈文光.全国大学生电子设计竞赛训练教程[M].第1版,电子工业出版社,2005年,P304-P314.
[6]吴金戌,沈庆阳.8051单片机实践与应用[M].第1版,清华大学出版社,2002年,P147-167.
[7]何立民.单片机应用系统设计——系统配置与接口技术[M].第2版,北京航空航天大学出版社,1995,P31-175.
[8]张毅刚,彭喜元,彭宇.单片机原理及应用[M].第2版,高等教育出版社,2010年.
附件
红外遥控设计程序代码:
ORG0000H
LJMPSTART
ORG0003H
LJMPINTEX0
ORG0030H
START:
MOVSP,#70H
MOVIE,#00H;关所有中断
SETBEX0;开外中断
SETBEA;总中断允许
MOVP1,#00H
MAIN:
LCALLDELAY;持续512微秒
MOV31H,#00H
MOV30H,P1MOVR7,#08H
XUN:
CLRC
MOVA,30H
RLCA
MOV30H,A
MOVA,31H
ADDCA,#00H
MOV31H,A
DJNZR7,XUNMOVA,31H
SWAPA
MOVP2,A
LJMPMAIN;转MAIN循环
NOP;PC值出错处理
NOP
LJMPSTART;出错时重新初始化;遥控接收程序;采用中断接收
INTEX0:
MOV32H,A
MOV20H,C
CLREX0;关外中断
JNBP3.1,READ1;P3.5口为低电平转READ1
READOUTT0:
SETBEX0;P3.5口为高电平开中断(系干扰)
MOVA,32H
MOVC,20H
RETI;退出中断
READ1:
CLRA;清A
MOVDPH,A;清DPTR
MOVDPL,A;
HARD1:
JBP3.1,HARD11;P3.5变高电平转HARD11
INCDPTR;用DPTR对低电平计数
NOP;1微秒延时
NOP
AJMPHARD1;转HARD1循环(循环周期为8微秒)
HARD11:
MOVA,DPH;DPTR高8位放入A
JZREADOUTT0;为0(脉宽小于8*255=2毫秒)退出
CLRA;不为0,说明是第一个宽脉冲(3毫秒)
READ11:
INCA;脉冲个数计1
READ12:
JNBP3.1,READ12;低电平时等待
MOVR1,#06H;高电平宽度判断定时值
READ13:
JNBP3.1,READ11;变低电平时转READ11脉冲计数
LCALLDELAYREAD;延时(512微秒)
DJNZR1,READ13;6次延时不到转READ13再延时
DECA;超过3毫秒判为结束,减1
DECA;减1
JZFUN0;为0执行FUN0(2个脉冲)
DECA;减1
JZFUN1;为0执行FUN1(3个脉冲)
DECA;
JZFUN8;为0执行FUN8(10个脉冲)
DECA;
JZFUN9;为0执行FUN9(11个脉冲)
DECA;
JZFUN10;为0执行FUN10(12个脉冲)
DECA;
JZFUN11;为0执行FUN11(13个脉冲)
DECA;
JZFUN12;为0执行FUN12(14个脉冲)
DECA;
JZFUN13;为0执行FUN13(15个脉冲)
DECA;
JZFUN14;为0执行FUN14(16个脉冲)
DECA;
JZFUN15;为0执行FUN15(17个脉冲)
NOP;
NOP;
LJMPREADOUTT0;出错退出
FUN0:
CPLP1.0;P0口各端口开关输出控制
LJMPREADOUTT0;转中断退出
FUN1:
CPLP1.1;
LJMPREADOUTT0;
FUN2:
CPLP1.2
LJMPREADOUTT0
FUN3:
CPLP1.3
LJMPREADOUTT0
FUN4:
CPLP1.4
LJMPREADOUTT0
FUN5:
CPLP1.5
LJMPREADOUTT0
FUN6:
MOVP1,#00H
LJMPREADOUTT0
FUN7:
MOVP1,#03FH
LJMPREADOUTT0
FUN8:
CPLP2.6;P2口各端口开关输出控制
LJMPREADOUTT0;转中断退出
FUN9:
CPLP2.5
LJMPREADOUTT0
FUN10:
CPLP2.4
LJMPREADOUTT0
FUN11:
CPLP2.3
LJMPREADOUTT0
FUN12:
CPLP2.2
LJMPREADOUTT0
FUN13:
CPLP2.1
LJMPREADOUTT0
FUN14:
CPLP2.0;P2.0口开关控制
LJMPREADOUTT0;转中断退出
FUN15:
CPLP2.7;亮度调整
LJMPREADOUTT0;中断退出
;;延时255X2=512us;
DELAYREAD:
MOVR0,#0FFH
DELAYR1:
DJNZR0,DELAYR1
RET
DELAY:
MOVR6,#0FFH
DELAY1:
MOVR7,#0FFH
DJNZR7,$
DJNZR6,DELAY1
RETEND