安徽工业大学WSN无线传感器网络实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《无线传感器网络实验报告》
指导教师:***
班级:物联网131班
实验箱序号:3,13等
组员姓名学号:程少锋
(注:报告中有部分实验截图)
实验日期:2016年4月28日3,4节
实验一、软硬件平台使用
[1]感知 RF2 实验箱-WSN 系统结构
该系统根据不同的情况可以由一台计算机,一套网关,一个或多个网络节点组成。

系统大小只受 PC 软件观测数量,路由深度,网络最大负载量限制。

感知 RF2 实验箱无线传感器实验平台内配置 ZigBee2007/PRO 协议栈在没有进行网
络拓补修改之前支持 5 级路由,31101 个网络节点。

传感器网络系统结构图如下图所示。

[2]感知 RF2 实验箱-WSN 系统工作流程
基于ZigBee2007/PRO 协议栈无线网络,在网络设备安装过程,架设过程中自动完成。

完成网络的架设后用户便可以由 PC 机发出命令读取网络中任何设备上挂接的传感器的数据,以及测试其电压。

[3]感知 RF2 实验箱-WSN 硬件介绍
感知 RF2 物联网实验箱的无线传感器网络开发平台主要硬件包括:C51RF-CC2530-WSN 仿真器、ZigBee 无线高频模块、节点底板、传感器模块以及其它配套线缆等。

网关节点由节点底板+ZigBee 无线高频模块组成。

传感器节点由节点底板+ZigBee 无线高频模块组成+传感器模块组成。

路由节点硬件组成与传感器节点相同,软件实现功能不同。

[4]实验目的:熟悉实验平台前期架构,便于后面程序的烧写。

[5]实验步骤:
1安装必要软件(实际实验室中软件已经下载安装完毕,只要通过仿真器C51RF-3进行程序在线下载、调试、仿真即可)
1)在实验室机器E盘的《无线龙实验箱相关资料/无线传感器实验资料201604》中安装
ZigBee 开发集成环境 IAR7.51A,详细请参考“\C51RF-CC2530-WSN 使用说明书\”目录下的“IAR 安装与使用”。

2)安装传感器网络 PC 显示软件环境,软件位于“\C51RF-CC2530-WSN 开发软件
\C51RF-CC2530-WSN 监控软件”目录下的“Framework Version 2.0.exe”
3)安装网关与计算机 USB 连接驱动,驱动位于“\C51RF-CC2530-WSN 开发软件\”目录下的“CP2102”。

4)安装 ZigBee 开发辅助软件,软件位于“\C51RF-CC2530-WSN 开发软件\”目录下的(程序下载软件 ) “ Setup_SmartRF04Progr_1.3.0.exe ”与 ( 物理地址读写工具软件 )“Setup_IEEE_Address_Prog_1.0.0.exe”。

5)安装其它辅助开发软件,如位于“\C51RF-CC2530-WSN 开发软件\”目录下的“串口
调试助手.exe”。

或且其它用户以为对开发有帮助的软件。

(这里串口调试助手已经在桌面创建了快捷方式)
2安装 CP2102 驱动
为方便无线传感网络与计算机进行通信,网关使用 USB 转换芯片CP2101,因此需要安装 CP2102 驱动。

安装网关与计算机连接驱动 CP2102,在配套光盘“CP2102”目录下点击“Setup.exe”安装。

3物理地址修改/程序下载软件(在Zigbee加入网络实验中需要)
4IAR 软件安装
5Framework Version 2.0 安装
程序下载(重要)
1)按上述(硬件平台组装及设置)步骤 1-3 连接硬件。

2)按上述(安装必要软件)步骤安装软件。

3)把“\C51RF-CC2530-WSN 演示程序\C51RF-CC2530-WSN 无线传感器网络演示程序\”内文件夹“Texas Instruments”复制至 IAR 安装盘根目录(如 C:\)下,或者在E盘中直接打开。

4) 使用 IAR 7.51A 在如下路径打开工程文件。

