无线传感网智能组网设计实验指导书(实验类)
实验 1. Zigbee基本通信实验
1.1
实验目的
➢ 了解实Zigbee的原理及在软件上如何方便使用; ➢ 掌握在Windows CE 6.0下进行UART编程的方法。
1.2 实验设备
➢ 硬件:EduKit-IV嵌入式教学实验平台、Mini270核心子板、Zigbee模块、PC 机; ➢ 软件:Windows 2000/NT/XP 以及Windows 平台下的VS2005开发环境。
1.3 实验内容
➢ 利用Microsoft Visual Studio 2005编写一个可运行于EduKit-IV型实验箱
Windows CE 6.0操作系统上的应用程序;
➢ 学习和掌握EduKit-IV教学实验平台中通过UART与Zigbee模块通信,实现对
Zigbee模块的配置和对等网模式下的通信。
1.4 实验原理
1.4.1 Zigbee起源
无线网络系统源自美国军方的“电子尘埃(eMote)”技术,是目前国内、外研究的热点技术之一。该系统基于IEEE802.15.4规范的无线技术,工作在2.4 GHz或868/928 MHz,用于个人区域网和对等网状网络。ZigBee是一种新兴的近距离、低复杂度、低功耗、低数据速率、低成本的无线网络技术。它是一种介于红外无线技术和蓝牙之间的技术提案。主要用于近距离无线连接。它依据802.15.4标准。在数千个微小的传感器之间相互协调实现通信。这些传感器只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另一个传感器,所以它们的通信效率非常高。相对于现有的各种无线通信技术,无线ZigBee网络技术将是近距离通信最低功耗和成本的技术。这一技术目前正向工业、民用方向推广和
_
发展,市场前景广阔。包括国家863计划等项目都在进行相关的研究工作。因此,本文介绍的基于ZigBee技术的嵌入式无线网络平台,这一无线网络平台可应用于工业控制、信息家电、安保系统、环境监测、港务运输、煤矿安全、农业自动化和医疗监护设备等许多行业和设备。具有广泛的适应性。并能弥补其他无线通信技术的不足,保证其安全性,降低服务成本。
1.4.2 ZigBee网络配置
1. 网络设备组成。
ZigBee网络设备主要包括网络协调器、全功能设备和精简功能设备3类。 网络协调器:
包含所有的网络消息,是3种设备类型中最复杂的一种,存储容量最大、计算能力最强。功能是发送网络信标、建立一个网络、管理网络节点、存储网络节点信息、寻找一对节点间的路由消息、不断地接收信息。
全功能设备:
全功能设备(Full-Function Device,FFD)可以担任网络协调者,形成网络,让其他的FFD或精简功能装置(RFD)联结。FFD具备控制器的功能,可提供信息双向传输。其设备特性有:附带由标准指定的全部IEEE 802.15.4功能和所有特征;更强的存储能力和计算能力可使其在空闲时起网络路由器作用;也能用作终端设备。
精简功能设备:
精简功能设备(Reduced-Function Device,RFD)只能传送信息给FFD或从FFD接收信息,其设备特性有:附带有限的功能来控制成本和复杂性;在网络中通常用作终端设备; RFD由于省掉了内存和其他电路,降低了ZigBee部件的成本,而简单的8位处理器和小协议栈也有助于降低成本。
2. 网络节点类型。
从网络配置上,ZigBee网络中有3种类型的节点:ZigBee协调点、ZigBee路由节点和ZigBee终端节点。
ZigBee协调点:
ZigBee协调点在IEEE 802.15.4中也称为PAN(Personal Area Network)协调点(ZigBee Coordinator,ZC),在无线传感器网络中可以作为汇聚节点。ZigBee协调点必须是FFD,一个ZigBee网络只有一个ZigBee协调点,它往往比网络中其他节点的功能更强大,是整个网络的主控节点。它负责发起建立新的网络、设定网络参数、管理网络中的节点以及存储网络中节点信息等,网络形成后也可以执行路由器的功能。ZigBee协调点是3种类型ZigBee节点最为复杂的一种,一般由交流电源持续供电。
ZigBee路由节点:
_
ZigBee路由节点(ZigBee Router,ZR)也必须是FFD。ZigBee路由节点可以参与路由发现、消息转发,通过连接别的节点来扩展网络的覆盖范围等。此外,ZigBee路由节点还可以在它的个人操作空间(POS,Personal Operating Space)中充当普通协调点(IEEE 802.15.4称为协调点)。普通协调点与ZigBee协调点不同,它仍然受ZigBee协调点的控制。
ZigBee终端节点:
ZigBee终端节点(ZigBee EndDevice,ZE)可以是FFD或者RFD,它通过ZigBee协凋点或者ZigBee路由节点连接到网络,但不允许其他任何节点通过它加入网络,ZigBee终端节点能够以非常低的功率运行。
3. 网络工作模式。
ZigBee网络的工作模式可以分为信标(Beacon)和非信标(Non-beacon)2种模式,信标模式实现了网络中所有设备的同步工作和同步休眠,以达到最大限度的功耗节省,而非信标模式则只允许ZE进行周期性休眠,ZC和所有ZR设备必须长期处于工作状态。
信标模式下,ZC负责以一定的间隔时间(一般在15ms~4min)向网络广播信标帧,2个信标帧发送之间有16个相同的时槽,这些时槽分为网络休眠区和网络活动区2个部分,消息只能在网络活动区的各时槽内发送。
非信标模式下,ZigBee标准采用父节点为ZE子节点缓存数据,ZE主动向其父节点提取数据的机制,实现ZE的周期性(周期可设置)休眠。网络中所有父节点需为自己的ZE子节点缓存数据帧,所有ZE子节点的大多数时间都处于休眠模式,周期性的醒来与父节点握手以确认自己仍处于网络中,其从休眠模式转入数据传输模式一般只需要15ms。
1.4.3 ZigBee的网络拓扑结构
ZigBee主要采用了3种组网方式:星型网、网状网和簇状网。其中网络协调器相当于本试验中的中心节点,全功能设备相当于本试验中的路由节点,精简功能设备相当于本试验中的终端节点。
如图1所示在星型网中,一个功能强大的主器件位于网络的中心,作为网络协调
者,其它的主器件或从器件分布在其覆盖范围内。由于网络协调者定义了整个网络的时分复用和多址接人方式,因此星型网的控制和同步都比较简单,通常用在设备薯莨比较少的场合。
_
图1 星型网
如图2所示,网状网是由主器件连接在一起形成的,网状网络拓扑结构的网络具
有强大的功能,网络可以通过“多级跳”的方式来通信;该拓扑结构还可以组成极为复杂的网络;网络还具备自组织、自愈功能;
图2 网状网
星型网和网状网相结合则形成了簇状网,如图3所示。各个子网内部都以星型网
连接。其主器件又以对等的方式连接在一起。信息流首先传到同一个子网内的主节点。通过网关节点达到更高层的子网,随后继续上传,直至到达中心采集设备。中心采集设备与普通的WPAN设备相比具有更强的处理能力。簇状网可以用于覆盖范围较大的区域,
图3 簇状网
_
在上述网络拓扑结构中,网络的形成和维护通过设备间的通信自动实现,不需要人32干预网络的建立、扩展或者减小。ZigBee网络中的所有设备都被动态分配到IEEE地址。
1.4.4 SZ05-ZBEE嵌入式无线通信模块介绍
顺舟科技SZ05系列嵌入式无线通信模块,集成了符合ZIGBEE协议标准的射频收发器和微处理器,它具有通讯距离远、抗干扰能力强、组网灵活、性能可靠稳定等优点和特性;可实现点对点、一点对多点、多点对多点之间的设备间数据的透明传输;可组成星型、树型和蜂窝型网状网络结构。
SZ05系列无线通信模块数据接口为TTL电平收发接口。可以实现数据的广播方式发送、按照目标地址发送模式,除可实现一般的点对点数据通信功能外,还可实现多点之间的数据通讯,串口通信使用方法简单便利,可以大大简短模块的嵌入匹配时间进程。
SZ05系列无线通信模块分为中心协调器、路由器和终端节点,这三类设备具备不同的网络功能,中心协调器是网络的中心节点,负责网络的发起组织、网络维护和管理功能;路由器负责数据的路由中继转发,终端节点只进行本节点数据的发送和接收。中心协调器、路由器和终端节点这三种类型的设备在硬件结构上完全一致,只是设备嵌入软件不同,只需通过跳线设置或软件配置即可实现不同的设备功能。
表1描述了模块左侧引脚相应标识
表1 模块左侧引脚说明
引脚号 1 2 3 4 5 6 7 8 9 标识 GND +5V RX1/TTL TX1/TTL SGND TX2/RS232 RX2/RS232 RESET 功能 电源地 电源正5V TTL 电平输入 TTL 电平输出 串口RS232 信号地 串口RS232输出 串口RS232输入 系统保留 系统复位 备注 输入 TTL 电平输入 接用户系统输入RX 信号地 接用户232 输入 接用户232 输出 悬空 低电平复位 表2描述了模块右侧引脚相应标识
表2 模块右侧引脚说明
引脚号 1 2 3 4 5 标识 DATA RUN NET ALARM SLEEP 功能 串口数据收发指示 系统运行指示 网络指示 系统告警指示 低功耗 备注 低电平点亮,数据收发即闪烁 低电平点亮,间隔1 秒闪烁 低电平点亮,中心节点建网成功点亮,从节点入网后点亮。 低电平点亮 低电平进入低功耗,高电平或悬空正常运行。 _
9 CONFIG 配置接口 低电平有效,或加跳线帽,进入系统配置状态。 1.4.5 Zigbee模块配置
SZ05-ZBEE 无线通信模块复位后,CONFIG引脚进入低电平状态3 秒,系统进入配置状态;高电平或悬空状态则进入工作状态。配置接口是用于对本产品的某些参数进行配置的接口,串口信号为RS232配置如表3所示:
表3 配置模式时串口参数配置 串口参数 串口波特率 串口校验 数据位 停止位 配置值 38400 NONE 8 1 设备配置选项如下所示:
1. 通信信道CHANNEL设置如表4所示。
表4 通信信道参数配置 CHANNEL选项 4 9 E F G 配置说明 2.425GHZ 2.450GHZ 2.475GHZ 2.480GHZ AUTO模式,自动选择最佳信道。 2. 网络类NET_TYPE设置如表5所示。
表5 网络类型参数配置
NET_TYPE选项 MESH STAR PEER 网络选项 网状网 星型网 对等网 配置说明 主从网络,网络中心必须有唯一的中心节点。 非主从网,无中心节点。 备注 在同一个网络中,网络类型必须设置相同。 3. 设备类型NODE_TYPE设置如表6所示。
表6 设备类型参数配置
NODE_TYPE选项 PAN_Coord ROUTER END_DEVICE 设备类型 中心节点 中继路由 终端设备 兼有终端设备功能 配置说明 4. 网络号NET_ID设置如表7所示。
表7 网络号参数配置
NET_ID选项选项 NET_ID ID范围 00-FF 配置说明 同个网络中ID必须相同 _
5. 数据发送模式TX_TYPE设置如表8所示。
表8 数据发送模式参数配置
TX_TYPE选项 BROADCAST MASTER—SLAVE POINT—POINT 点对点 必需目标地址。 网络选项 广播模式 主从模式 无需目标地址。 配置说明 备注 目标地址为2 字节数据包前即可。 加在中心节点必需目标地址,非中心节点无需目标地址。 的MAC 地址,6. 设备地址MAC_ADDR设置如表9所示。
表9 设备地址参数配置
MAC_ADDR选项选项 MAC_ADDR ID范围 0000-FFFF 配置说明 中心节点为0000 备注 同个网络不能有相同地址节点 7. 数据类型DATA_TYPE设置如表10所示。
表10 数据类型参数配置
DATA_TYPE选项 ASCII HEX 数据类型 ASCII码 16进制 配置说明 只在按目标地址发送情况下设置,在广播发送情况下无须设置。 8. 数据位DATA_BIT设置如表11所示。
表11 数据位参数配置
DATA_TYPE 选项 7+1+1 8+0+1 8+1+1 数 据 类 型 7位数据+1位校验+1位停止 7位数据+无校验+1位停止 8 位数据+1位校验+1位停止 配 置 说 明 需要跟数据校验设置结合起来选择。 9. 波特率设置。
10. 数据校验DATA_PARITY设置如表12所示。
表12 数据校验参数配置
DATA_PARIT选项 NONE EVEN ODD 设备类型 无校验 偶校验 奇校验 配置说明 选择匹配的校验类型。 11. 串口超时TIME_OUT设置。
12. 数据源地址SRC_ADDR设置如表13所示。
表13 数据源地址是否输出参数配置
SRC_ADR 选项 NOT OUTPUT HEX ASCII 数据源地址 不输出源地址 16进制输出 ASCII输出 配 置 说 明 根据应用需要选择是否输出数据包源地址。 16 进制方式输出源地址格式:2 字节源地址+有效数据;
_
ASCII 方式输出源地址格式:4 字节源地址+有效数据。
1.4.6 数据发送格式说明
1. 数据发送模式如表14所示。
表14 数据发送模式表
模块类型 中心节点 非中心节点 发送模式 广播 主从或点对点 广播 主从 点对点 目标节点 网内所有非中心节点 目标地址的节点 网内所有非中心节点 中心节点 目标地址的节点 发送模式 数据直接发送 目标地址+数据 数据直接发送 数据直接发送 目标地址+数据 2. 数据发送帧格式如表15所示。
表15 数据发送帧格式
发送模式 数据直接发送 目标地址+数据 数据编码 16 进制目标地址 ASCII目标地址 数据帧格式 不需要做任何变动 2字节目标地址+数据 4字节目标地址+数据 1.4.7 硬件连接
图4 Zigbee与Min270之间的硬件连接
其中引脚11和10分别连到主板的地和电源;引脚12和13分别连接到主板Extern B1区的TXD和RXD;引脚9和18分别连接到主板Extern B1区的SP1TXD和SP1RXD。
_
1.5 实验步骤
1)准备实验环境。将mini270核心子板插到主板接口槽上,将实验平台上电运行。 2)按照基于《Xscale270 嵌入式Windows CE开发实验与实践》中所讲的将对应驱动ZGB添加到系统映像NK.bin中。将此映像烧写到Min270中。
3)将两个Zigbee模块分别插到两个试验箱的Extern B区,打开主板电源,等待Windows CE 6.0系统运行起来。启动后,将Embest_Zigbee.exe(通过编译Embest_Zigbee.exe应用程序工程得到)通过SD卡拷贝到已经运行了Windows CE 6.0的EduKit-IV实验平台中运行(也可以通过同步软件ActiveSync将程序直接传送到实验平台)。双击运行,出现如下图界面:
图5 Embest_Zigbee应用程序初始界面
4)单击上图中的Open按钮,来打开对应串口驱动。若打开成功出现如图6所示界面。
_
图6 打开串口驱动成功后的界面
5)在单击Configure按钮进入配置界面,如图7所示。界面左边为默认配置选项,可以改变成自己希望的配置。
图7 Zigbee模块配置参数输入界面
6)在单击Apply按钮来提交配置参数,等待配置完成,如图8所示。配置完成后进入如图9所示界面。
_
图8 Zigbee模块配置等待界面
图9 Zigbee模块配置完成界面
7)依次配置网内的每个Zigbee模块,配置完成后,各模块之间就可以相互通信了。此出将各Zigbee模块都设置成对等网的终端设备。如下演示地址分别为0001和为0002的两个Zigbee模块之间的通信。
8)首先地址为0001的Zigbee模块给地址为0002的Zigbee模块发送3344。方法为在发送文本框中输入00023344,然后单击Send按钮,也就将数据发送出去了。如图
_
10所示。
图10 Zigbee模块发送数据界面
9)在地址0001向0002数据后,0002会收到数据,如图11所示。
图11 Zigbee模块接收数据界面
10)在对等网模式下,当两个终端节点之间的距离在有效覆盖范围之外时,可以在他们之间加上若干个路由节点,使得他们之间形成一条通路。之后之两个终端节点就可以通过路由节点转发来相互通信。
_
1.6 实验报告要求
(1)完整及详细记录实验数据,记录实验过程,总结实验心得。 (2)完成实验效果。
_
实验 2. LED 灯控制实验
1. 实验环境
❖硬件: ZigBee(CC2530)模块, ZigBee下载调试板, USB仿真器, PC机。 ❖软件: IAR Embedded Workbench for MCS-51
2. 实验内容
❖阅读 UP-CUP ZigBee2530开发套件 ZigBee 模块硬件部分文档,熟悉 ZigBee 模块硬
件接口。
❖使用 IAR 开发环境设计程序,利用 CC2530 的 IO 控制 LED 外设的闪烁。
3. 实验原理
3.1 硬件接口原理
ZigBee(CC2530)模块硬件上设计有 2 个 LED 灯,用来编程调试使用。分别连接 CC2530 的P1_0、 P1_1 两个 IO 引脚。从原理图上可以看出, 2 个 LED 灯共阳极,当 P1_0、 P1_1 引脚为低电平时候, LED 灯点亮。
3.2 软件设计
#include _ #define uint unsigned int #define uchar unsigned char //定义控制 LED 灯的端口 #define LED1 P1_0 //定义 LED1 为 P10 口控制 #define LED2 P1_1 //定义 LED2 为 P11 口控制 //函数声明 void Delay(uint); //延时函数 void Initial(void); //初始化 P1 口 /**************************** //延时函数 ****************************/ void Delay(uint n) { uint i,t; for(i = 0;i<5;i++) for(t = 0;t *****************************/ void Initial(void) { P1DIR |= 0x03; //P1_0、 P1_1 定义为输出 _ LED1 = 1; //LED1 灯熄灭 LED2 = 1; //LED2 灯熄灭 } /*************************** //主函数 ***************************/ void main(void) { Initial(); //调用初始化函数 LED1 = 0; //LED1 点亮 LED2 = 0; //LED2 点亮 while(1) { LED2 = !LED2; //LED2 闪烁 Delay(50000); } } 程序通过配置 CC2530 IO 寄存器的高低电平来控制 LED 灯的状态,用循环语句来实现程序的不 间断运行。 4. 实验步骤 _ ❖使用USB仿真器连接PC机和ZigBee(CC2530)模块,将ZigBee调试板的电源拨到3.3V段, 打开ZIEBEE 模块开关供电。 ❖启动IAR开发环境,新建工程,或直接使用Exp1 实验工程。 ❖在IAR开发环境中编译、运行、调试程序。 _ 实验 3. Timer1 控制实验 1. 实验环境 ❖硬件: ZigBee(CC2530)模块, ZigBee下载调试板, USB仿真器, PC机。 ❖软件: IAR Embedded Workbench for MCS-51 2. 实验内容 ❖阅读 UP-CUP ZigBee2530开发套件 ZigBee 模块硬件部分文档,熟悉 ZigBee 模块硬 件接口。 ❖使用 IAR 开发环境设计程序,利用 CC2530 的 Timer1 定时器控制 LED 外设的闪烁。 3. 实验原理 3.1 硬件接口原理 ZigBee(CC2530)模块硬件上设计有 2 个 LED 灯,用来编程调试使用。分别连接 CC2530 的P1_0、 P1_1 两个 IO 引脚。从原理图上可以看出, 2 个 LED 灯共阳极,当 P1_0、 P1_1 引脚为低电平时候, LED 灯点亮。 3.2 软件设计 #include _ #define uchar unsigned char #define LED1 P1_0 #define LED2 P1_1 uint counter=0; //统计溢出次数 uint TempFlag; //用来标志是否要闪烁 void Initial(void); void Delay(uint); /**************************** //延时程序 ***************************/ void Delay(uint n) { uint i,t; for(i = 0;i<5;i++) for(t = 0;t ***************************/ void Initial(void) { //初始化 P1 _ P1DIR = 0x03; //P1_0 P1_1 为输出 LED1 = 1; LED2 = 1; //熄灭 LED //初始化 T1 定时器 T1CTL = 0x0d; //中断无效,128 分频;自动重装模式(0x0000->0xffff); } /*************************** //主函数 ***************************/ void main() { Initial(); //调用初始化函数 LED1 = 0; //点亮 LED1 while(1) //查询溢出 { if(IRCON > 0) { IRCON = 0; //清溢出标志 TempFlag = !TempFlag; } if(TempFlag) { _ LED2 = LED1; LED1 = !LED1; Delay(6000); } } } 程序通过配置 CC2530 处理器的 Timer1 定时器进行自动装载计数,通过查询 IRCON 中断标志来检 查 Timer1 定时器计数溢出中断状态,从而控制 LED 灯的闪烁状态。 4. 实验步骤 ❖使用USB仿真器连接PC机和ZigBee(CC2530)模块,将ZigBee调试板的电源拨到3.3V段, 打开ZIEBEE 模块开关供电。 ❖启动IAR开发环境,新建工程,或直接使用Exp2实验工程。 ❖在IAR开发环境中编译、运行、调试程序。 实验 4. Timer2 控制实验 1. 实验环境 ❖硬件: ZigBee(CC2530)模块, ZigBee下载调试板, USB仿真器, PC机。 ❖软件: IAR Embedded Workbench for MCS-51 2. 实验内容 _ ❖阅读 UP-CUP ZigBee2530开发套件 ZigBee 模块硬件部分文档,熟悉 ZigBee 模块硬 件接口。 ❖使用 IAR 开发环境设计程序,利用CC2530 的 Timer2 定时器控制LED外设的闪烁。 3. 实验原理 3.1 硬件接口原理 ZigBee(CC2530)模块硬件上设计有 2 个 LED 灯,用来编程调试使用。分别连接 CC2530 的P1_0、 P1_1 两个 IO 引脚。从原理图上可以看出, 2 个 LED 灯共阳极,当 P1_0、 P1_1 引脚为低电平时候, LED 灯点亮。 3.2 软件设计 #include uint counter=0; //统计溢出次数 uchar TempFlag; //用来标志是否要闪烁 /**************************** //延时程序 ***************************/ void Delay(uint n) { uint i,t; for(i = 0;i<5;i++) _ for(t = 0;t ***************************/ void Initial(void) { LED_ENALBLE(); //设置 T2 定时器相关寄存器 SET_TIMER2_CAP_INT(); //开溢出中断 SET_TIMER2_CAP_COUNTER(0x55); //设置溢出值 } /*************************** //主函数 ***************************/ void main() { Initial(); //调用初始化函数 LED1 = 0; //LED1 常亮 LED2 = 1; TIMER2_RUN(); while(1) //等待中断 _ { if(TempFlag) { LED2 = !LED2; TempFlag = 0; } } } /*************************** //中断处理函数 ***************************/ #pragma vector = T2_VECTOR //重定位中断向量表 __interrupt void T2_ISR(void) //定义中断处理函数 { TIMER2_STOP(); SET_TIMER2_CAP_COUNTER(0X55); //设置溢出值 CLEAR_TIMER2_INT_FLAG(); //清 T2 中断标志 if(counter<100)counter++; //100 次中断 LED 闪烁一轮 else { counter = 0; //计数清零 TempFlag = 1; //改变闪烁标志 _ }} 程序通过配置 CC2530 处理器的Timer2定时器进行计数中断设置,从而控制LED2的闪烁状态。 4. 实验步骤 ❖使用USB仿真器连接PC机和ZigBee(CC2530)模块,将ZigBee调试板的电源拨到3.3V段, 打开ZIEBEE 模块开关供电。 ❖启动IAR开发环境,新建工程,或直接使用Exp3实验工程。 ❖在IAR开发环境中编译、运行、调试程序。 _ 实验 5. Timer3 控制实验 1. 实验环境 ❖硬件: ZigBee(CC2530)模块, ZigBee下载调试板, USB仿真器, PC机。 ❖软件: IAR Embedded Workbench for MCS-51 2. 实验内容 ❖阅读 UP-CUP ZigBee2530开发套件 ZigBee 模块硬件部分文档,熟悉 ZigBee 模块硬 件接口。 ❖使用 IAR 开发环境设计程序,利用 CC2530 的 Timer3 定时器控制 LED 外设的闪烁。 3. 实验原理 3.1 硬件接口原理 ZigBee(CC2530)模块硬件上设计有 2 个 LED 灯,用来编程调试使用。分别连接 CC2530 的P1_0、 P1_1 两个 IO 引脚。从原理图上可以看出, 2 个 LED 灯共阳极,当 P1_0、 P1_1 引脚为低电平时候, LED 灯点亮。 3.2 软件设计 #include _ #define uchar unsigned char /***************************************** //定义全局变量 *****************************************/ uchar counter = 0; /***************************************** //T3 配置定义 *****************************************/ // Where _timer_ must be either 3 or 4 // Macro for initialising timer 3 or 4 //将 T3/4 配置寄存复位 #define TIMER34_INIT(timer) \\ do { \\ T##timer##CTL = 0x06; \\ T##timer##CCTL0 = 0x00; \\ T##timer##CC0 = 0x00; \\ T##timer##CCTL1 = 0x00; \\ T##timer##CC1 = 0x00; \\ } while (0) //Macro for enabling overflow interrupt //设置 T3/4 溢出中断 #define TIMER34_ENABLE_OVERFLOW_INT(timer,val) \\ _ do{T##timer##CTL = (val) ? T##timer##CTL | 0x08 : T##timer##CTL & ~0x08; \\ EA = 1; \\ T3IE = 1; \\ }while(0) //启动 T3 #define TIMER3_START(val) (T3CTL = (val) ? T3CTL | 0X10 : T3CTL&~0X10) //时钟分步选择 #define TIMER3_SET_CLOCK_DIVIDE(val) \\ do{ \\ T3CTL &= ~0XE0; \\ (val==2) ? (T3CTL|=0X20): \\ (val==4) ? (T3CTL|=0x40): \\ (val==8) ? (T3CTL|=0X60): \\ (val==16)? (T3CTL|=0x80): \\ (val==32)? (T3CTL|=0xa0): \\ (val==64) ? (T3CTL|=0xc0): \\ (val==128) ? (T3CTL|=0XE0): \\ (T3CTL|=0X00); /* 1 */ \\ }while(0) //Macro for setting the mode of timer3 //设置 T3 的工作方式 _ #define TIMER3_SET_MODE(val) \\ do{ \\ T3CTL &= ~0X03; \\ (val==1)?(T3CTL|=0X01): /*DOWN */ \\ (val==2)?(T3CTL|=0X02): /*Modulo */ \\ (val==3)?(T3CTL|=0X03): /*UP / DOWN */ \\ (T3CTL|=0X00); /*free runing */ \\ }while(0) #define T3_MODE_FREE 0X00 #define T3_MODE_DOWN 0X01 #define T3_MODE_MODULO 0X02 #define T3_MODE_UP_DOWN 0X03 /***************************************** //T3 及 LED 初始化 *****************************************/ void Init_T3_AND_LED(void) { P1DIR = 0X03; RLED = 1; YLED = 1; TIMER34_INIT(3); //初始化 T3 TIMER34_ENABLE_OVERFLOW_INT(3,1); //开 T3 中断 _ //时钟 32 分频 101 TIMER3_SET_CLOCK_DIVIDE(16); TIMER3_SET_MODE(T3_MODE_FREE); //自动重装 00->0xff TIMER3_START(1); //启动 }; /***************************************** //主函数 *****************************************/ void main(void) { Init_T3_AND_LED(); YLED = 0; while(1); //等待中断 } #pragma vector = T3_VECTOR __interrupt void T3_ISR(void) { //IRCON = 0x00; //清中断标志,硬件自动完成 if(counter<200)counter++; //200 次中断 LED 闪烁一轮 else { counter = 0; //计数清零 _ RLED = !RLED; //改变小灯的状态 } 程序通过配置 CC2530 处理器的 Timer3 定时器进行计数中断设置,从而控制 RLED 灯的闪烁状 态。 4. 实验步骤 ❖使用USB仿真器连接PC机和ZigBee(CC2530)模块,将ZigBee调试板的电源拨到3.3V段, 打开ZIEBEE 模块开关供电。 ❖启动IAR开发环境,新建工程,或直接使用Exp4实验工程。 ❖在IAR开发环境中编译、运行、调试程序。 实验 6. 片上温度 AD 实验 1. 实验环境 ❖硬件: ZigBee(CC2530)模块, ZigBee下载调试板, USB仿真器, PC机。 ❖软件: IAR Embedded Workbench for MCS-51 2. 2. 实验内容 ❖阅读 UP-CUP ZigBee2530开发套件 ZigBee 模块硬件部分文档,熟悉 ZigBee 模块相 关硬件接口。 _ ❖使用 IAR 开发环境设计程序,利用 CC2530 的内部温度传感器作为 A\\D 输入源,将转 换后的温度数值利用串口发送给 PC 机终端。 3. 3. 实验原理 3.1 硬件接口原理 ZigBee(CC2530)模块硬件上设计有 2 个 LED 灯,用来编程调试使用。分别连接 CC2530 的P1_0、 P1_1 两个 IO 引脚。从原理图上可以看出, 2 个 LED 灯共阳极,当 P1_0、 P1_1 引脚为低电平时候, LED 灯点亮。 3.2 软件设计 #include //定义控制 LED 灯的端口 #define LED1 P1_0 //定义 LED1 为 P10 口控制 _ #define LED2 P1_1 //定义 LED2 为 P11 口控制 //#define HAL_MCU_CC2530 1 // ADC definitions for CC2530/CC2530 from the hal_adc.c file #define HAL_ADC_REF_125V 0x00 /* Internal 1.25V Reference */ #define HAL_ADC_DEC_064 0x00 /* Decimate by 64 : 8-bit resolution */ #define HAL_ADC_DEC_128 0x10 /* Decimate by 128 : 10-bit resolution */ #define HAL_ADC_DEC_512 0x30 /* Decimate by 512 : 14-bit resolution */ #define HAL_ADC_CHN_VDD3 0x0f /* Input channel: VDD/3 */ #define HAL_ADC_CHN_TEMP 0x0e /* Temperature sensor */ /**************************** //延时函数 *****************************/ void Delay(uint n) { uint i,t; for(i = 0;i<5;i++) for(t = 0;t P1DIR |= 0x03; //P1_0、 P1_1 定义为输出 LED1 = 1; //LED1 灯熄灭 _ LED2 = 1; //LED2 灯熄灭 } /****************************************************************************** * @fn readTemp * @brief read temperature from ADC * @param none static char readTemp(void) { static uint16 voltageAtTemp22; static uint8 bCalibrate=TRUE; // Calibrate the first time the temp sensor is read uint16 value; char temp; ATEST = 0x01; TR0 |= 0x01; ADCIF = 0; //clear ADC interrupt flag ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_51 2 | HAL_ADC_CHN_TEMP); while ( !ADCIF ); //wait for the conversion to finish value = ADCL; //get the result value |= ((uint16) ADCH) << 8; value >>= 4; // Use the 12 MSB of adcValue /* * These parameters are typical values and need to be calibrated _ * See the datasheet for the appropriate chip for more details * also, the math below may not be very accurate */ /* Assume ADC = 1480 at 25C and ADC = 4/C */ #define VOLTAGE_AT_TEMP_25 1480 #define TEMP_COEFFICIENT 4 // Calibrate for 22C the first time the temp sensor is read. // This will assume that the demo is started up in temperature of 22C if(bCalibrate) { voltageAtTemp22=value; bCalibrate=FALSE; } temp = 22 + ( (value - voltageAtTemp22) / TEMP_COEFFICIENT ); // Set 0C as minimum temperature, and 100C as max if( temp >= 100) return 100; else if(temp <= 0) return 0; else return temp; } /****************************************************************************** * @fn readVoltage * @brief read voltage from ADC _ * @param none * @return voltage */ /* static uint8 readVoltage(void) { uint16 value; ADCIF = 0; // Clear ADC interrupt flag ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_128 | HAL_ADC_CHN_VDD3); while ( !ADCIF ); // Wait for the conversion to finish value = ADCL; // Get the result value |= ((uint16) ADCH) << 8; // value now contains measurement of Vdd/3 // 0 indicates 0V and 32767 indicates 1.25V // voltage = (value*3*1.25)/32767 volts // we will multiply by this by 10 to allow units of 0.1 volts value = value >> 6; // divide first by 2^6 value = (uint16)(value * 37.5); value = value >> 9; // ...and later by 2^9...to prevent overflow during multiplication return value; } */ _ void main(void) {{ char temp_buf[20];//, vol_buf[20]; uint8 temp;//, vol; InitUart(); //baudrate: 57600 InitLed(); LED1 = 0; while(1) { LED2 = !LED2; //LED2 blink 表示程序运行正常 temp = readTemp(); //read temperature value //vol = readVoltage(); sprintf(temp_buf, (char*)\"temperature:%d\\r\\n\//sprintf(vol_buf, (char*)\"vol:%d\\r\\n\prints(temp_buf); //prints(vol_buf); Delay(50000); Delay(50000); Delay(50000); } } 程序通过配置 CC2530 处理器的 A\\D 控制器来将片内温度传感器转化,并在串口将温度值输出。 4. 实验步骤 _ ❖使用 USB 仿真器连接 PC 机和 ZigBee(CC2530)模块,将 ZigBee 调试板的电源拨到 3.3V 段,打开ZIEBEE 模块开关供电。将系统配套串口线一端连接 PC 机,一端连接 ZigBee 调试板的串口上。 ❖启动IAR开发环境,新建工程,或直接使用Exp5实验工程。 ❖在IAR开发环境中编译、运行、调试程序。 ❖使用 PC 机自带的超级终端连接串口,将超级终端设置为串口波特率 57600、奇偶校验、无硬件流模式,即可在终端收到模块传递过来的温度值。 8 位、无 因篇幅问题不能全部显示,请点此查看更多更全内容