




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..>无线传感器网络实验报告专业计算机科学与技术班级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:端口2PERCFG:外设控制存放器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中断掩码存放器PMU*:掉信号Mu*存放器OBSSEL0:观察输出控制存放器0OBSSEL1:观察输出控制存放器1OBSSEL2:观察输出控制存放器2OBSSEL3:观察输出控制存放器3OBSSEL4:观察输出控制存放器4OBSSEL5:观察输出控制存放器5实验步骤1.启动IAR;2.新建一个IAR工作区,或者翻开一个IAR工作区;3.连接CCDebugger调试器和ZigBee模块、连接CCDebugger到计算机,安装驱动;4.设置工程参数;5.编写、编译、下载程序。实验源程序//*******************************//I/O口轮流控制2个LED循环点亮//*******************************#include<ioCC2530.h>#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<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++);}/****************************//初始化程序*****************************/voidInitialLed(void){P1DIR|=0*03;//P10、P11定义为输出RLED=1;YLED=1; //LED}voidInitialKey(void){P2SEL&=~0*01;P2DIR&=~0*01;P2INP|=0*00;}/***************************//主函数***************************/voidmain(void){InitialLed();//调用初始化函数InitialKey();RLED=0; //LED1YLED=0; //LED2while(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任意函数名{//中断处理,处理完成后通常需要去除中断;}实验步骤启动IAR;新建一个IAR工作区,或者翻开一个IAR工作区,新建project;根据预备知识编写程序,编译程序;设置工程参数;连接CCDebugger调试器和ZigBee模块,下载程序,测试其运行效果;分析总结代码。实验源程序//头文件的包含和宏定义#include<ioCC2530.h>#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<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++);for(i=0;i<n;i++); for(i=0;i<n;i++);}/****************************//初始化按键,并设置其为中断输入方式*****************************/voidInitKeyINT(void){P2SEL&=~0*01;//引脚为通用IO口;P2DIR&=~0*01;//按键在P20口,设置为输入模式P2INP&=~0*81;//上拉,下拉EA=1;//开全局中断IEN2|=0*02;//开端口2中断P2IEN|=0*01;//P20设置为中断方式,开端口2零号引脚中断PICTL|=0*08;//设置中断触发方式P2IFG|=0*00;//清端口2零号引脚的中断标志}/****************************//初始化LED,将P10、P11定义为输出口,并将LED灯初始化为灭*****************************/voidInitialLed(void){P1SEL&=~0*03;P1DIR|=0*03;//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){}}实验结果和过程截图实验小结当按键KEY按下时,因为KEY所对应的I/O口为P2_0,所以P2端口将会发出一个中断请求,并自动将P2IFG存放器对应位〔即D0位〕置1,等待CPU响应;CPU在执行完一条指令之后就会检测是否有中断请求,如果检测到中断请求并且IEN2的D1位为1和P2IEN的D0为1时,对应的中断使能位中断使能,则根据中断类型号获得中断向量,根据中断向量得到中断效劳子程序的地址,执行终端效劳子程序。当中断效劳子程序执行完毕后返回执行原来的程序。实验三CC2530定时器的使用实验目的1.熟悉cc2530单片机定时器根本功能;2.掌握cc2530单片机定时器1的配置方法。实验内容以查询方式查看Timer1是否有溢出,让它来控制LED1、LED2灯以1s的时间间隔轮流闪烁。相关知识点1.cc2530定时器的根本功能:实质是实现计数,在每个活动时钟边沿递增或者递减。活动时钟边沿由存放器位CLKCON.TICKSPD定义,它设置全球系统始终的划分,提供了从0.25MHz到32MHz的不同的时钟标签频率〔可以使用32MHz*OSC作为时钟源〕;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捕获/比较低位值实验步骤启动IAR;新建一个IAR工作区,或者翻开一个IAR工作区,新建project;根据预备知识编写程序,编译程序;设置工程参数;连接CCDebugger调试器和ZigBee模块,下载程序,测试其运行效果;分析总结代码。实验源程序//*******************************************定时器T1控制闪灯实验〔T1计数溢出两次小灯轮闪一次〕//*******************************************#include<ioCC2530.h>#defineuintunsignedint#defineucharunsignedchar#defineYLEDP1_0#defineRLEDP1_1uintcounter=0; //统计溢出次数uintTempFlag=0; //用来标志是否要闪灯voidInitial(void);voidDelay(uint);/****************************//初始化程序***************************/voidInitial(void){//初始化P1P1DIR=0*03; //P10P11为输出RLED=1;YLED=1; //灭LED//用T1来做实验T1CTL=0*0d; //通道0,中断有效,128分频;自动重装模式(0*0000->0*ffff);//T1CTL=0*39; //通道0,中断有效,32分频;自动重装模式(0*0000->0*ffff);//T1STAT=0*21;T1CCTL0=0*02;//}/***************************//主函数***************************/voidmain(){Initial(); //调用初始化函数RLED=0; //点亮红色LEDwhile(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<n;i++);for(i=0;i<n;i++);for(i=0;i<n;i++);for(i=0;i<n;i++);for(i=0;i<n;i++);}实验结果和过程截图实验小结1.cc2530定时器的使用需要配置相关存放器;2.cc2530定时器的存放器类型以及每个类型如何配置;3.定时器1的功能如下:五个捕获/比较通道;上升沿、下降沿或任何边沿的输入捕获;设置、去除或切换输出比较;自由运行、模或正计数/倒计数操作;可被1,8,32,或128整除的时钟分频器;在每个捕获/比较和最终计数上生成中断请;DMA触发功能。实验四串行通信接口发送与接收实验目的了解cc2530串口的功能;掌握cc2530通过串口往电脑发送数据。实验内容由cc2530单片机串口发送hello,在pc机用串口工具观察数据接收。相关知识点实验程序编写:配置串行通信接口usart0的位置〔可采用默认值〕,并设置优先级为最高;配置串行通信接口usart0的工作模式,一般工作模式为uart;配置串行通信接口连接引脚的IO功能,设置其为连接外设;配置串行通信接口的波特率。实验步骤JLINK8和传感器节点相连,下载串口控制程序;运行串口调试助手,进展相应设置;启动IAR,编写实验程序,连接CCDEBUG和CC2530,编写实验程序;观察实验结果。实验源程序#include<iocc2530.h>#include<string.h>#include<stdio.h>#defineuintunsignedint#defineucharunsignedchar#defineled1P1_0#defineled2P1_1//#definekeyP2_0charT*Data[25];//延时函数;voiddelay(uintn){uinti;for(i=0;i<n;i++);for(i=0;i<n;i++);for(i=0;i<n;i++);for(i=0;i<n;i++);for(i=0;i<n;i++);}//串口初始化函数voidinituartsend(void){//设置系统的主时钟源;CLKCONCMD&=~0*40;//等待时钟稳定;while(CLKCONSTA&0*40);//设置系统时钟的主频率;CLKCONCMD&=~0*47;//设置串口的位置为0,即使用P0口的2345引脚;PERCFG&=~0*01;//将P0口的2345引脚功能设置为连接外设;P0SEL|=0*3C;//设置串口的通信模式为异步通信;U0CSR|=0*80;//设置串口的波特率为57600;U0GCR|=10;U0BAUD|=216;//开中断,将串口发送使能;并清零串口发送中断标志位;EA=1;IEN2|=0*04;UT*0IF=0;//初始化与LED灯相关的存放器;P1DIR|=0*03;}//发送函数;voiduartt*_send_string(char*data,intlen){intj;for(j=0;j<len;j++){U0DBUF=*data++;//while(UT*0IF==0);//UT*0IF=0;//printf("%d",UT*0IF);while(UT*0IF==0);UT*0IF=0;led1=!led1;delay(50000);led2=!led2;}}main(){//初始时关闭LED灯;led1=1;led2=1;//调用此函数对串口0进展初始化;inituartsend();strcpy(T*Data,"hello");while(1){uartt*_send_string(T*Data,sizeof("hello"));delay(5000);}}实验结果和过程截图实验小结cc2530配置串口的一般步骤:配置IO,使用外部设备功能;配置串口的控制和状态存放器;配置串口工作的波特率。注意以下三点:由于使用异步Uart模式,数据传输速度是比较慢的;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;为了提高通信的效率,我们需要提高系统的时钟,所以,本实验配置系统时钟为32MHz。实验五Zigbee点到点无线通信实验目的1.掌握zigbee协议栈的安装、编译与下载;2.了解数据传输的根本过程。实验内容两个Zigbee节点进展点对点通信,Zigbee节点2发送LED三个字符,Zigbee节点1收到数据后,对接收到的数据进展判断,如果收到的数据是LED,使得开发板上的LED灯闪烁。相关知识点Z-Stack协议栈的简介Z-Stack是TI公司开发的Zigbee协议栈,其实际上是帮助程序员方便开发Zigbee的一套系统;使用IAREmbeddedWorkbenchfor8051作为它的集成开发环境;提供了操作系统抽象层OSAL,用户在进展具体的应用开发时只能够通过调用API来进展;用户对Zigbee无线网络的开发简化为应用层的C语言程序开发,用户不需要深入研究复杂的Zigbee协议栈。Z-Stack协议栈根本概念设备类型—协调器,路由器,终端设备信道PANID地址数据传输方式端点拓扑构造簇路由Z-Stack的下载与安装TI公司官方网站上下载和安装,下载完成之后,解压得到.e*e文件,进展安装,路径选择默认。实验步骤编写协调器的代码;编写终端节点的代码;翻开工程程序,选择EndDeviceEB-Pro编译后将程序下载到zigbee节点2;翻开协调器电源开关,后翻开终端节点电源开关,观察试验现象。实验源程序#ifndefCOORDINATOR_H#defineCOORDINATOR_H#include"ZComDef.h"#defineGENERICAPP_ENDPOINT10#defineGENERICAPP_PROFID0*0F04#defineGENERICAPP_DEVICEID0*0001#defineGENERICAPP_DEVICE_VERSION0#defineGENERICAPP_FLAGS0#defineGENERICAPP_MA*_CLUSTERS1#defineGENERICAPP_CLUSTERID1e*ternvoidGenericApp_Init(bytetask_id);e*ternUINT16GenericApp_ProcessEvent(bytetask_id,UINT16events);#endif#include"OSAL.h"#include"AF.h"#include"ZDApp.h"#include"ZDObject.h"#include"ZDProfile.h"#include<string.h>#include"coordinator.h"#include"DebugTrace.h"#if!defined(WIN32)#include"OnBoard.h"#endif#include"hal_lcd.h"#include"hal_led.h"#include"hal_key.h"#include"hal_uart.h"constcId_tGenericApp_ClusterList[GENERICAPP_MA*_CLUSTERS]={GENERICAPP_CLUSTERID};constSimpleDescriptionFormat_tGenericApp_SimpleDesc={GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,GENERICAPP_MA*_CLUSTERS,(cId_t*)GenericApp_ClusterList,0,(cId_t*)NULL};endPointDesc_tGenericApp_epDesc;byteGenericApp_TaskID;byteGenericApp_TransID;voidGenericApp_MessageMSGCE(afIncomingMAGPacket_t*pckt);voidGenericApp_SendTheMessage(void);voidGenericApp_Init(bytetask_id){GenericApp_TaskID=task_id;GenericApp_TransID=0;GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id=&GenericApp_TaskID;GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;GenericApp_epDesc.latercyReq=noLatencyReqs;afRegister(&GenericApp_epDesc);}UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){afIncomingMSGPacket_t*MSGpkt;if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericAPP_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){caseAF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;default:break;}osal_msg_deallocate((uint8*)MSGpkt);MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);}return(events^SYS_EVENT_MSG);}return0;}voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){unsignedcharbuffer[4]="";switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(buffer,pkt->cmd.Data,3);if((buffer[0]=='L')&&(buffer[1]=='E')&&(buffer[2]=='D')){HalLedBlink(HAL_LED_2,0,50,500);}else{HalLedSet(HAL_LED_2,HAL_LED_MODE_ON);}break;}}#include"OSAL.h"#include"AF.h"#include"ZDApp.h"#include"ZDObject.h"#include"ZDProfile.h"#include<string.h>#include"coordinator.h"#include"DebugTrace.h"#if!defined(WIN32)#include"OnBoard.h"#endif#include"hal_lcd.h"#include"hal_led.h"#include"hal_key.h"#include"hal_uart.h"constcId_tGenericApp_ClusterList[GENERICAPP_MA*_CLUSTERS]={GENERICAPP_CLUSTERID};constSimpleDescriptionFormat_tGenericApp_SimpleDesc={GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,0,(cId_t*)NULL,GENERICAPP_MA*_CLUSTERS,(cId_t*)GenericApp_ClusterList};endPointDesc_tGenericApp_epDesc;byteGenericApp_TaskID;byteGenericApp_TransID;devStates_tGenericApp_NwkState;voidGenericApp_MessageMSGCE(afIncomingMAGPacket_t*pckt);voidGenericApp_SendTheMessage(void);voidGenericApp_Init(bytetask_id){GenericApp_TaskID=task_id;GenericApp_NwkState=DEV_INIT;GenericApp_TransID=0;GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id=&GenericApp_TaskID;GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;GenericApp_epDesc.latercyReq=noLatencyReqs;afRegister(&GenericApp_epDesc);}UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){afIncomingMSGPacket_t*MSGpkt;if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericAPP_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){caseZDO_STATE_CHANGE:GenericApp_NwkState=(devStates_t)(MSGpkt_hdr.status);if(GenericApp_NwkState==DEV_END_DEVICE){GenericApp_SendTheMessage();}break;default:break;}osal_msg_deallocate((uint8*)MSGpkt);MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);}return(events^SYS_EVENT_MSG);}return0;}voidGenericApp_SendTheMessage(void){unsignedchartheMessageData[4]="LED";afAddrType_tmy_DstAddr;my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;my_DstAddr.endPoint=GENERICAPP_ENDPOINT;my_DstAddr.addr.shortAddr=0*0000;AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,3,theMessageData,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);HalLedBlink(HAL_LED_2,0,50,500);}实验结果和过程截图实验小结数据发送步骤:任务初始化〔登记任务号、设置、发送时间〕;设置发送内容;执行任务〔自动周期性的发送〕。数据接收步骤:接收数据。实验六Zigbee串口实验实验目的掌握zigbee协议栈中串口的应用;进一步熟悉z-stack开发的根本流程。实验内容PC机通过串口向开发板发送数据,开发板接收到数据后发送给pc机串口显示;终端节点周期性向协调器发送字符串"enddevice〞,协调器收到该字符串后,通过串口将其输出到用户PC机中。相关知识点Zigbee协议栈中对串口初始化等函数均做了实现,所以用户传递几个参数就可以使用串口;Zigbee协议栈中提供的与串口操作相关的三个函数为uint8HalUARTOpen(uint8port,halUARTCfg_t*config);unit16HalUARTRead(uint8port,uint8*buf,uint16len);unit16HalUARTWrite(uint8port,uint8*buf,uint16len)。实验步骤改动coordinator.c的代码,添加缓冲区的定义和串口的初始化;添加串口读写函数;右击工程名称,在弹出的下拉菜单中选择options,选择c/c++compiler标签,选择preprocessor标签,在definedsymbols下拉列表中输入"HAL_UART=TRUE〞;通过j-link下载串口控制程序到传感器节点底板中;将程序编译通过ccdebug下载到cc2530—EB开发板中,设置串口调试助手,在输入栏中输入字符串,点击发送按钮,观察接收栏中实验结果。实验源程序#include"OSAL.h"#include"AF.h"#include"ZDApp.h"#include"ZDObject.h"#include"ZDProfile.h"#include<string.h>#include"coend.h"#include"DebugTrace.h"#if!defined(WIN32)#include"OnBoard.h"#endif#include"hal_lcd.h"#include"hal_led.h"#include"hal_key.h"#include"hal_uart.h"constcId_tGenericApp_ClusterList[GENERICAPP_MA*_CLUSTERS]={GENERICAPP_CLUSTERID};constSimpleDescriptionFormat_tGenericApp_SimpleDesc={GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,GENERICAPP_MA*_CLUSTERS,(cId_t*)GenericApp_ClusterList,0,(cId_t*)NULL};endPointDesc_tGenericApp_epDesc;byteGenericApp_TaskID;byteGenericApp_TransID;unsignedcharuartbuf[128];voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);voidGenericApp_SendTheMessage(void);staticvoidr*CB(uint8port,uint8event);voidGenericApp_Init(bytetask_id){halUARTCfg_tuartConfig;GenericApp_TaskID=task_id;GenericApp_TransID=0;GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id=&GenericApp_TaskID;GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq=noLatencyReqs;afRegister(&GenericApp_epDesc);uartConfig.configured=TRUE;uartConfig.baudRate=HAL_UART_BR_115200;uartConfig.flowControl=FALSE;uartConfig.callBackFunc=r*CB;HalUARTOpen(0,&uartConfig);}UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){}staticvoidr*CB(uint8port,uint8event){HalUARTRead(0,uartbuf,16);if(osal_memcmp(uartbuf,".wlwmaker.",16)){HalUARTWrite(0,uartbuf,16);}}#ifndefCOEND_H#defineCOEND_H#include"ZComDef.h"#defineGENERICAPP_ENDPOINT10#defineGENERICAPP_PROFID0*0F04#defineGENERICAPP_DEVICEID0*0001#defineGENERICAPP_DEVICE_VERSION0#defineGENERICAPP_FLAGS0#defineGENERICAPP_MA*_CLUSTERS1#defineGENERICAPP_CLUSTERID1e*ternvoidGenericApp_Init(bytetask_id);e*ternUINT16GenericApp_ProcessEvent(bytetask_id,UINT16events);#endif实验结果和过程截图实验小结做实验之后才发现自己专业知识掌握的不扎实,也缺乏独立思考探索问题的意识。今后在学习工作中要不断的加以改正,认真学好专业知识,真正的将理论用于实践。实验七无线温度检测实验实验目的掌握cc2530单片机内部温度传感器的使用步骤;掌握传感器数据的采集、传输与显示根本流程。实验内容实现终端节点周期性的采集温度数据将其发送给协调器节点,协调器节点接收到数据后,通过串口将其输出到用户pc机。相关知识点对于温度数据,通信双方需要定义好温度数据的格式,一般会使用构造体将整个数据包所需要的数据包含起来;〔1〕使能温度传感器;〔2〕连接温度传感器到ADC;〔3〕初始化ADC,确定参考电压、分辨率,启动ADC读取温度数据。实验步骤在上一个实验coordinator.c代码的根底上,修改其数据处理函数GenericApp_MessageMSGCB,并注释掉对串口缓冲区的定义语句和r*CB这个函数;编写温度测量模块的两个文件,sensor.h和sensor.c,实现温度的读取;修改enddevice.c的代码,修改数据发送函数;右击工程名称,在弹出的下拉菜单中选择options,选择c/c++compiler标签,选择preprocessor标签,在definedsymbols下拉列表中输入"HAL_UART=TRUE〞;通过j-link下载串口控制程序到协调器节点底板中;将程序选择性编译,并通过ccdebug下载到协调器和终端节点中。设置串口调试助手。观察接收栏中实验结果。实验源程序#ifndefCOORDINATOR_H#defineCOORDINATOR_H#include"ZComDef.h"#defineGENERICAPP_ENDPOINT10#defineGENERICAPP_PROFID0*0F04#defineGENERICAPP_DEVICEID0*0001#defineGENERICAPP_DEVICE_VERSION0#defineGENERICAPP_FLAGS0#defineGENERICAPP_MA*_CLUSTERS1#defineGENERICAPP_CLUSTERID1e*ternvoidGenericApp_Init(bytetask_id);e*ternUINT16GenericApp_ProcessEvent(bytetask_id,UINT16events);#endif#include"OSAL.h"#include"AF.h"#include"ZDApp.h"#include"ZDObject.h"#include"ZDProfile.h"#include<string.h>#include"coend.h"#include"DebugTrace.h"#if!defined(WIN32)#include"OnBoard.h"#endif#include"hal_lcd.h"#include"hal_led.h"#include"hal_key.h"#include"hal_uart.h"constcId_tGenericApp_ClusterList[GENERICAPP_MA*_CLUSTERS]={GENERICAPP_CLUSTERID};constSimpleDescriptionFormat_tGenericApp_SimpleDesc={GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,GENERICAPP_MA*_CLUSTERS,(cId_t*)GenericApp_ClusterList,0,(cId_t*)NULL};endPointDesc_tGenericApp_epDesc;byteGenericApp_TaskID;byteGenericApp_TransID;//unsignedcharuartbuf[128];voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);voidGenericApp_SendTheMessage(void);//staticvoidr*CB(uint8port,uint8event);voidGenericApp_Init(bytetask_id){halUARTCfg_tuartConfig;GenericApp_TaskID=task_id;GenericApp_TransID=0;GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id=&GenericApp_TaskID;GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq=noLatencyReqs;afRegister(&GenericApp_epDesc);uartConfig.configured=TRUE;uartConfig.baudRate=HAL_UART_BR_115200;uartConfig.flowControl=FALSE;uartConfig.callBackFunc=NULL;HalUARTOpen(0,&uartConfig);}UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){afIncomingMSGPacket_t*MSGpkt;if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){caseAF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;default:break;}osal_msg_deallocate((uint8*)MSGpkt);MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);}return(events^SYS_EVENT_MSG);}return0;}voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){unsignedcharbuffer[2]={0*0A,0*0D};TEMPERATUREtemperature;switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(&temperature,pkt->cmd.Data,sizeof(temperature));HalUARTWrite(0,(uint8*)&temperature,sizeof(temperature));HalUARTWrite(0,buffer,2);break;}}#ifndefSENSOR_H#defineSENSOR_H#include<hal_types.h>e*ternint8readTemp(void);#endif#include<iocc2530.h>#include"sensor.h"#defineHAL_ADC_REF_115V0*00#defineHAL_ADC_DEC_2560*20#defineHAL_ADC_CHN_TEMP0*0eint8readTemp(void){staticuint16reference_voltage;staticuint8bCalibrate=TRUE;uint16value;int8temp;ATEST=0*01;TR0|=0*01;ADCIF=0;ADCCON3=(HAL_ADC_DEC_256|HAL_ADC_CHN_TEMP);while(!ADCIF);ADCIF=0;value=ADCL;value|=((uint16)ADCH)<<8;value>>=4;if(bCalibrate){reference_voltage=value;bCalibrate=FALSE;}temp=22+((value-reference_voltage)/4);returntemp;}#include"OSAL.h"#include"AF.h"#include"ZDApp.h"#include"ZDObject.h"#include"ZDProfile.h"#include<string.h>#include"coend.h"#include"DebugTrace.h"#if!defined(WIN32)#include"OnBoard.h"#endif#include"hal_lcd.h"#include"hal_led.h"#include"hal_key.h"#include"hal_uart.h"#defineSEND_DATA_EVENT0*01constcId_tGenericApp_ClusterList[GENERICAPP_MA*_CLUSTERS]={GENERICAPP_CLUSTERID};constSimpleDescriptionFormat_tGenericApp_SimpleDesc={GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,0,(cId_t*)NULL,GENERICAPP_MA*_CLUSTERS,(cId_t*)GenericApp_ClusterList};endPointDesc_tGenericApp_epDesc;byteGenericApp_TaskID;byteGenericApp_TransID;devStates_tGenericApp_NwkState;voidGenericApp_MessageMSGCE(afIncomingMSGPacket_t*pckt);voidGenericApp_SendTheMessage(void);int8readTemp(void);voidGenericApp_Init(bytetask_id){GenericApp_TaskID=task_id;GenericApp_NwkState=DEV_INIT;GenericApp_TransID=0;GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id=&GenericApp_TaskID;GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq=noLatencyReqs;afRegister(&GenericApp_epDesc);}UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){afIncomingMSGPacket_t*MSGpkt;if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){caseZDO_STATE_CHANGE:GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);if(GenericApp_NwkState==DEV_END_DEVICE){osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);//GenericApp_SendTheMessage();}break;default:break;}osal_msg_deallocate((uint8*)MSGpkt);MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);}return(events^SYS_EVENT_MSG);}if(events&SEND_DATA_EVENT){GenericApp_SendTheMessage();osal_start_timerE*(GenericApp_TaskID,SEND_DATA_EVENT,1000);return(events^SEND_DATA_EVENT);}return0;}voidGenericApp_SendTheMessage(void){//unsignedchartheMessageData[10]="ENDDEVICE";uint8tvalue;TEMPERATUREtemperature;temperature.BUF.Head='&';tvalue=readTemp();temperature.BUF.value[0]=tvalue/10+'0';temperature.BUF.value[1]=tvalue%10+'0';temperature.BUF.Tail='c';afAddrType_tmy_DstAddr;my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;my_DstAddr.endPoint=GENERICAPP_ENDPOINT;my_DstAddr.addr.shortAddr=0*0000;AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,sizeof(temperature),(uint8*)&temperature,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);}实验结果和过程截图实验小结实践源于真知,只有更好更结实掌握知识,多想多问多查,学会自己上网找资料,才能在实践中有较大的收获。实验八ZigBee组网实验实验目的熟悉如何建立星状网络拓扑构造;掌握ZigBee网络星状网络拓扑实际应用。实验内容建立星状网络拓扑构造的网络首先协调器上电后按照指定的信道和PAN_ID建立无线网络;然后各个模块作为终端设备参加这个无线网络,这样一个星状网络拓扑构造的网络就建立起来了;无线数据传输终端节点每隔1秒向协调器发送地址信息和网络信息,协调器接收到终端节点的信息后,将这些信息解析后传送给PC。相关知识点星状网络拓扑构造:星状网络是所有终端节点只能与中心协调器进展通信,节点之间的通信也只能通过协调器进展转发。所以星状网络是以协调器为中心的一种网络拓扑,其网络覆盖面积较小,所以此种网络只能用于小面积的数据采集或监控;星型星状网络中所有终端节点End-Device都以协调Coordinator作为自己的父节点,这种情况下协调器包含路由功能。如果协调器在组建网络之后出现故障不能工作,这个网络就会瘫痪;通过修改配置文件f8wConfig.cfg,更改网络的信道和PAN_ID,在同一个ZigBee网络中完成星状组网。实验步骤修改f8wConfig.cfg文件中的信道和PANID,构建自己的ZigBee网络;启动IAR,翻开ZigBee星型组网实验程序所在文件夹,翻开对应工程文件:在IAR编译软件中翻开该工程程序,翻开对应程序文件"SampleApp.c〞;首先选择其中的"CoordinatorEB-Pro〞选项,构造中心协调器。按照"实验一〞介绍的IAR软件的使用方法,连接模块到CCDebugger和计算机,连接电源,连接好后,翻开电源开关;再点击编译完本钱实验程序的编译步骤,最后点击IAR功能菜单上的绿色的下载按键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区课堂学生档案表
- 2025年交互策划笔试题及答案
- 2025年购物中心竞赛题库模板
- 2025年信号识别竞赛试题及答案
- 2025年修文考试题及答案
- 2025年巧克力形状测试题及答案
- 2025年拳击专业试题及答案大全
- 2025年中式烹调师(高级)考试题含答案
- 2024年康复医学考试试卷及答案
- 2025年麻辣变型记考试题及答案
- 个人对公司借款协议范本
- 行政执法资格证法律知识考试复习题及答案
- 广西壮族自治区2025年普通高校招生考生报名登记表(样表)
- 统编版语文三年级上册第6单元大单元教学设计
- 精神分裂症合并糖尿病患者护理查房课件
- GB/T 44230-2024政务信息系统基本要求
- 宫腔镜技术诊断子宫内膜癌的临床应用
- 电气设计笔记:电缆热稳定校验计算表
- 2024-2025学年八年级上册数学第一次月考试卷01【沪科版】
- 接受宴请违纪检讨书(合集4篇)
- 执业兽医资格考试基础科目模拟9
评论
0/150
提交评论