“ C:\Texas Instruments\ ZStack-CC2530-2.2.0-1.3.0\Projects\zstack\Samples\SampleApp\CC2530DB”
打开工程文件
节点测试
确定各程序成功下载至各节点,并修改物理地址使其各不相同。

把下载CoordinatorEB-Pro 程序的ZigBee模块安插到节点底板上当作网关使用,网关通过 USB 连接线把计算机与网关连接起来。

一会儿,网关节点即建立 ZigBee 无线传感网,液晶显示为“COORD”,等待传感节点的加入。

把下载 RouterEB-Pro 或 EndDeviceEB-Pro 程序的 ZigBee 模块安插到节点底板,并把 1个传感器模块安插到节点底上。

【6】实验中遇到的困难和解决办法:开始实验时程序不能运行是因为没有通过仿真器将电脑与实验箱相连接。

【7】实验总结:做实验前要仔细观察实验指导书的步骤,实验平台前期准备必须要精准,这样可以节约后期实验时间,避免原理上的不
熟悉,比如后期实验中修改物理地址等。

实验二、GPIO输入输出实验
1控制 LED 灯闪烁
【实验目的】
了解CC2530的GPIO结构和配置原理及如何通过程序控制CC2530的GPIO驱动外部设备如:LED灯。

【实验设备】
本例以LED灯为外设,用CC2530控制简单外设,将I/O设置为输出,实验现象LED闪烁。

实验中操作了的寄存器有 P1,P1DIR,没有设置而是取默认值的寄存器有:P1SEL,
P1INP。

GPIO输出控制对象为CC2530模块上的红色和蓝色 LED,分别接在 CC2530芯片的 P1.0 和P1.1 脚上。

输出置位为 0 时 LED 灯点亮,置位为 1 时 LED 灯熄灭。

【实验步骤】(在实验一中有详细介绍)
1.打开E盘里“\演示及开发例子程序\”内文件夹“CC2530单片机基础程序”,使用IAR7.51打开“1.1GPIO输入输出实验\CC2530-1”中工程文件“forJ1.eww”。

2.打开工程后选择Debug或Release模式。

3.编译工程并下载到目标板。

4.下载完成后点击全速运行(GO 按钮,见下图)或直接按F5 键查看程序运行效果。

【实验结果】
CC2530模块板载的蓝色LED灯(左边)闪烁。

【实验相关代码】
程序的初始化和处理流程:
【实验拓展研究】
利用延时子函数void Delay(uint n)
/****************************
//延时
*****************************/
void Delay(uint n)
{
uint tt;
for(tt = 0;tt<n;tt++);
for(tt = 0;tt<n;tt++);
for(tt = 0;tt<n;tt++);
for(tt = 0;tt<n;tt++);
for(tt = 0;tt<n;tt++);
}
执行5 次0 到n 的空循环来实现软件延时。

延时时间约为5*n/32μs。

(关联LED灭)并且可以修改程序实现LED红灯闪烁。

2 按键控制LED灯开关
【实验目的】
1.了解 CC2530 的 GPIO 结构和配置原理
2.学习配置按键的 GPIO 口为输入模式,并采集有效按键
3.如何通过程序控制由按键触发控制 LED 灯
【实验设备】
1.本例中让用户掌握按键应用这一常用人机交互方法,本次使用按键 LED 灯的开关。

按下“SW2”键切换 ZigBee 模块左边 LED 灯开关,实验中操作了的寄存器有 P0,P0DIR,没有设置而是取默认值的寄存器有:P0SEL,P0INP。

2.按键采用五向摇杆按键 Joystick,这里只使用按下这个键。

无按键按下时 P06的状态为上拉,高电平。

中间键按下时(Cneter),P06 与 GND 连通,P06 采集到低电平。

【实验步骤】
1.打开E盘里“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使用
IAR7.51 打开“ 1.1GPIO 输入输出实验\CC2530-2”中工程文件“ switchLED.eww”。

2.打开工程后选择Debug 或Release 模式。

3.编译工程并下载到目标板。

4.运行和查看效果。

