基于51单片机串行通信的无线发射极和接收机设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机串行通信的无线发射极和接收机设计---- 1 概述
1.1 课题的目的、背景和意义
最近几年来,由于无线接入技术需求日益增大,以及数据交换业务(如因特
网、电子邮件、数据文件传输等)不断增加,无线通信和无线网络均呈现出指数增
加的趋势。
有力的推动力无线通信向高速通信方向发展。
然而,工业、农业、车载
电子系统、家用网络、医疗传感器和伺服执行机构等无线通信还未涉足或者刚刚涉
足的领域,这些领域对数据吞吐量的要求很低,功率消耗也比现有标准提供的功率
消耗低。
此外,为了促使简单方便的,可以随意使用的无线装置大量涌现,需要在
未来个人活动空间内布置大量的无线接入点,因而低廉的价格将起到关键作用。
为
降低元件的价格,以便这些装置批量生产,所以发展了一个关于这种网络的标准方案。
Zigbee就是在这一标准下一种新兴的短距离、低功耗、低数据传输的无线网
络技术,它是一种介于无线标记技术和蓝牙之间的技术方案。
对于这种短距离、低功耗、低数据传输无线技术,它不仅在工业、农业、军
事、环境、医疗等传统领域有着巨大的应用价值,未来应用中还可以涉及人类日常
生活和社会生产活动的所有领域。
由于各方面的制约,这种技术的大规模商业应用
还有待时日,但已经显示出了非凡的应用价值,相信随着相关技术的发展和推进,
一定会得到更广泛应用。
1.2国内外无线技术相关现状及Zigbee现状
无线通信从固定方式发展为移动方式,移动通信发展至今大约经历了五个阶段: 第一阶段为20年代初至50年代初,主要用于舰船及军有,采用短波频及电子
管技术,至该阶段末期出现才出现150MHVHF单工汽车公用移动电话系统MTS。
第二阶段为50年代到60年代,此时频段扩展至UHF450MHZ器件技术已向半导体过渡,大多为移动环境的专用系统,并解决了移动电话与公用电话的接续问题。
第三阶段为70年代初至80年代初频段扩展至800MHZ,美国Bell研究所提出蜂窝系统概念并于70年代末进行了AMPS试验。
-
----
第四阶段为80年代初至90年代中,为第二代数字移动通信兴起与大发展阶段,并逐步向个通信业务方向迈进,此时出现D-AMPS、TACS、ETACS、GSM\DCS、cdmaone、PDC、,,,、DECT、PACS、PCS、等各类系统与业务运行。
第五阶段为90年代中至今,随着数据通信与多媒体业务需求的发展,适应移动数据、移动计算及移动多媒体运作需要的第三代移动通信兴起,其全球标准化及相应融合工作与样机研制和现场试验工作在快速推进,包括从第二代至第三代移动通信的平滑过渡问题内。
近10年来,我国在移动通信领域的科研、设备生产等方面也取得了可喜的进步,国产移动通信设备交换系统、基站和手机等都已经投入生产,并陆续投方市场,第三代移动通信系统的开发和研究也正与世界同步。
21世纪的电信技术正进入一个关键的转折期、未来十年将是技术发展最为活跃的时期。
信息化社会到来以及IP技术兴起,正深刻地改变着电信网络的面貌以及未来技术发展走向,未来无线通信技术发展主要趋势是宽带化、分组化、综合化、个人化。
无线技术也分不同种类,通常以产生无线信号的方式来区分,目前主要的方式有调频无线技术、红外无线技术和蓝牙无线技术三种,其成本和特点也不尽相同。
广泛应用于音响键鼠等各项内容,有很好的发展。
而所谓无线技术,就是通过发射模块,以波的形式由接收模块接收,之后把发射的内容解调出来。
Zigbee无线
技术是一种介于无线标记技术和蓝牙之间的技术方案,Zigbee是一种高可靠的无线数传网络,类似于GSM(全球移动通信)和CDMA(数字通信中出现的一种先进无线扩频通信技术),Zigbee模块类似与移动网络基点,Zigbee技术是建立在
IEEE802.15.4标准上,为了促进Zigbee技术发展,2001年8月成立Zigbee联盟,2002年下半年,英国invensys公司、日本三菱电子公司、摩托罗拉电子公司以及荷兰飞利浦半导体公司四大巨头共同宣布,它们将加入“Zigbee联盟”,目前该联盟已经有150家成员,以研发名为Zigbee的下一代无线通信为标准。
其功能超越蓝牙简单而实用,大规模简化蓝牙的复杂,专注于低传输应用,但是Zigbee不支持语音,而其低功耗、低价格和可靠是它的亮点,让它超越蓝牙简单而实用。
预计在未来Zigbee无线传输将大规模占领市场。
1.3 课题任务要求
(1)实现Zigbee无线模块间的无线通信;
(2)发射模块间传输距离大于100米;
(3)发射模块间可以实现点对点和广播传输数据,即有相同的通信协议;
-
---- (4)传输数据在PC或1602液晶屏上显示出来;
(5)个人电脑内对单片机的控制;
(6)实现单片机对zigbee模块的控制与设置;
(7)与同一课题并采用zigbee方案的其他小组组成小型局域网络,相互通信。
-
---- 2 技术方案
如下图所示,此次技术方案是:应用Zigbee模块的接收与发送数据功能,对数据的接收与发送,Zigbee模块连接在单片机功能引脚TXD、RXD,这样可以对传送数据处理,用单片机的I/O口连接上液晶显示屏可以对接收与发送的数据显示,串
口连接上单片机与PC机相连,可对单片机输入程序控制和输入发送数据。
基于stc89C52单片机组成的系统,对zigbee和1602液晶屏进行控制和通信。
Zigbee模块液晶显示器
单片机控制电源电路系统
串口pc机
其他无线模块
图2-1 技术方案框图
2.1 芯片选择
Zigbee模块
型号:DRF1605,主要功能:串口(UART)转Zigbee无线数据透明传输。
-
----
这次我们实习无线接受与发送运用Zigbee模块,Zigbee模块接收与发送是这样的:Zigbee模块有两种节点模式,一种是coordinator(主节点),另一种
Router(从节点),这两种节点可以有各自的PAN ID(地址),Zigbee模块出厂默认地址是Router一种,可以用软件修改其PAN ID,当有一个coordinator节点时,其他的Router可以与其连接,当很多Router节点在这coordinator节点连接时,就可以形成一个网络,在这网络中任意节点可以相互传输数据。
Zigbee模块传输数据有两种方式:一种数据透明传输,另一种是数据点对点传输,所谓透明传输,就是coordinator主节点这网络上发送数据时,任意Router都能接收到发送的数据;而点对点传输,就是在coordinator网络发送数据时,任意两个节点间发送数据,只能这两节点收到数据。
图2.2 Zigbee结构及引脚定义图
转串口芯片
选用MAX232。
RS232C是一种电压型总线标准,可用于设计计算机接口与终端或外设之间的连接,以不同的极性的电压表示逻辑值。
-3至-25表示逻辑“1”,+3至+25表示逻辑“0”,其电平是TTL和CMOS电平是不同的,所以在通信时必须进行转换。
MAXIM公司的MAX232接收/发送器是MAXIM公司特别为满足EIA/TEA2232的标准而设计的,它们具有功耗低、工作电源为单电源、外接电容仅为0.1uF或1uF的电容,其价格低,可在一般需要串行通信的系统中使用。
MAX232引脚C1+与C1-、C2+与C2-、V+与VCC、V-与GND之间的4个0.1uF的电容不可缺少,一般选用陶瓷介质的电容。
-
----
MAX232可以用作单片机和单片机之间、单片机和PC机串口之间的符合RS232串行接口电路。
只要将待进行串行传输的设备的发送和接收端相应的接上,编程即可[3]。
图 2.4 Max232内部结构及一家定义
STC89C52单片机
控制核心单片机选用STC89C52,完全能满足本系统要求。
表 2.11 P3口功能引脚
端口引脚第二功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 (外部中断0) INT0
P3.3 (外部中断1) INT1
P3.4 T0(定时器0)
P3.5 T1(定时器1)
P3.6 (外部数据存储器写选通) WR
P3.7 RD(外部数据存储器都选通)
-
---- 3. 硬件设计
3.1 Zigbee模块引脚连接设计
图 3.1 Zigbee模块电路图
3.2 Zigbee模块电源设计
Zigbee模块电源采用的是3.3v直流电,电路中直接采用四个电容滤波,用芯片LM1117-3.3稳压得到。
单片机系统采用的是5V直流电,用7805稳压芯片可得。
-
----
图3.2 电源电路3.3V
图3.3 电源电路 5V 3.3 单片机设计电路
图 3.4 单片机连接图-
---- 3.4 串口电路设计
图 3.5 串口电路
-
---- 4.软件设计
4.1软件功能说明
按本课题设计要求,程序所要实现的功能如下:
1)、实现1602液晶屏实时显示系统状态,提供较好的人机界面;
2)、实现通过按键设置Zigbee模块的工作模式,即给zigbee发送命令,zigbee工作状态及命令见附录;
3)、用预先定好的通信协议进行数据的收发控制,实现点对点通信和广播数据,并在1602显示系统的工作状态。
4.2软件总流程图
个人电脑无线通信系统
功能键单片机
LED1602显示 Zigbee无线收发模块
其他无线收发模块
图4-1整体思路
-
----
按上图设计思路编写程序,程序流程图如下:
开始
初始化
1602液晶设置Zigbee程功能键扫描程序
显示程序序
与无线模块的数据传
输控制程序
图4-2 程序流程图
4.3各功能软件
4.4软件测试
4.5 软件设计总结
-
---- 5.通信协议
5.1模块说明
这次实习,我们用的是ZigBee模块,DRF系列ZigBee模块目前包括
DRF1601、DRF1602、DRF1605、DRF1605H、DRF2617-ZR232、DRF2618-ZUSB、
DRF2619-ZR485及相关配套底板,它是基于TI 公司CC2530F256芯片,运行ZigBee2007/PRO协议的ZigBee模块,它具有ZigBee协议的全部特点,这有区别于其它种类的ZigBee模块。
其主要特点包括:
(一)自动组网:所有的模块上电即自动组网,Coordinator 自动给所有的节点分配地址,不需要用户手动分配地址,网络加入、应答等专业 ZigBee组网流程;
(二)简单数据传输:
串口数据透传:Coordinator 从串口接收到的数据会自动发送给所有的节点,某个节点从串口接收到的数据,会自动发送给Coordinator。
通过串口即可在任意节点间进行数据传输,数据传输的格式为:0xFD(数据传输命令)+ 0x0A(数据长度) + 0x73 0x79(目标地址) + 0x01 0x02 0x03 0x04 0x05 0x06
0x07 0x08 0x09 0x10(数据,共0x0A Bytes);
(三)唯一IEEE地址:DRF 系列模块采用的TI CC2530F256 芯片,出厂时已经自带IEEE地址,用户无需另行购买IEEE地址,IEEE 地址(MAC地址)可作为ZigBee 模块的标识;
(四)用户可更改节点类型:用户可通过串口指令更改模块的节点类; (五)用户可更改无线电频道:用户可通过串口指令更改模块使用的无线电频道。
(六)简单易用:用户不用考虑ZigBee协议,像使用串口线一样使用无线模块 5.2 ZigBee模块参数
(1)电气参数:
输入电压:DC 3.3V
温度范围:-40C --85C
串口速率:38400bps(默认),可设置9600bps,19200bps, 38400bps,
-
---- 115200bps
无线频率:2.4GHz
无线协议:ZigBee2007 /PRO
传输距离:可视距离400米
发射电流:34mA( 最大)
接收电流:25mA(最大)
低功耗模式:该款模块没有低功耗模式,客户可定制低功耗应用
接收灵敏度:-96DBm
主芯片:CC2530F256,256K Flash,TI公司最新一代ZigBee SOC芯片 (2)机械参数:
图5.2.1 机械参数
-
----
图5.2.2 机械参数
5.3 Zigbee模块的组网
Zigbee网络通常由三种节点构成:Coordinator:用来创建一个Zigbee网络,并为最初加入网络的节点分配地址,每个Zigbee网络需要且只需要一个Coordinator;Router:也称为Zigbee全功能节点,可以转发数据,起到路由的作用,也可以收发数据,当成一个数据节点,还能保持网络,为后加入的节点分配地
址;End Device:终端节点,通常定义为电池供电的低功耗设备,通常只周期性发送数据,不接收数据。
Zigbee模块的主要功能是无线数据传输,即,每个节点随时能够收发数据,所以节点的配置只有Coordinator,Router,连接的网络如下图所示,这样的网络通常也称为MESH网(即:网状网),每个节点可以收发数据,同时也能担任其它节点的路由器,而且,所有的数据传输路由都是自动计算的,无需用户干预。
第一次使用Zigbee模块时,请先给Coordinator上电,然后给Router上电,Router上电后,会自动寻找Zigbee网络并加入,可以使用TI的Sensor Monitor软件来观察Zigbee网络的形态。
-
----
图5.3.1 Zigbee mesh 网络
图5.3.2 Zigbee网络节点个数
5.4 Zigbee模块的数据传输
DRF1600 系列Zigbee 模块数据传输功能非常简单易用,有二种数据传送方式: (1)数据透明传输方式:
只要传送的第一个字节不是0xFE,0xFD 或 0xFC,则自动进入数据透明传输方式;
Coordinator从串口接收到的数据,会自动发送给所有的节点;某个节点从串口接收到的数据,会自动发送到Coordinator;
(2)点对点数据传输方式:
-
----
Zigbee网络内的任意节点之间,可通过点对点传输指令,传送数据;指令格式:0xFD + 数据长度 + 目标地址 + 数据
1、数据透明传输:(数据透明传输是DRF1600系列模块的最重要功能) (1)只
要传送的第一个字节不是0xFE,0xFD 或 0xFC,则自动进入数据透明传输方
式;(扩展:只要数据包的头与设置指令不一样,也会当成数据透明传输)
(2)Coordinator从串口接收到的数据,会自动发送给所有的节点;某个节点从串口接收到的数据,会自动发送到Coordinator;
(3)任意一个节点与Coordinator之间,类似于电缆直接连接;
(4)支持数据包变长(无需设置),最大不超过256字节/数据包,一般每个数据包32字节之内。
图5.4.1 数据透明传输:Coordinator发送至所有节点
图5.4.2 数据透明传输:某个节点发送至Coordinator
-
----
表5.4.1 数据透明传输的性能
数据传送方向数据包长度最快间隔
Router,Coordinator 20 ms 16字节
20 ms 32字节
20 ms 64字节
50 ms 128字节
200 ms 256字节
> 256字节不能传输
Coordinator,Router 100 ms 16字节
100 ms 32字节
100 ms 64字节
200 ms 128字节
500 ms 256字节
> 256字节不能传输
测试条件:
1,室温,实验室条件
2,模块间距离2米,信号良好
3,串口波特率38400(最优选波特率)
4,连续发送,接收100K字节,无误码,连续测试10次
5,测试软件:串口调试助手SSCOM3.2
随着模块之间的传输距离增加,传输速率会降低
Coordinator发送到Router是广播方式发送,传输速率会比较慢一般应用,建议每个数据包32字节,间隔200-300ms传输 2 、点对点数据传输方式: 以下图为例,简述点对点数据传输方式:(数据从0x50F5传送至0x143E) -
----
图5.4.3 点对点传输
发送指令格式:数据传送指令(0xFD)+ 数据长度+ 目标地址+ 数据(最多32 Bytes)
数据长度在32 字节内支持变长。
如发送:
0A14 3E01 02 03 04 05 06 07 08 09 10 FD:数据传输指令
0A:数据区数据长度,共10 个字节
14 3E:目标地址
01 02 03 04 05 06 07 08 09 10:数据
接收数据格式:接收到发送方的全部数据,并在最后增加来源地址(二个字节)
如接收到的数据为:
0A14 3E01 02 03 04 05 06 07 08 09 1050 F5 FD:数据传输指令
-
---- 0A:数据区数据长度,共10 个字节
14 3E:发送方的目标地址,接收方本身地址
01 02 03 04 05 06 07 08 09 10:数据
50 F5:发送方的地址,即数据来源地址
点对点数据传输可在网络内任意节点之间进行:
1,即使Coordinator 断电,也可在Router 之间通过点对点指令传输; 2,Router 加入网络后,地址(Short Address)不会发生改变; 3,长度字节一定要等于数据区数据长度,否则数据传输出错(当成透明传输,发送给了Coordinator);
4,数据区数据最多32 字节,否则数据传输出错(当成透明传输,发送给了Coordinator);
5,目标地址 = FF FF,则为广播发送,会发送至网络内所有节点; 目标地址= 00 00,则发送给Coordinator
表5.4.2点对点数据传输性能
数据传送方向数据包长度最快间隔
Router,Router 40 ms 32字节
Coordinator,Router 40 ms 32字节
Router,Coordinator 40 ms 32字节
测试条件:
1,室温,实验室条件
2,模块间距离2米,信号良好
3,串口波特率38400(最优选波特率)
4,连续发送,接收100K字节,无误码,连续测试10次
5,测试软件:串口调试助手SSCOM3.2
5.5 怎样使用配置软件
配置软件是用来设定及读取模块的基本参数;模块可设置4个参数:PAN ID、波特率、节点类型、无线频道;
-
---- PAN ID:
同一个网络内的每个节点具有相同的PAN ID,不同的网络之间PAN ID是不同的,在同一空间,二个不同PAN ID 的网络是不会相互影响的;
图 5.5.1 同一网络内的节点具有相同的PAN ID 对于Coordinator:
(1)设定新的PAN ID,重启,则马上读取为新的PAN ID;
(2) 设定新的PAN ID后,则以前储存在Coordinator内的网络信息会全部清空,重启后,Coordinator会重新创建一个网络;
(3)对于一个已经存在的网络,重新设定Coordinator的PAN ID为同样的值,
重启,此时,Coordinator里的网络值会被全部清空,由于以前的网络仍然存在,
此时的Coordinator的PAN ID会自动加1,避免PAN ID冲突;
对于Router:
(1)设定新的PAN ID,重启,如果读取为FF FE,表示Router还没有加入网络;
(2)设定新的PAN ID,重启,如果读取为新的PAN ID,表示Router已经加入网络;
(3)设定新的PAN ID为FF FF,重启,Router会自动寻找网络并加入;
-
---- (4)设定新的PAN ID为FF FF,重启,Router会自动寻找网络并加入,
在没有加入网络之前,读取的值为FF FE;
波特率:
与模块直接连接的设备的硬件波特率,同一个网络内,多个Zigbee模块与多
个设备连接,并不需要全网具有同样的波特率,只要模块与设备之间具有相同的波特率即可
图5.5.2 具有相同的波特率
模块的波特率重新设定后,需重启生效。
5.6 Zigbee模块网络特性
1,每个Coordinator允许6个Router加入网络,并为其分配地址,每个Router又能允许6个Router加入网络并为其分配地址,总共6层深度,最多支持9330个节点 2,Coordinator是用来创建网络的,第一次使用时,Coordinator需要先上电; 3,一个Zigbee网络形成后,即使Coordinator断电,Router之间也能通讯; 4,一个Zigbee网络形成后,即使Coordinator断电,新的节点也能通过已入网的Router加入,由这个Router为其分配地址;
5,Zigbee网络创建完成后,这个网络内Router的地址(Short Address)是不变的,但是,这个节点加入到了其它的网路,则有新的网络为其分配地址,地址会变的,不
-
---- 建议将Short Address作为模块的标识;
6,Zigbee模块的MAC地址(IEEE地址)是全球唯一的,可以作为模块的标识;
5.7 Zigbee模块的设置
表5.7.1设置指令
序号指令功能返回是否重启 1 FC 02 91 XX XX 设定模块的PAN ID为特定值
01 XX XX XX XX 如:输入:FC 02 91 01
XY 1,如果将模块的PAN ID设12 34 D6返回:12 34 (XY =前定为FF FF:
6个字节如果是Coordinator,重启
的和,保后自动产生一个新的
PAN ID 留低8
位,下同) 如果是Router,重启后自
动寻找新的网路加入
不可以设定为FF FE
2,重设PAN ID后(或同样是
的值重设后)
如果是Coordinator,会清
除已加入网络的节点,如
果是Router,清除已加入
的网络,重新寻找并加入
网络
2 FC 00 91 读取模块的PAN ID值模块的PAN ID值1,否
03 A3 B3 如果Router还没加入
XY 网络,读取的值FF FE
2Coordinator读取为
设定值
3 FC 00 91 Short Address 读取模块的Short Address否-
---- 04 C4 D4 (模块在网络内的地址) 1,如果模块还没有XY 加入网络,读取的
值为FFFE
2, 2, Coordinator
的地址永远是00
00
4 FC 01 91 00 00 09 06 00 00 设置模块的串口波特率否 06 XX F6 00 01 09 02 00 00 XX = 01:设定为9600
XY 00 03 08 04 00 00 XX = 02:设定为19200
00 05 07 06 00 00 XX = 03:设定为38400
01 01 05 02 00 00 XX = 04:设定为57600
XX = 05:设定为115200
XX=其它
5 FC 00 91 测试串口波特率如果串口波特率正是 07 97 A7 确,返回:, 01 02 03 04 XY 05
如果串口波特率错
误,无返回
6 FC 00 91 读取模块的MAC地址 8个字节的MAC地址否 08 A8 B8 如:00 12 4B FF 56 78
XY FE FF
7 FC 01 91 设置模块的无线频道: 返回: 0C XX 1A XX = 0B:设定为Channel 11,
XY 00 08 00 00 0B 频率:2405MHz
XX = 0C:设定为Channel 12,
00 10 00 00 0C 频率:2410MHz XX = 0D:设定为Channel 13,00 20 00 00 0D 频率:2415MHz XX = 0E:设定为Channel 14,00 40 00 00 0E 频率:2420MHz XX = 0F:设定为Channel 15,
-
----
00 80 00 00 0F 频率:2425MHz XX = 10:设定为Channel 16,00 00 01 00 10 频率:2430MHz XX = 11:设定为Channel 17 00 00 02 00 11 频率:2435MHz XX = 12:设定为Channel 18 00 00 04 00 12 频率:2440MHz XX = 13:设定为Channel 19 00 00 08 00 13 频率:2445MHz XX = 14:设定为Channel 20 00 00 10 00 14 频率:2450MHz XX = 15:设定为Channel 21 00 00 20 00 15 频率:2455MHz XX = 16:设定为Channel 22,00 00 40 00 16 频率:2460MHz XX = 17:设定为Channel 23,
00 00 80 00 17 频率:2465MHz
XX = 18:设定为Channel 24,
00 00 00 01 18 频率:2470MHz
XX = 19:设定为Channel 25,
00 00 00 02 19 频率:2475MHz
XX = 1A:设定为Channel 26,
00 00 00 04 1A 频率:2480MH
8 FC 00 91 读取模块的无线频道返回: 否0D 34 2B 00 00 08 00 52 0B
XY 00 00 10 00 52 0C
00 00 20 00 52 0D
00 00 40 00 52 0E
00 00 80 00 52 0F
00 01 00 00 52 10
00 02 00 00 52 11
-
----
00 04 00 00 52 12
00 08 00 00 52 13
00 10 00 00 52 14
00 20 00 00 52 15
00 40 00 00 52 16
00 80 00 00 52 17
01 00 00 00 52 18
02 00 00 00 52 19
04 00 00 00 52 1A
9 FC 00 91 读取模块的节点类型如果是Coordinator,否 0B CB EB 返回: 43 6F 6F 72 64
XY 69
如果是Router,返回:
52 6F 75 74 65 72
10 FC 01 91 设定模块的数据传输方式: XX: 00 – 04 共5否 64 58 XX XX = 00:保留(目前为透明个值,超出范围当成XY 传输) 透明传输数据XX = 01:透明传输
XX = 02:在数据包最后增指令正确返回:
06 07 08 09 0A XX 加模块的短地址(Short
Address,2
个字节) 如果写入不成功:
16 17 18 19 1A FF XX = 03:在数据包最后增加
模块的MAC地址(8个字节)
XX = 04:保留(目前为透明
传输)
11 FC 00 91 模块软件重启 1秒后系统重启成功 87 6A 35
XY
-
---- 6.性能测试
6.1 测试方法
本次测试是直接通过已经调试好的Zigbee模块两台机子来测试,测试模式为点对点数据传输,测试主要是通过主机向从机发送信息,从机收到信息并向主机发送短信已经接受到,这样测试成功,这样进行多次测试,测试如下表;主机与从机反过来再测试一次得到一个表格。
表6.1 测量结果
序号|测量0.5 1 2 5 7 10 范围(m)
1 成功成功成功成功成功成功
2 成功成功成功成功成功成功
3 成功成功成功成功成功成功
4 成功成功成功成功成功成功
5 成功成功成功成功成功成功
表6.2 主机与从机反过来测试
序号|测量0.5 1 2 5 7 10 范围(m)
1 成功成功成功成功成功成功
2 成功成功成功成功成功成功
3 成功成功成功成功成功成功
4 成功成功成功成功成功成功
5 成功成功成功成功成功成功
-
----
表6.3 主从机子间隔着一堵墙测试
序号|测量0.5 1 2 5 7 10 范围(m)
1 成功成功成功成功成功成功
2 成功成功成功成功成功成功
3 成功成功成功成功成功成功
4 成功成功成功成功成功成功
5 成功成功成功成功成功成功
-
---- 参考文献
[1] 王贤勇《单片机原理及接口技术应用教程》,-5版.-北京:清华大学出版社,2007. [2] 谭浩强《c语言程序设计》,-3版.-北京:清华大学出版社,2007.
[3] 汪德彪《MCS-51单片机原理及接口技术》,-5版.-北京:电子工业出版社,2007. [4] 吴黎明《单片机原理及应用技术》,-1版.-北京:科学出版社,2005.
[5] 李光才楼然笛《单片机课程设计实例指导》,北京:北京航空航天大学出版社,
2004.
[6] 石宗义《电路原理图与电路板设计教程Protel 99SE》,北京希望电子出
版社, [7] 梅丽凤王艳秋,任国臣,汪毓铎《单片机原理及接口技术》清华大学出版社 [8]郭天祥 51单片机c语言教程电子工业出版处
[9]李文仲,段朝玉,《PIC单片机与Zigbee无线网络实战》,北京:北京航空
航天大学出版社
[10] 杨欣,莱?诺克斯,王玉凤,刘湘黔《电子设计从零开始》,-第二版,-北京:
清华大学出版社,2010.10
-
----
附录1.总原理图
-
----
附录2.PCB布线图
-
----
附录3.我们的作品
-
----
附录4.与其他小组调试照片
-
---- 附录5.源代码
#include<reg52.h>
//#include<stdlib.h> //用随机函数,发送随机数据#define uint unsigned int
#define uchar unsigned char
uintLED_Buffer[16], com_dat, *q;
uchar FF;
void wdata(ucharsj); //输入数据
void wcom(uchar or);//输入命令
voidnint();
voidkeyscan();
void keyscan1();
void L1602_char(ucharhang,ucharlie,char sign); void
L1602_string(ucharhang,ucharlie,uchar *p); voidprint_data(uint
*num,uchari);
voidyanshi(uinti);
void sent(uintss[],ucharnum);
sbitrs=P3^7;
sbitlede=P3^6;
sbit set=P3^5;
sbit key1=P3^4;
sbit key2=P3^3;
sbit key3=P3^2;
uintflat,n,num,KKK,jj,sb;
//ucharm,shi,fen,miao,ge,si,qq,dd;
uint code cz1[]={0xbd,0x68,0x7d,0xbf,0xfe,0x52,0x6c,0x19,0x10,0xea, 0xFF,0x2b,0x90,0xa4,0xd8,0xaa,0x30,0x20,0xb0,0x8d,0xa9};
uint code pp[]={0XFD,0X04,0X00,0X00,0xcc,0xb5,0x89,0x64};
uint code pp1[]={0XFD,0X02,0X00,0X00,0x00,0x00};
-
---- uint code pp2[]={0XFD,0X04,0X00,0X00,0xcc,0xb5,0x89,0x64};
uint code pp3[]={0XFD,0X04,0X00,0X00,0xcc,0xb5,0x89,0x64};
int number2;
uchar code s1[]=" Auto Search net"; uchar code s2[]=" Set PAN ID "; uchar code s3[]=" Set node type "; uchar code s3a[]="Set Coordinator"; uchar code s3b[]=" Set as Router "; uchar code s4[]=" Read short add ";
uchar code s[]=" ok! "; uchar code s5[]=" Set send type "; uchar code
s6[]=" Restart! "; uchar code s33[]=" Read PAN ID "; uchar code
r[]="Received data: "; uchar code rss[]="Received succeed "; uchar code tt[]=" Broadcast "; uchar code ts[]=" Sent succeed "; uchar code ret[]=" "; uint code com1[]={0xFC,0x02,0x91,0x01,0xFF,0xFF,0x8E};//自动搜索网络uint code com2[]={0xFC,0x02,0x91,0x01,0x56,0x34,0x1A}; //ID 56 34 uint code com3a[]={0xFC,0x00,0x91,0x09,0xA9,0xC9,0x08};//设为Coordinator uint code com3b[]={0xFC,0x00,0x91,0x0A,0xBA,0xDA,0x2B};//设定为Router uint code com3[]={0xFC,0x00,0x91,0x03,0xA3,0xB3,0xE6};// 读
模块PAN ID uint code com4[]={0xFC,0x00,0x91,0x04,0xC4,0xD4,0x29};//读取模块的 Short Address(模块在网络内的地网络内的地址)
//uint code com5[]={0xFC,0x00,0x91,0x08,0xA8,0xB8,0xF5}; //读MAC地
址 uint code com5[]={0xFC,0x01,0x91,0x64,0x58,0x01,0x4B};//设定为透明传输方式 uint code com6[]={0xFC,0x00,0x91,0x87,0x6A,0x35,0xB3};//模块软件重启
//////////////////////////////////////// void main()
{
nint();
-
----
//***********************************************
// P1=0x00;
wcom(0x01);
com_dat = 0;
FF=0;
flat=0;
while(1)
{
if(FF==1)
{
FF=0;
yanshi(200);
q = LED_Buffer;
// L1602_string(2,1,q);
L1602_string(1,1,r);
print_data(q,com_dat);
if(KKK==1&&jj!=1)
{ KKK=0;
sent(LED_Buffer+8,2);
//if(jjj==1)
// {
L1602_string(1,1,rss);
yanshi(200); yanshi(200);
// jjj=0;
//////////////////////////////////////////////////////////////////// //
//}
}
}
if(sb==1) sent(pp1,6);
// if(jj==1)jj=0;
com_dat=0;
if(set==0)
-
----
{
yanshi(10);
if(set==0)
{
while(!set);
flat++;
if(flat==10) ///功能选择标识flat flat=0;
}
}
keyscan();
if(key3==0)
{
yanshi(10);
if(key3==0)
sent(cz1+num,4);
num=num+4;
if(num==16)num=0;
while(!key3);
L1602_string(1,1,tt);
yanshi(200); yanshi(210);
}
/////////////////
if(key2==0)
{
yanshi(10);
if(key2==0)
{ sent(pp,8);
yanshi(200);
if(jj==1){ jj=0;L1602_string(1,1,ts);yanshi(250);} else
sent(pp,8);
-
----
// yanshi()
}
}
}
}
void wcom(uchar or)//输入命令
{
rs=0;
P1=or;
yanshi(4);
lede=1;
yanshi(4);
lede=0;
}
void wdata(ucharsj)//输入数据
{
rs=1;
P1=sj;
yanshi(5);
lede=1;
yanshi(5);
lede=0;
}
//初始化
voidnint()
{//1602
wcom(0x38);
wcom(0x0c);
wcom(0x06);
wcom(0x01); //串口
TMOD=0x20; //设置定时器1为工作方式 2
-
----
PCON=0x00;
TH1=0Xfd; //波特率9600 晶振11.0592MHz
TL1=0XFD;
REN=1; //串口允许接收
SM0=0; //设置串口工作方式
SM1=1;
EA=1; // 开中断
ES=1;
TR1=1;
}
void L1602_string(ucharhang,ucharlie,uchar *p) {
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
// wcom(0x01);
wcom(a);
while(1)
{
if(*p =='\0') break;
wdata(*p);
p++;
}
}
voidprint_data(uint *num,uchari)
{
int k;
// L1602_string(2,1,ret);
wcom(0xc0);
for(k=0;k<i;k++)
{
-
----
if((*num>>4)>=10)
wdata('7'+(*num>>4));
else
wdata('0'+(*num>>4));
if((*num&0xf)>=10)
wdata('7'+(*num&0xf));
else
wdata('0'+(*num&0xf));
num++;
}
}
//********MCU发送************** void sent(uintss[],ucharnum)
{
uchar n;
REN=0;
for(n=0;n<num;n++)
{
SBUF=ss[n];
while(!TI);
TI=0;
}
REN=1 ;
}
//***************** *************** voidkeyscan()
{
uchar m=0;
if(flat==1) ///自动搜索网络
{
L1602_string(1,1,s1);
-
----
if(key1==0)
yanshi(10);
if(key1==0)
{
sent(com1,7);
while(!key1);
L1602_string(2,2,s);
yanshi(250);
flat=0;
}
}
if(flat==2) //////////////////////////ID 56 34 { //
L1602_string(1,1,s2);
//L1602_string(1,2,ret);
if(key1==0)
yanshi(10);
if(key1==0)
{
sent(com2,7);
while(!key1);
L1602_string(2,2,s);
yanshi(250);
flat=0;
}
}
///////////////////
if(flat==3)
{//
L1602_string(1,1,s3);
-
----
}
if(flat==4) // 设为 Coordinator { //
L1602_string(1,1,s3a);
//L1602_string(1,2,ret);
if(key1==0)
yanshi(10);
if(key1==0)
{
sent(com3a,7);
while(!key1);
L1602_string(2,2,s);
yanshi(250);
flat=0; //flat=0;
}
}
if(flat==5) // //设定为Router {
L1602_string(1,1,s3b);
//L1602_string(1,2,ret);
if(key1==0)
yanshi(10);
if(key1==0)
{
sent(com3b,7);
while(!key1);
L1602_string(2,2,s);
yanshi(250);
flat=0; //flat=0;
}
}
-
----
if(flat==6) /////// 读取模块的 Short Address {//
L1602_string(1,1,s4);
n=1;
if(key1==0)
yanshi(10);
if(key1==0)
{
sent(com4,7);
while(!key1);
L1602_string(2,2,s);
yanshi(250);
yanshi(250);
flat=0;
}
}
// 读模块PAN ID
if(flat==7)
{
L1602_string(1,1,s33); if(key1==0)
yanshi(10);
if(key1==0)
{
sent(com3,7);
while(!key1);
// L1602_string(2,2,s); yanshi(250);
yanshi(250);
flat=0;
}
-
----
}
//////////////
if(flat==9) //模块软件重启{
L1602_string(1,1,s6);
if(key1==0)
yanshi(10);
if(key1==0)
{
sent(com6,7);
while(!key1);
L1602_string(2,2,s); yanshi(250);
flat=0;
// flat=0;
}
}
//设定为透明传输方式
if(flat==8)
{
L1602_string(1,1,s5);
if(key1==0)
yanshi(10);
if(key1==0)
{
sent(com5,7);
while(!key1);
L1602_string(2,2,s);
yanshi(250);
flat=0;
}
-
----
}
}
voidser() interrupt 4
{
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
LED_Buffer[com_dat] = SBUF; //把从串口读出的数存到数组RI = 0;
com_dat++;
// if(LED_Buffer[0]==0xFD)
// ww=1;
if(LED_Buffer[0]==0xFD&&LED_Buffer[5]!=0x00)
sb=1;
if(LED_Buffer[0]==0xFD&&LED_Buffer[3]==0x00)
{
if(LED_Buffer[2]==0x00&&LED_Buffer[3]==0x01&&LED_Buffer[4]==0x00&&LE D_
Buffer[6]==0x00) jj=1;
KKK=1;
}
if(com_dat == 16) com_dat = 0;//当com_dat = 16时,清0,防止数组溢出FF=1; //如果收到数据则显示
}
EA = 1;
}
voidyanshi(uinti)
{
uintj,m;
for(j=i;j>0;j--)
for(m=110;m>0;m--);
}
-
----
附录4
-
----
附录5
-
----
目录
1 概
述 ..................................................................... ........................................................................ (1)
1.1 课题的目的、背景和意
义 ..................................................................... . (1)
1.2国内外无线技术相关现状及Zigbee现
状 ..................................................................... .. (1)
1.3 课题任务要
求 ..................................................................... .. (2)
2 技术方
案 ..................................................................... ........................................................................ . (4)
2.1 芯片选择...................................................................... .. (4)
3. 硬件设
计 .....................................................................
........................................................................ (7)
3.1 Zigbee模块引脚连接设
计 ..................................................................... . (7)
3.2 Zigbee模块电源设
计 ..................................................................... . (7)
3.3 单片机设计电
路 ..................................................................... . (8)
3.4 串口电路设
计 ..................................................................... . (9)
4.软件设
计 ..................................................................... ........................................................................ (10)
4.1软件功能说
明 ..................................................................... . (10)
4.2软件总流程
图 ..................................................................... . (10)。