基于51单片机的无线通信设计.docx
《基于51单片机的无线通信设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的无线通信设计.docx(14页珍藏版)》请在冰豆网上搜索。
基于51单片机的无线通信设计
基于51单片机的无线通信设计
LT
红外线接收端主要包括红外线接收模块、解码单片机。
其中红外线接收模块里包括光、电转换放大器、解调电路。
当红外线发射信号进入接收模块后,在其输出端便可以得到原先的数字控制编码,再经过单片机解码程序进行解码,便可以得知按下了哪一按键,从而完成红外线遥控的动作。
功能说明:
选用一种电视机遥控器,再利用接收模块结合单片机解码,控制P1端口所接的8个LED亮或灭。
因此,8个LED的亮或灭的状态,即是显示红外遥控器的按键值。
8个LED视为8位二进制数,其中LED亮视为0,LED灭视为1。
2.2单片机的选用
红外线发射端采用通用的一种红外遥控器(芯片SC9012)。
接收端采用89C51单片机和一体化红外接收头,红外接收头只有3个引脚:
引脚1为数字信号输出端(OUT),引脚2为接地端(GND),引脚3为电源输入(VCC)。
红外接收头与单片机连接非常简单,只需将信号输出端(OUT)与单片机一个I/O引脚连接(P3.2),然后接上电源即可。
单片机主要用于解码,P1端口所接的8个LED用来显示解码后红外遥控器的按键值。
单片机的P2.4引脚通过限流电阻R与三极管基极相接,三极管的集电极接有蜂鸣器。
2.4红外遥控的解码问题
SC9012一帧完整的发射码是由引导码、用户编码和键数据码3部分组成。
编码的格式如图C.3所示。
引导码由一个4.5ms的高电平脉冲及4.5ms的低电平脉冲组成。
八位的用户编码被连续发送两次,八位的键数据码也被发送两次,第一次发送的是键数据码的原码,第二次发送的是键数据码的反码,所以,整个数据编码占用32位。
数据编码方式是通过脉宽调制来实现的,以脉宽为0.56ms,间隔为0.56ms,周期为1.125ms的组合表示二进制的“0”;以脉宽为0.56ms,间隔为1.69ms,周期为2.25ms的组合表示二进制的“1”,其接收端波形如图
单片机解码的关键是如何识别“0”和“1”,从上面遥控码“0”和“1”的波形图中可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,即“1”的高电平宽度是“0”的高电平宽度的3倍。
如果延时0.56ms,则读到的电平为低,说明该位为“0”,反之则为“1”。
或者设计一精确的延时时间,例如以0.093ms延时时间当作基础时间,以调用基础延时时间的次数来计数实际的波形宽度,若读值为6表示波形宽度为0.56ms,若读值为18则表示波形宽度为1.68ms,因此,可以直接通过判断高电平的宽度的计数值是6或是18,来判断接收的原编码为0或1。
三、设计原理图和流程图
根据上面的设计过程,绘制的原理图如下:
四、编程如下:
①.主要标号说明
:
主程序。
:
解码子程序。
:
遥控执行子程序。
:
发声子程序。
:
短暂延时子程序。
:
延时子程序,总延时时间为0.5ms×R5。
:
用于解码延时子程序,延时时间为0.093ms。
②.程序清单
汇编语言编写的LED显示红外线遥控器按键值源程序IR01.ASM代码如下:
01;程序名:
IR01.ASM
02;程序功能:
显示红外遥控器按键值
03;----------------------------程序初始化
04SPKEQUP2.4;压电喇叭信号输入位
05IRINEQUP3.2;红外线IR信号输入位
06IRDZEQU20H;解码数据放置起始地址
07DZ3EQU22H;比较第3字节
08;-------------------------------主程序
09MAIN:
10ACALLFS_SPK;调用发声子程序(79),响一声
11SETBIRIN;IR输入位设置为高电平
12LOOP:
13MOVR0,#IRDZ;设置IR解码起始地址
14ACALLIR_IN;调用解码子程序(25),解码
15ACALLIR_ZX;调用遥控执行子程序(71),执行动作
16JMPLOOP;继续循环执行
17;----------------------------解码子程序
18IR_IN:
;解码子程序
19;确认IR信号出现,避开9毫秒引导脉冲
20L1:
JNBIRIN,L2;等待IR信号出现
21JMPL1
22L2:
MOVR5,#17;避开9毫秒引导脉冲
23ACALLDELAY05_R5
24JBIRIN,L1;确认IR信号出现
25L3:
JBIRIN,L4;等IR变为高电平
26ACALLDEL;调用0.093ms延时程序
27JMPL3
28L4:
MOVR3,#0;8位计数清为0
29;-------------------------------
30;避开低电平,待直接判断高电平
31L5:
JNBIRIN,L6;等IR变为低电平
32ACALLDEL;调用0.093ms延时程序
33JMPL5
34L6:
JBIRIN,L7;等IR变为高电平
35ACALLDEL;调用0.093ms延时程序
36JMPL6
37;-------------------------------
38;通过调用0.093ms延时次数的计数值来判断高电平的宽度,解码0或1
39L7:
MOVR2,#0;0.093ms计数清为0
40L8:
ACALLDEL;调用0.093ms延时子程序
41JBIRIN,L9;等IR变为高电平
42;-----------------------
43MOVA,#8;将A寄存器设置为8
44CLRC;清除借位标志C
45SUBBA,R2;以减法指令SUBB来判断高低位
46MOVA,@R0;R0值为解码内存地址,即取出内存数据给A
47RRCA;将借位标志C右移进入A
48MOV@R0,A;将数据写入内存
49INCR3;R3值加1,处理完一位
50CJNER3,#8,L5;需处理完8位
51;---------------------
52MOVR3,#0;计数清0
53INCR0;R0值加1
54CJNER0,#23H,L5;收集到4字节
55JMPL10
56L9:
INCR2;R2值加1
57CJNER2,#30,L8;计数过长离开
58L10:
59RET;子程序返回
60;---------------------------遥控执行子程序
61IR_ZX:
;遥控执行子程序
62MOVA,DZ3;将第3字节数据赋予A
63MOVP1,A;显示二进制按键值
64ACALLFS_SPK;调用发声子程序,响一声
65RET
66;-------------------------------发声子程序
67FS_SPK:
;发声子程序
68MOVR6,#0
69B1:
ACALLDE
70CPLSPK
71DJNZR6,B1
72MOVR5,#100
73ACALLDELAY05_R5
74RET
75;---------------------------短暂延时子程序
76DE:
;短暂延时子程序
77MOVR7,#180
78DE1:
NOP
79DJNZR7,DE1
80RET
81;------------------------------延时子程序
82DELAY05_R5:
;延时子程序,总延时时间为0.5ms*R5
83MOVR6,#5
84D1:
MOVR7,#10
85DJNZR7,$
86DJNZR6,D1
87DJNZR5,DELAY05_R5
88RET
89;--------------------------解码延时子程序
90DEL:
;用于解码延时子程序,延时为0.093ms
91MOVR7,#22
92E1:
NOP
93NOP
94DJNZR7,E1
95RET
96;-----------------------------------------------------
97END;程序结束
C.1.4代码详解
04~07:
为程序初始化部分。
04:
P2.4为压电喇叭信号输入位,并设定P2.4以SPK表示。
05:
P3.2为红外线IR信号输入位,并设定P3.2以IRIN表示。
06:
20H为解码数据放置起始地址,并设定起始地址20H以IRDZ表
示。
解码数据一共需要占用4字节,即20H、21H、22H、23H。
其中20H
和21H单元放置用户编码,22H单元放置按键数据编码,23H单元放置按键数据码的反码。
07:
22H单元放置的是按键数据编码,并设定22H单元以DZ3表示。
14~21:
为主程序部分。
10:
调用FS_SPK发声子程序,响一声,表示红外线接收开始工作。
11:
将红外线信号输入位设置为高电平。
12:
循环开始。
13:
将20H赋给寄存器R0,设置红外线解码起始地址。
14:
调用IR_IN解码子程序,将接收到的红外线遥控器信号进行解码。
15:
调用IR_ZX遥控执行子程序,将解码后的按键值由LED显示出来。
16:
无限循环执行。
18~59:
红外线接收解码子程序部分。
18:
解码子程序开始。
20~28:
确认IR信号出现,避开9ms引导脉冲。
接收端接收到的引导
码是由一个4.5ms的低电平脉冲及4.5ms的高电平脉冲组成9ms引导脉冲,当IR信号出现后,通过调用DELAY05_R5延时子程序避开9ms引导脉冲。
31~36:
避开低电平,直接判断高电平。
数据“0”和“1”的波形均
以0.56ms的低电平开始,只是高电平的宽度不同,因此,可以避开低电平,直接通过判断高电平的宽度来确定数据“0”或“1”。
39:
R2为计数高低电平宽度的计数器,使计数初始值为0,即从0开
始计数调用0.093ms解码延时的次数。
40:
调用0.093ms延时解码子程序。
41:
如果仍为高电平,则跳转到标号L9处执行,使R2值加1。
43:
将A寄存器设置为8。
44:
清除借位标志C。
45:
指令“SUBBA,R2”中R2为计数值,若出现高电平的宽度
为0.56ms,即数字“0”的特征,则调用6次0.093ms延时便会出现低电平,此时存入R2中的计数值为6。
若出现高电平的宽度为1.68ms,即数字“1”的特征,则需要调用18次0.093ms延时才能出现低电平,此时存入R2中的计数值为18。
所以,R2中计数值是6还是18,就决定编码“0”或是“1”。
A寄存器设置为8,当R2值为6时,“8-R2”无产生借位,借位标志C=0,表示编码为0。
当R2值为18时,“8-R2”产生借位,借位标志C=1,表示编码为1。
46:
R0以间接寻址方式取出内存数据给A。
47:
右移指令,将借位标志C右移进入A寄存器中。
48:
将数据写入内存内。
49:
R3值加1,处理完一位。
50:
一字节需收集完8位数据。
52~55:
需要收集到4字节。
56:
R2值加1。
57:
计数过长自动离开。
59:
解码子程序返回。
61~65:
遥控执行子程序。
62:
将第3字节的内容,即解码后的红外按键编码数据送入寄存器A中。
63:
将寄存器A中的内容送入P1端口输出,由8个LED显示二进制
按键值。
64:
调用发声子程序,响一声。
65:
遥控执行子程序返回。
67~74:
发声子程序。
76~80:
短暂延时子程序。
82~88:
延时子程序,总延时时间为0.5ms×R5。
90~95:
用于解码延时子程序,延时为0.093ms。
97:
程序结束。
小结
基于89C51单片机以及红外编码芯片SC9012设计的红外线遥控系统,结构简单、价格低廉,系统稳定性好,电路及控制程序略加改变即可运用于各种不同的家用电器的红外线遥控系统中。
通过本课程设计,进一步熟悉和掌握单片机的结构及工作原理。
掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。
通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应的工作打下基础。
参考文献
1、《8051单片机课程设计实训教材》,陈明荧,清华大学出版社
2、《数字电子技术》,阎石,高等教育出版社
3、《模拟电子技术》,童诗白,高等教育出版社
4、《单片机课程设计指导》,谭浩强,清华大学出版社
5、《MCS-51单片机应用设计》,张毅刚,哈工大出版社
6、《单片机原理实验教程》,薛庆军、张秀娟,北京航空航天大学出版社