【实验现象】
按下SW2摇杆按键的中间键CC2530 模块板载的红色LED 灯(右边)点亮,再次按下熄灭。

【实验相关流程及代码】
按键初始化函数void InitKey (void)
/*****************************************
//按键初始化
*****************************************/
void InitKey(void)
{
P0SEL &= ~0X40;
P0INP |= 0x40; //上拉(设置位置)
P0DIR &= ~(0x01<<(6)); //按键在P06 ADC 采集
}
主要是配置采集输入采集的GPIO P06 为输入模式。

延时子函数 uchar KeyScan(void)监测 P0.6(K1)上的电平变化,如有高电平变低即有按键产生,返回按键扫描结果为有按键发生。

之后对应相关的LED灯位置。

3按键控制LED灯闪烁
【实验目的】
1.了解 CC2530 的 GPIO 结构和配置原理
2.学习配置按键的 GPIO 口为输入模式,并采集有效按键
3.如何通过程序控制由按键触发控制 LED 灯闪烁
【实验内容】
1.使用按键LED 灯的开关。

按下“SW2”键切换ZigBee 模块左边LED 灯开关,实验中操作了的寄存器有P0,P0DIR,没有设置而是取默认值的寄存器有:P0SEL,P0INP。

2.按键采用五向摇杆按键Joystick,这里只使用按下这个键。

无按键按下时P06的状态为上拉,高电平。

中间键按下时(Cneter),P06 与GND 连通,P06 采集到低电平。

3.
【实验步骤】
第一步:打开E盘“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使用 IAR7.51 打开“ 1.1GPIO输入输出实验\CC2530-3”中工程文件“ switchGLINT.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
按下 SW2 摇杆按键的中间键CC2530 模块板载的蓝色 LED 灯(左边)闪烁,再次按下停止。

【实验相关代码】
程序的初始化和处理流程
相应程序函数构造与实验2相似。

4.按OLED显示
【实验目的】
1.了解 OLED 显示屏的驱动原理,学习使用 UG-9616GLBBG02 显示屏
2.通过 CC2530 的 GPIO 模拟 IIC 总线驱动 OLED 显示。

【实验设备】
2530 通过模拟IIC 通讯接口控制和驱动OLED 的驱动芯片SSD1306
2.
【实验步骤】
第一步:打开E盘“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使用 IAR7.51 打开“ 1.1GPIO 输入输出实验\CC2530-4”中工程文件“ OledDisp.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
程序全速运行后OLED 屏幕上显示“Welcome”字符。

【实验相关代码】
1.函数void ugOled9616int (void) 进行控制驱动OLED有关的GPIO配置,以及配置OLED 驱动芯片的寄存器启动 OLED 运行,程序在“ugOled9616.c”文件中。

2.输出显示子函数 void LcdPutString16_8( u8 x,u8 y,u8 *ptr,u8 len,u8 op ),在 OLED 指定的位置。

【实验中遇到的困难和解决办法】实验4中也可以将英文字符改成汉字输出,但是程序语言中要改变字符类型等。

【实验总结】要学会举一反三,对于代码中的键值控制函数等都要学会处理分析,并修改相应代码实现其他功能。

实验三、定时器控制实验
实验日期:2016年5月5日3,4节
5.使用定时器T1
【实验目的】
1.了解CC2530 的定时器T1 的配置和使用
2.如何通过程序控制CC2530 的T1 驱动LED 灯定时点亮。

【实验设备】
本例用定时器1 来改变小灯的状态, T1 每溢出两次,两个小灯闪烁一次闪烁后成闪烁前相反的状态。

