无线传感器网络实验报告.docx
- 文档编号:10435369
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:48
- 大小:28.54KB
无线传感器网络实验报告.docx
《无线传感器网络实验报告.docx》由会员分享,可在线阅读,更多相关《无线传感器网络实验报告.docx(48页珍藏版)》请在冰豆网上搜索。
无线传感器网络实验报告
集团文件版本号:
(M928-T898-M248-WU2669-I2896-DQ586-M1988)
无线传感器网络实验报告
无线传感器网络实验报告
专业计算机科学与技术
班级13级计科1班
学号
姓名
实验一CC2530I/O基础实验
实验二CC2530按键中断
实验三CC2530定时器的使用
实验四串行通信接口发送与接收
实验五Zigbee点到点无线通信
实验六Zigbee串口实验
实验七无线温度检测实验
实验八Zigbee组网实验
实验一CC2530I/O基础实验
一、实验目的
1.掌握IAR编译软件界面的功能;
2.掌握配置通用IO寄存器的方法;
3.掌握如何编写代码及程序下载。
二、实验内容
1.使用CC2530的IO来控制LED灯循环闪烁;
2.判断按键是否被按下,如果按下,改变LED灯的状态,原先亮的灯灭,原先灭的亮,如此循环下去。
三、相关知识点
cc2530有21个可编程的I/O引脚,P0、P1口是完全的8位口,
P2口只有5个可使用的位。
通过软件设定一组SFR寄存器的位和字节,可使这些引脚作为通常的I/O口或作为连接ADC、计时器或USART部件的外围设备I/O口使用。
2.I/O口特性:
(1)可设置为通常的I/O口,也可设置为外围I/O口使用;
(2)在输入时有上拉和下拉能力;
(3)全部21个数字I/O口引脚都具有影响外部的中断事件也能被用来唤醒休眠模式。
3.I/O端口的寄存器如下:
P0:
端口0P1:
端口1P2:
端口2
PERCFG:
外设控制寄存器APCFG:
模拟外设I/O配置
P0SEL:
端口0功能选择寄存器P1SEL:
端口1功能选择寄存器
P2SEL:
端口2功能选择寄存器P0DIR:
端口0方向寄存器
P1DIR:
端口1方向寄存器P2DIR:
端口2方向寄存器
P0INP:
端口0输入模式寄存器P1INP:
端口1输入模式寄存器
P2INP:
端口2输入模式寄存器P0IFG:
端口0中断状态标志寄存器
P1IFG:
端口1中断状态标志寄存器
P2IFG:
端口2中断状态标志寄存器PICTL:
中断边缘寄存器
P0IEN:
端口0中断掩码寄存器P1IEN:
端口1中断掩码寄存器
P2IEN:
端口2中断掩码寄存器PMUX:
掉信号Mux寄存器
OBSSEL0:
观察输出控制寄存器0OBSSEL1:
观察输出控制寄存器1
OBSSEL2:
观察输出控制寄存器2OBSSEL3:
观察输出控制寄存器3
OBSSEL4:
观察输出控制寄存器4OBSSEL5:
观察输出控制寄存器5
四、实验步骤
1.启动IAR;
2.新建一个IAR工作区,或者打开一个IAR工作区;
3.连接CCDebugger调试器和ZigBee模块、连接CCDebugger到计算机,安装驱动;
4.设置项目参数;
5.编写、编译、下载程序。
五、实验源程序
//*******************************
//I/O口轮流控制2个LED循环点亮
//*******************************
#include
#defineuintunsignedint
#defineucharunsignedchar
//定义控制灯的端口
#defineRLEDP1_0//定义LED1为P10口控制
#defineYLEDP1_1//定义LED2为P11口控制
#defineK1P2_0
//函数声明
voidDelay(uint);//延时函数
voidInitialLed(void);//初始化P1口
voidInitialKey(void);
/****************************
//延时
*****************************/
voidDelay(uintn)
{
uinttt;
for(tt=0;tt for(tt=0;tt for(tt=0;tt for(tt=0;tt for(tt=0;tt } /**************************** //初始化程序 *****************************/ voidInitialLed(void) { P1DIR|=0x03;//P10、P11定义为输出 RLED=1; YLED=1;//LED } voidInitialKey(void) { P2SEL&=~0X01; P2DIR&=~0X01; P2INP|=0X00; } /*************************** //主函数 ***************************/ voidmain(void) { InitialLed();//调用初始化函数 InitialKey(); RLED=0;//LED1 YLED=0;//LED2 while (1) { if(k1==0) { delay(100); if(k1==0) { while(k1==0); YLED=! YLED; Delay(10000); YLED=! YLED; RLED=! RLED; Delay(50000); Delay(50000); } } } } 六、实验结果和过程截图 七、实验小结 1.cc2530通用IO使用需要配置相关寄存器; 2.cc2530通用IO寄存器的类型以及每个类型如何配置; 3.I/O端口具备如下特性: (1)21个数字I/O引脚; (2)可以配置为通用I/O或外部设备I/O; (3)输入口具备上拉或下拉能力; (4)具有外部中断能力。 实验二CC2530按键中断 一、实验目的 1.理解中断处理机制; 2.掌握通用I/O端口中断处理方法。 二、实验内容 用中断方式来判断按键是否被按下,如果按下,改变LED灯的状态,原先亮的灯灭,原先灭的灯亮,如此循环下去。 三、相关知识点 1.中断概述: cc2530有18个中断源,每个中断源都有它自己的位于一系列寄存器中的中断请求标志,每个中断可以分别使能或禁用; 2.中断屏蔽: 每个中断请求可以通过设置中断使能寄存器IEN0,IEN1或者IEN2的中断使能位使能或禁止。 注意某些外部设备有若干事件,可以产生与外设相关的中断请求。 这些中断请求可以作用在端口0、端口1、端口2、定时器1、定时器2、定时器3、定时器4和无线电上。 对于每个内部中断源对应的SFR寄存器,这些外部设备都有中断屏蔽位; 3.中断使能的步骤: 总中断使能;端口中断使能;位中断使能;触发沿设置。 中断处理程序格式: #pragamavector=中断向量 ——interruptvoid任意函数名 { //中断处理,处理完成后通常需要清除中断; } 四、实验步骤 1.启动IAR; 2.新建一个IAR工作区,或者打开一个IAR工作区,新建project; 3.根据预备知识编写程序,编译程序; 4.设置项目参数; 5.连接CCDebugger调试器和ZigBee模块,下载程序,测试其运行效果; 6.分析总结代码。 五、实验源程序 //头文件的包含和宏定义 #include #defineuintunsignedint #defineucharunsignedchar //定义控制灯的端口 #defineRLEDP1_0//定义LED1为P10口控制 #defineYLEDP1_1//定义LED2为P11口控制 #defineKEY1P2_0//定义按键为P20口控制 //函数声明 voidDelay(uint);//延时函数声明 voidInitialLed(void);//初始化函数声明 voidInitKey(void);//初始化按键函数声明 /**************************** //延时 *****************************/ voidDelay(uintn) { uinti; for(i=0;i for(i=0;i for(i=0;i for(i=0;i for(i=0;i } /**************************** //初始化按键,并设置其为中断输入方式 *****************************/ voidInitKeyINT(void) { P2SEL&=~0X01;//引脚为通用IO口; P2DIR&=~0X01;//按键在P20口,设置为输入模式 P2INP&=~0x81;//上拉,下拉 EA=1;//开全局中断 IEN2|=0X02;//开端口2中断 P2IEN|=0X01;//P20设置为中断方式,开端口2零号引脚中断 PICTL|=0X08;//设置中断触发方式 P2IFG|=0X00;//清端口2零号引脚的中断标志 } /**************************** //初始化LED,将P10、P11定义为输出口,并将LED灯初始化为灭 *****************************/ voidInitialLed(void) { P1SEL&=~0X03; P1DIR|=0x03;//P10、P11定义为输出 RLED=1; YLED=0; } /**************************** //中断处理函数 *****************************/ #pragmavector=P2INT_VECTOR __interruptvoidP2_ISR(void) { if(P2IFG>0)//按键中断 { RLED=! RLED; YLED=! YLED; P2IFG=0; Delay(100); P2IF=0;//清中断标志 } } /*************************** //主函数 ***************************/ voidmain(void) { InitalLed(); InitKeyINT();//调用初始化函数 while (1) { } } 六、实验结果和过程截图 七、实验小结 1.当按键KEY按下时,因为KEY所对应的I/O口为P2_0,所以P2端口将会发出一个中断请求,并自动将P2IFG寄存器对应位(即D0位)置1,等待CPU响应; 2.CPU在执行完一条指令之后就会检测是否有中断请求,如果检测到中断请求并且IEN2的D1位为1和P2IEN的D0为1时,对应的中断使能位中断使能,则根据中断类型号获得中断向量,根据中断向量得到中断服务子程序的地址,执行终端服务子程序。 当中断服务子程序执行完毕后返回执行原来的程序。 实验三CC2530定时器的使用 一、实验目的 1.熟悉cc2530单片机定时器基本功能; 2.掌握cc2530单片机定时器1的配置方法。 二、实验内容 以查询方式查看Timer1是否有溢出,让它来控制LED1、LED2灯以1s的时间间隔轮流闪烁。 三、相关知识点 1.cc2530定时器的基本功能: 实质是实现计数,在每个活动时钟边沿递增或者递减。 活动时钟边沿由寄存器位CLKCON.TICKSPD定义,它设置全球系统始终的划分,提供了从0.25MHz到32MHz的不同的时钟标签频率(可以使用32MHzXOSC作为时钟源); 2.cc2530定时器T1的基本功能: 定时器T1是一个独立的16位定时器,支持典型的定时/计数功能,比如输入捕获,输出比较和PWM功能。 定时器有五个独立的捕获/比较通道。 每个通道定时器使用一个I/O引脚。 定时器用于范围广泛的控制和测量应用,可用的五个通道的正计数/倒计数模式将允许诸如电机控制应用的实现; 3.定时器T1的寄存器,由以下几个组成: T1CTL-定时器1控制 T1STAT-定时器1状态 T1CNTH-定时器1计数高位 T1CNTL-定时器1计数地位 T1CCTLn-定时器1通道n捕获/比较控制 T1CCnH-定时器1通道n捕获/比较高位值 T1CCnL-定时器1通道n捕获/比较低位值 四、实验步骤 1.启动IAR; 2.新建一个IAR工作区,或者打开一个IAR工作区,新建project; 3.根据预备知识编写程序,编译程序; 4.设置项目参数; 5.连接CCDebugger调试器和ZigBee模块,下载程序,测试其运行效果; 6.分析总结代码。 五、实验源程序 //******************************************* 定时器T1控制闪灯实验(T1计数溢出两次小灯轮闪一次) //******************************************* #include #defineuintunsignedint #defineucharunsignedchar #defineYLEDP1_0 #defineRLEDP1_1 uintcounter=0;//统计溢出次数 uintTempFlag=0;//用来标志是否要闪灯 voidInitial(void); voidDelay(uint); /**************************** //初始化程序 ***************************/ voidInitial(void) { //初始化P1 P1DIR=0x03;//P10P11为输出 RLED=1; YLED=1;//灭LED //用T1来做实验 T1CTL=0x0d;//通道0,中断有效,128分频;自动重装模式(0x0000->0xffff); //T1CTL=0x39;//通道0,中断有效,32分频;自动重装模式(0x0000->0xffff); //T1STAT=0x21; T1CCTL0=0X02;// } /*************************** //主函数 ***************************/ voidmain() { Initial();//调用初始化函数 RLED=0;//点亮红色LED while (1)//查询溢出 { if(IRCON>0) { IRCON=0;//清溢出标志 counter++; if(counter==2) { TempFlag=! TempFlag;//闪灯标志取反 } } if(TempFlag)//如果有闪灯标志,闪灯! 同时红灯和上周期不同 { YLED=RLED; counter=0; Delay(6000); Delay(6000); RLED=! RLED; Delay(6000); } } } /**************************** //普通延时程序 ***************************/ voidDelay(uintn) { uinti; for(i=0;i for(i=0;i for(i=0;i for(i=0;i for(i=0;i } 六、实验结果和过程截图 七、实验小结 1.cc2530定时器的使用需要配置相关寄存器; 2.cc2530定时器的寄存器类型以及每个类型如何配置; 3.定时器1的功能如下: (1)五个捕获/比较通道; (2)上升沿、下降沿或任何边沿的输入捕获; (3)设置、清除或切换输出比较; (4)自由运行、模或正计数/倒计数操作; (5)可被1,8,32,或128整除的时钟分频器; (6)在每个捕获/比较和最终计数上生成中断请; (7)DMA触发功能。 实验四串行通信接口发送与接收 一、实验目的 1.了解cc2530串口的功能; 2.掌握cc2530通过串口往电脑发送数据。 二、实验内容 由cc2530单片机串口发送hello,在pc机用串口工具观察数据接收。 三、相关知识点 实验程序编写: (1)配置串行通信接口usart0的位置(可采用默认值),并设置优先级为最高; (2)配置串行通信接口usart0的工作模式,一般工作模式为uart; (3)配置串行通信接口连接引脚的IO功能,设置其为连接外设; (4)配置串行通信接口的波特率。 四、实验步骤 1.JLINK8和传感器节点相连,下载串口控制程序; 2.运行串口调试助手,进行相应设置; 3.启动IAR,编写实验程序,连接CCDEBUG和CC2530,编写实验程序; 4.观察实验结果。 五、实验源程序 #include #include #include #defineuintunsignedint #defineucharunsignedchar #defineled1P1_0 #defineled2P1_1 //#definekeyP2_0 charTXData[25]; //延时函数; voiddelay(uintn) { uinti; for(i=0;i for(i=0;i for(i=0;i for(i=0;i for(i=0;i } //串口初始化函数 voidinituartsend(void) {//设置系统的主时钟源; CLKCONCMD&=~0x40; //等待时钟稳定; while(CLKCONSTA&0x40); //设置系统时钟的主频率; CLKCONCMD&=~0x47; //设置串口的位置为0,即使用P0口的2345引脚; PERCFG&=~0x01; //将P0口的2345引脚功能设置为连接外设; P0SEL|=0x3C; //设置串口的通信模式为异步通信; U0CSR|=0x80; //设置串口的波特率为57600; U0GCR|=10; U0BAUD|=216; //开中断,将串口发送使能;并清零串口发送中断标志位; EA=1; IEN2|=0x04; UTX0IF=0; //初始化与LED灯相关的寄存器; P1DIR|=0x03; } //发送函数; voiduarttx_send_string(char*data,intlen) { intj; for(j=0;j { U0DBUF=*data++; //while(UTX0IF==0); //UTX0IF=0; //printf("%d",UTX0IF); while(UTX0IF==0); UTX0IF=0; led1=! led1; delay(50000); led2=! led2; } } main() { //初始时关闭LED灯; led1=1; led2=1; //调用此函数对串口0进行初始化; inituartsend(); strcpy(TXData,"hello"); while (1) { uarttx_send_string(TXData,sizeof("hello")); delay(5000); } } 六、实验结果和过程截图 七、实验小结 1.cc2530配置串口的一般步骤: (1)配置IO,使用外部设备功能; (2)配置串口的控制和状态寄存器; (3)配置串口工作的波特率。 2.注意以下三点: (1)由于使用异步Uart模式,数据传输速度是比较慢的; (2)CC2530有4个时钟,分别为: 内部32KHzRCOscillator和外部32.768KHz晶振,还有内部自带的16MHzRCoscillator和32MHzcrystaloscillator。 CC2530的系统时钟systemclock可选择外部32MHzcrystaloscillator,或者内部自带的16MHzRCoscillator,但是RF工作时必须选择32MHzcrystaloscillator。 另外,CC2530的32KHzClock可以选择外部的32.768KHz,或者内部32KHzRCOscillator,32KHz时钟最主要使用在SleepTimer和WatchdogTimer上。 上电运行的时候先用的是内部自带的16MHzRCoscillator,因为RC的起振时间短,正常运行后再换成32MHz,用于RF; (3)为了提高通信的效率,我们需要提高系统的时钟,所以,本实验配置系统时钟为32MHz。 实验五Zigbee点到点无线通信 一、实验目的 1.掌握zigbee协议栈的安装、编译与下载; 2.了解数据传输的基本过程。 二、实验内容 两个Zigbee节点进行点对点通信,Zigbee节点2发送LED三个字符,Zigbee节点1收到数据后,对接收到的数据进行判断,如果收到的数据是LED,使得开发板上的LED灯闪烁。 三、相关知识点 1.Z-Stack协议栈的简介 (1)Z-Stack是TI公司开发的Zigbee协议栈,其实际上是帮助程序员方便开发Zigbee的一套系统; (2)使用IAREmbeddedWorkbenchfor8051作为它的集成开发环境; (3)提供了操作系统抽象层OSAL,用户在进行具体的应用开发时只能够通过调用API来进行; (4)用户对Zigbee无线网络的开发简化为应用层的C语言程序开发,用户不需要深入研究复杂的Zigbee协议栈。 2.Z-Stack协议栈基本概念 (1)设备类型—协调器,路由器,终端设备 (2)信道 (3)PANID (4)地址 (5)数据传输方式 (6)端点 (7)拓扑结构 (8)簇 (9)路由 3.Z-Stack的下载与安装 TI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无线 传感器 网络 实验 报告