T1的操作模式有3种: free-running模式(计数器从0x0000开始计数,当计算值达到0xFFFF时溢出,此时IRCON.T1IF和T1CTL.OVFIF被置1,如果TIMF.OVFIF和IEN1.T1EN也被置1,就会产生中断请求,计数器复位为0x0000,重新开始计数), modulo 模式(计数器从0x0000开始计数,当计算值达到T1CC0时溢出,此时IRCON.T1IF和T1CTL.OVFIF被置1,如果TIMF.OVFIF和IEN1.T1EN也被置1,就会产生中断请求,计数器复位为0x0000,重新开始计数)和up-down模式(计数器从0x0000开始计数,当计算值达到T1CC0时,计数值开始递减直至0x0000,此时IRCON.T1IF和T1CTL.OVFIF被置1,如果TIMF.OVFIF和IEN1.T1EN也被置1,就会产生中断请求,计数器重新开始计数)
【实验步骤】
第一步:打开E盘“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使用 IAR7.51 打开“ 1.2 定时器控制实验\CC2530-1”中工程文件“ T1.eww”。

第二步:打开工程后选择 Debug 或 Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
CC2530 模块板载的蓝色LED 灯(左边)和红色LED(右边)交替闪烁。

【实验相关代码】
void Initial(void)
{
//初始化P1
P1DIR = 0x03;
//P10 P11 为输出
RLED = 1;
YLED = 1;
//灭LED
//用T1 来做实验
T1CTL = 0x3d;
//通道0,中断有效,128 分频;自动重装模式(0x0000->0xffff);
}
函数功能是将P10,P11 设为输出,并将定时器1 设为自动重装模式,计数时钟为0.25M。

6使用定时器T2
【实验目的】
1.了解CC2530 的定时器T2 的配置和使用,定时器的中断使用方式
2.如何通过程序控制CC2530 的T1 驱动LED 灯定时点亮
【实验设备】
1.本例开启定时器2的中断,计数比较溢出后产生中断来改变小灯的状态, T2 每溢出一次,红色小灯状态改变一次(由亮变暗或由暗变亮)。

T2的操作模式如T1不同没有T1的3种工作模式: free-running模式, modulo模式和up-down模式。

2.GPIO 输出控制对象为 CC2530 模块上的红色和绿色 LED,分别接在 CC2530芯片的 P1.0 和 P1.1 脚上。

输出置位为 0 时 LED 灯点亮,置位为 1 时 LED 灯熄灭。

【实验步骤】
第一步:打开E盘“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使
用 IAR7.51 打开“ 1.2 定时器控制实验\CC2530-2”中工程文件“ T2.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
CC2530 模块板载的蓝色LED 灯(左边)由定时器T2 的比较溢出中断改变状态。

【实验相关代码】
1.开启溢出中断
#define SET_TIMER2_CAP_INT() \
do{ \
T2IRQM = 0x04; \
EA = 1; \
T2IE = 1; \
T2MSEL |= 0xf4;
}while(0)
2.设定溢出周期
#define SET_TIMER2_CAP_COUNTER(val) SET_WORD(T2M1,T2M0,val)
功能:将无符号整形数val 的高8 位写入T2CAPLPL,低8 位写入T2CAPHPH。

3.启动T2
#define TIMER2_RUN() T2CTRL|=0X01
4.停止T2
#define TIMER2_STOP() do{T2CTRL&=0XFE;}while(0)
实验四、中断输入和采集实验
7定时器T4中断
【实验目的】
1.了解CC2530 的T4 的使用
2.学习定时器T4 的中断模式使用
【实验设备】
【实验原理】
1.本例用定时器 4 来改变小灯的状态,T4每2000次中断小灯闪烁一轮,闪烁的时间长度为 1000次中断所耗时间。

注意定时器 T3,T4 是 8Bit 的定时器。

2.GPIO 输出控制对象为 CC2530 模块上的红色和绿色 LED,分别接在 CC2530芯片的 P1.0 和 P1.1 脚上。

输出置位为 0 时 LED 灯点亮,置位为 1 时 LED 灯熄灭。

【实验步骤】
第一步:打开E盘“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使用 IAR7.51 打开“ 1.3 中断输入和采集实验\CC2530-1”中工程文件“ forj8-Tn.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
CC2530 模块板载的红色LED 灯(右边)在T4 产生中断1000 此后开始闪烁,再次中断1000 次后停止闪烁,一直循环执行。

【实验相关代码】
*#pragma vector = T4_VECTOR
__interrupt void T4_ISR(void)
{
//IRCON = 0x00;
//清中断标志,硬件自动完成
if(counter<200)counter++; //10 次中断LED 闪烁一轮
else
{
counter = 0; //计数清零
RLED = !RLED; //改变小灯的状态
}
}
主函数功能:这是一个中断服务程序,每200 次中断改变一次红色LED 的状态。

【实验中遇到的困难和解决办法】:怎么将 T4 设置为不同模式。

#define TIMER3_SET_MODE(val) \
do{ \
T4CTL &= ~0X03; \
(val==1)?(T4CTL|=0X01): /*DOWN */ \
(val==2)?(T4CTL|=0X02): /*Modulo */ \
(val==3)?(T4CTL|=0X03): /*UP / DOWN */ \
(T4CTL|=0X00); /*free runing */ \
}while(0)可以根据需要设置不同模式,但前提要在程序里具有定义说明。

8.外部中断实验
【实验目的】
1.了解CC2530 的中断使用
2.如何采集外部输出中断(按键触发)并控制LED 灯状态
【实验设备】
【实验原理】
1.本例使用摇杆按键来翻转 LED 的状态,但这里按键不是做键盘用,而是产生中断触发
信号。

按下节点底板上“ SW2”键, CC2530 模块上 1 个 LED 灯改变当前状态。

2.按键采用五向摇杆按键 Joystick,这里只使用按下这个键。

无按键按下时 P06的状态为上拉,高电平。

中间键按下时(Cneter),P06 与 GND 连通,P06 采集到低电平。

【实验步骤】
第一步:打开E盘“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使用 IAR7.51 打开“ 1.3 中断输入和采集实验\CC2530-2”中工程文件“ for9-external.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
按下摇杆按键“SW2”的中心按键,点亮红色LED(左边),再次按下时熄灭,循环执行。

【实验相关代码】
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
if(P0IFG>0) //按键中断
{
P0IFG = 0;
RLED = !RLED;
}
P0IF = 0; //清中断标志
}
可以在P06 触发中断的时候将红色LED 的状态翻转。

注意清中断标志的值设定。

实验五、定时器控制实验
9.ADC 采集 Joystick 按键
【实验目的】
1.了解CC2530 的ADC 原理和配置方法
2.通过ADC 采集读取Joystick 按键(摇杆)控制LED 灯
【实验原理】
1.本例以 ADC 采集读取 Joystick 按键键值,通过不同的按键动作控制不同的 LED 灯状态,将 P0.6 设置为 AD 输入模式。

2.按键采用五向摇杆按键 Joystick。

默认的情况下 P0.6 有 R17 上拉至 VCC,当
有五个按键中的任意一个按下时均会改变 P0.6 上的电压值。

例如按下“UP”键,
P0.6 上的电压值等于:
P0.6 电压值 = VCC×R20(R20+R21+R22+R23+R24)
不同的按键会由不同的分压电阻分压得到不同的电压值,CC2530 通过 ADC采集 P0.6 的电压值判断按键。

【实验步骤】
第一步:打开E盘“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使用 IAR7.51 打开“ 1.4ADC 采集实验\CC2530-1”中工程文件“ switchLED.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
按左键(Left)时控制红灯亮,按右键(Right)时控制蓝灯亮,再次按下时熄灭,循环执行。

【实验相关代码】
1.通过halAdcSampleSingle函数读取P0.6通道上的电压值判断有无按键按下和
具体的按键值。

2.ADC 采集子函数 INT16 halAdcSampleSingle(uchar reference, uchar resolution, uchar input)
【实验中遇到的困难和解决办法】如何指定采集的分辨率,采集通道等参数?配置ADC 寄存器采集指定通道的电压值
10片内温度采集
【实验目的】
1.了解CC2530 的ADC 原理和配置方法
2.通过ADC 读取片内的温度传感器值并通过串口发送出来
【实验设备】
【实验原理】
1.本例以ADC 采集读取片内温度传感器值,通过串口发送出。

2.串口采用USB 转串口TTL 芯片CP2102。

【实验步骤】
第一步:打开E盘“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使用IAR7.51 打开“ 1.4ADC采集实验\CC2530-2”中工程文件“forj10-ADtemperature.eww”。

用 USB Mini 线连接节点底板和 PC 机,如提示未安装驱动,根据向导指向在光盘中“软件工具及驱动\cp2102\CP210x\WIN”安装 CP2102 驱动。

驱动程序安装成功后可以在从桌面-->我的电脑(单击右键)-->在硬件选项中点击“设备管理器”按钮。

打开设备管理器查看对应的串口号。

打开“串口调试助手”软件,根据 CP2102 对应的串口在软件中打开串口通讯口,波特率:57600,数据位:8,停止位:1,无奇偶校验。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
CC2530 采集到片内的温度传感器值后通过串口输出相关的数据。

但是数据会出现波动,不是一成不变。

【实验相关代码】
1.void UartTX_Send_String(char *Data,int len)函数原型:
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
函数功能:串口发送数据,*data 为发送缓冲的指针,len 为发送数据的长度,在初始
化串口后才可以正常调用。

(这里需要设置)
2.void initTempSensor(void)函数原型:
void initTempSensor(void){
DISABLE_ALL_INTERRUPTS();
SET_MAIN_CLOCK_SOURCE(0);
*((BYTE __xdata*) 0xDF26) = 0x80;
}
函数功能:将系统时钟设为晶振,设AD 目标为片机温度传感器。

3.将片内温度传感器AD 转换的结果转换成温度。

#define ADC14_TO_CELSIUS(ADC_VALUE) ( ((ADC_VALUE) >> 4) - 315。

【实验中遇到的困难和解决办法】
1.在查看串口设置时,电脑不是完全按照串口2作为的,有时需要另外设置,并且只能选取没有被占用的串口号。

2.在串口设置完毕后点击程序运行等才能在串口上看到结果,需要注意先后顺序。

实验六、串口收发实验
实验日期:2016/05/09
11串口通讯
【实验目的】
1.了解CC2530 的串口结构和配置原理
2.如何通过程序控制CC2530 的串口收发数据
【实验内容】
从 CC2530 上通过串口不断地发送字串“ UART0 TX Test”。

实验使用 CC2530 的串口 1,波特率为 57600
【实验步骤】
第一步:打开“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”。

使用IAR7.51 打开“ 1.5 串口收发实验\CC2530-1”中工程文件“ forj13-uartt.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

打开“串口调试助手”软件,根据 CP2102 对应的串口在软件中打开串口通讯口,波特率: 57600,数据位: 8,停止位: 1,无奇偶校验。

【实验现象】
CC2530 上通过串口不断地发送字串“UART0 TX Test”
【实验相关代码】
void initUARTtest(void);函数原型:
void initUARTtest(void)
{
CLKCONCMD &= ~0x40; //晶振
while(!(SLEEPSTA & 0x40)); //等待晶振稳定
CLKCONCMD &= ~0x47; //TICHSPD128 分频,CLKSPD 不分频
SLEEPCMD |= 0x04;
//关闭不用的RC 振荡器
PERCFG = 0x00;
//位置1 P0 口
P0SEL = 0x3c;
//P0 用作串口
P2DIR &= ~0XC0; //P0 优先作为串口0
U0CSR |= 0x80;
//UART 方式
U0GCR |= 10;
//baud_e
U0BAUD |= 216;
//波特率设为57600
UTX0IF = 0;
}
函数功能:初始化串口0,将I/O 映射到P0 口,P0 优先作为串口0 使用,UART 工作方式,波特率为57600。

使用晶振作为系统时钟源。

在修改串口号之后还要注意波特率的修改。

12.串口显示时钟
【实验目的】
1.了解CC2530 的串口结构和配置原理
2.如何结合定时器通过串口输出显示时钟
【实验内容】
利用 CC2530 定时器 1 产生秒信号,通过串口显示时钟。

【实验步骤】
第一步:把“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”复制至 C:\根目录下的“ Texas Instruments”文件夹内。

使用 IAR7.51 打开“ 1.5 串口收发实验\CC2530-4”中工程文件“ UARTclock.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
CC2530 上通过串口每隔1s 中发送一次最新的时钟数据
【实验相关代码】
void T1_ISR(void);函数原型:
__interrupt void T1_ISR(void)
{
IRCON &= ~0x02;//清中断标志
counter++;
if(counter == 250)
{
counter = 0;
timetemp = 1; //一秒到
led1 = ~led1; // 调试指示用
}
}
函数功能:T1 中断服务程序,每250 次中断将timetemp 置1,表示1 秒时间到,同时改变LED 的状态。

【实验中遇到的困难和解决办法】
如何设置时间为1秒显示?T1 计数时钟为 0.25M(见 voidInitClock(void)说明),令T1CC0 = 0X03E8 = 1000,250 次中断溢出为 1s。

实验七、低功耗控制实验
13.系统睡眠和中断唤醒
【实验目的】
1.了解CC2530 的电源管理和低功耗模式
2.如何通过程序控制CC2530 进入低功耗模式和中断唤醒
【实验原理】
1.本例实验使能外部I/O 中断(按下节点底板的SW2 按键) 先让CC2530进入低功耗状态,按键产生中断唤醒CC2530,每次唤醒LED闪烁10 次,然后进入低功耗模式,在进入PM3 之前程序会将两个LED 灯关闭。

在应用中也可以不关闭以指示CC2530 处于低功耗模式,可以中断激活。

2530 一共有 4 种功耗模式,分别是 PM0, PM1, PM2, PM3,以 PM3 功耗最低。

3.按键采用五向摇杆按键 Joystick,这里只使用按下这个键。

无按键按下时 P06的状态为上拉,高电平。

中间键按下时(Cneter),P06 与 GND 连通,P06 采集到低电平。

【实验步骤】
第一步:把“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”复制至 C:\根目录下的“ Texas Instruments”文件夹内。

使用 IAR7.51 打开“ 1.6 低功耗控制实验\CC2530-2”中工程文件“ forj18-wakeup.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
CC2530 模块板载的蓝色LED 灯(左边)闪烁10 次后蓝色LED 和红色LED 均熄灭,系统已经进入PM3 的休眠模式。

此时按在SW2 按键的中间键唤醒CC2530 蓝色LED 灯再次闪烁10 次后又进入PM3 的休眠模式。

【实验相关代码】
void PowerMode(uchar sel)
{
uchar i,j;
i = sel;
if(sel<4)
{
SLEEPCMD &= 0xfc;
SLEEPCMD |= i;
for(j=0;j<4;j++);
PCON = 0x01;
}
else
{
PCON = 0x00;
}
}
函数功能:使系统进入sel 指定的电源模式下,这里的sel 只能是0-3 之间的数,程序只能在CPU 全速运行时执行,也就是说函数中能使系统从全速运行进入PM0-PM3 而不可以从PM0-PM3 进入全速运行。

14.系统睡眠和定时唤醒
【实验目的】
1.了解CC2530 的电源管理和低功耗模式
2.如何通过程序控制CC2530 进入低功耗模式和定时器唤醒
【实验内容】
1.这个实验利用睡眠定时器工作在多个电源模式下这一特性来实现定时唤醒,最长的唤醒时隔为8分32秒,而最短的时隔可达30余微秒。

实验中在设定好唤醒时间后让CC2530进入PM2模式,在达到指定时间后小灯闪烁,之后再次是设定唤醒时间,进入PM2,唤醒的循环。

2530 一共有 4 种功耗模式,分别是 PM0,PM1,PM2,PM3,以 PM3 功耗最低。

【实验步骤】
第一步:把“ \演示及开发例子程序\”内文件夹“ CC2530 单片机基础程序”复制至 C:\根目录下的“ Texas Instruments”文件夹内。

使用 IAR7.51 打开“ 1.6 低功耗控制实验\CC2530-4”中工程文件“ forj22.eww”。

第二步:打开工程后选择Debug 或Release 模式。

第三步:编译工程并下载到目标板。

第四步:运行和查看效果。

【实验现象】
CC2530 模块板载的红色LED 灯(右边)闪烁10 次启动睡眠定时器并进入PM2 休眠模
式。

系统在3s 后唤醒,此时蓝色LED 状态改变(由亮变灭或由灭变亮)。

【实验相关代码】
改变系统的电源功耗模式
#define SET_POWER_MODE(mode) \
do { \
if(mode == 0) { SLEEPCMD &= ~0x03; } \
else if (mode == 3) { SLEEPCMD |= 0x03; }
\
else { SLEEPCMD &= ~0x03; SLEEPCMD |= mode; } \
PCON |= 0x01; \
asm("NOP"); \
}while (0)
看门狗实验截图:
实验八、精简OS实验
实验日期:2016/05/12
【实验目的】
1.初始化操作系统,了解OS 的运行机制和原理
2.了解如何在OS 中添加事件
【实验设备】
【实验原理】
【实验步骤】
1.打开“ Z-Stack 实验\1.OS 实验\osbasic”内的工程文件,编译下载程序后,采用 USB 线把网关底板和电脑连接起来。

打开串口调试助手,根据实际选择COM接口,波特率选择“ 38400”。

2.按下网关底板的复位按键,从串口输出数据:
【实验现象】
复位所首先输出:
“ ------- OS prj -------
OS SYS events
OS test events‖
然后每隔 3 秒输出一串字符:“ OS Timer events”。

该实验表演了 ZIGBEE 所包含的精简 OS 系统,怎么样发送所处理事件以及超时定时器
的使用。

【代码分析】1、初始化工作:
a)初始化 CC2530 工作时钟为 32MHz
b) 初始化串口:配置串口 0 为工作串口
c)设置串口 0 波特率为 38400
d) 初始化定时器 1,该定时的中断作为操作系统脉搏时钟
e)发送提示符
f)使能全局中断
intClock(); // ①初始化时钟
IntUart(); // ②初始化串口
timer1_int(); //初始化定时器
UART_SETUP(0,38400);//设置波特率为 38400
uartsendstring((void *)Txdata,strlen((void *)Txdata));//③发送字符串
EA = 1;
2.初始化操作系统:a)操作系统初始化主要工作是操作系统任务初始化b) 任务初始化分为两个步骤:将所有任务对应的事件表清空;为每个任务分配任务 ID 并初始化具体任务。

3.进入操作系统轮询
4.事件的设置和响应
5.在主函数中调用事件设置函数:
在任务号为 testOSTaskID 的任务设置了系统事件 0x8000 和非系统事件 0x0001
osal_set_event(testOSTaskID,0x8001 ); //触发事件 0x0001&0x8000
在任务号为 testOSTaskID 的任务设置了超时事件 0x0002,超时值为 3000
osal_start_timerEx(testOSTaskID, 0x0002, 3000); //打开超时定时器,3 秒超时
对应的任务处理函数如下:
uint16 testOsProcess( uint8 taskId, uint16 events )
{
//系统任务
if( events & 0x8000 )
{
uartsendstring((void *)"OS SYS events\r\n",15);
return events ^ 0x8000;
}
//串口信息任务
if( events & 0x0001 )
{
uartsendstring((void *)"OS test events\r\n",16);
return events ^ 0x0001;
}
if(events & 0x0002 )
{
uartsendstring((void *)"OS Timer events\r\n",17);
osal_start_timerEx(testOSTaskID, 0x0002, 3000);//打开超时定时器,3 秒超时
return events ^ 0x0002;
}
return 0;
}
对 0x8000 事件,通过串口发送"OS SYS events\r\n"字符串;
对 0x0001 事件,通过串口发送"OS test events\r\n"字符串;
对 0x0002 事件,通过串口发送"OS Timer events\r\n"字符串,并周期设置该事件。

【实验中遇到的困难和解决办法】操作系统如何设置需要仔细,否则得不到实验结果。

实验九、硬件抽象层HAL实验。

相关文档
最新文档