ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:54.63KB ,
资源ID:10596721      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10596721.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于ZigBee的数据采集与无线传输实验.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于ZigBee的数据采集与无线传输实验.docx

1、基于ZigBee的数据采集与无线传输实验2016-2017学年第二学期课程实验报告课程名称:无线传感网络实验名称: 基于ZigBee的数据采集与无线传输实验XX班级学号同组同学实验课表现出勤、表现得分25%25实验报告得分50%实验总分操作结果得分25%25实验目的了解ZigBee的工作原理和技术特点,利用CC2530芯片开发一个简单的ZigBee组网通信实验。实验内容以小组为单位,利用CC2530芯片部署无线传感网络实验,分别设计采集节点、汇聚节点的程序,采集节点采集温度信息,并通过无线信道传输给汇聚节点。汇聚节点再将温度数据通过串口传输给上位机(PC机)。要求自己设计通信协议,实现上位机对

2、监控区域的定时和实时温度数据采集。实验过程中遇到的问题以与如何解决的?(可以写多条,是否认真填写将影响实验成绩)在实验过程中我遇到了1、能接收后遇到很多的噪声干扰并且不能接收自己发送的信息2、接收到自己的信息后仍然有很多的噪声干扰出现了很多的乱码3、接收自己的信息也被转换成乱码4、遇到了选择性接收上的技术问题5、温度的acsii码转换错误通过.的方式,我解决了这个问题。1、修改了接收代码并确认发送代码没毛病2、尝试修改信道3、检查到接收子程序有问题并修改了4、老师建议我们使用选择性接收5、通过组员合作研究讨论并上网查找解决没有问题的情况下,是否有创新思路(或多做哪些工作)。好像并没有实验代码如

3、下:发送代码:/* 文 件 名: main.c* 作 者: Andy* 修 订: 2013-01-08* 版 本: 1.0* 描 述: 设置串口调试助手波特率:115200bps 8N1* 串口调试助手给CC2530发字符串时,开发板会返回接收到的字符串*/#include #include #include #include /#define DISABLE_ALL_INTERRUPTS() (IEN0 = IEN1 = IEN2 = 0x00)/三个char rf_rx_buf128;void rf_send( char *pbuf , int len);void rf_receive_i

4、sr();typedef unsigned char uchar;typedef unsigned int uint;#define UART0_RX 1#define UART0_TX 2#define SIZE 51char RxBuf;char UartState;uchar count;char RxDataSIZE; /存储发送字符串void InitClock(void) CLKCONCMD &= 0x40; /设置系统时钟源为 32MHZ晶振 while(CLKCONSTA & 0x40); /等待晶振稳定 CLKCONCMD &= 0x47; /设置系统主时钟频率为 32MHZ

5、/* 名 称: InitSensor()* 功 能: 温度传感器初始化函数* 入口参数: 无* 出口参数: 无*/void InitSensor(void) /DISABLE_ALL_INTERRUPTS(); /关闭所有中断 InitClock(); /设置系统主时钟为 32M TR0=0x01; /设置为1来连接温度传感器到SOC_ADC ATEST=0x01; /使能温度传感 /* 名 称: GetTemperature()* 功 能: 获取温度传感器 AD 值* 入口参数: 无* 出口参数: 通过计算返回实际的温度值*/float GetTemperature(void) uint v

6、alue; ADCCON3 = (0x3E); /选择1.25V为参考电压;14位分辨率;对片内温度传感器采样 ADCCON1 |= 0x30; /选择ADC的启动模式为手动 ADCCON1 |= 0x40; /启动AD转化 while(!(ADCCON1 & 0x80); /等待 AD 转换完成 value = ADCL 4; /ADCL 寄存器低 2 位无效 value |= (uint)ADCH) 4); return (value-1367.5)/4.5-5; /根据 AD 值,计算出实际的温度,芯片手册有错,温度系数应该是4.5 / /进行温度校正,这里减去5(不同芯片根据具体情况校

7、正)/* 名 称: DelayMS()* 功 能: 以毫秒为单位延时* 入口参数: msec 延时参数,值越大,延时越久* 出口参数: 无*/void DelayMS(uint msec) uint i,j; for (i=0; imsec; i+) for (j=0; j1070; j+);/* 名 称: InitUart()* 功 能: 串口初始化函数* 入口参数: 无* 出口参数: 无*/void InitUart(void) PERCFG = 0x00; /外设控制寄存器 USART 0的IO位置:0为P0口位置1 P0SEL = 0x0c; /P0_2,P0_3用作串口(外设功能)

8、P2DIR &= 0xC0; /P0优先作为UART0 U0CSR |= 0x80; /设置为UART方式 U0GCR |= 11; U0BAUD |= 216; /波特率设为115200 UTX0IF = 0; /UART0 TX中断标志初始置位0 U0CSR |= 0x40; /允许接收 IEN0 |= 0x84; /开总中断允许接收中断 /* 名 称: UartSendString()* 功 能: 串口发送函数* 入口参数: Data:发送缓冲区 len:发送长度* 出口参数: 无*/void UartSendString(char *Data, int len) uint i; for

9、(i=0; ilen; i+) U0DBUF = *Data+; while(UTX0IF = 0); UTX0IF = 0; /以下是RF初始化和发送与接收void rf_init() TXPOWER = 0xD5; / 发射功率为1dBm /FRMCTRL0 |= (0x20 | 0x40); /* AUTO_ACK | AUTO_CRC */ CCACTRL0 = 0xF8; / 推荐值 smartRF软件生成 FRMFILT0 = 0x0c; / 静止接收过滤,即接收所有数据包 FSCAL1 = 0x00; / 推荐值 smartRF软件生成 TXFILTCFG = 0x09; AGC

10、CTRL1 = 0x15; /AGCCTRL2 = 0xFE; /TXFILTCFG = 0x09; / 推荐值 smartRF软件生成 FREQCTRL = 0x09; / 选择通道11 RFIRQM0 |= (16); / 使能RF数据包接收中断 IEN2 |= (10); / 使能RF中断 RFST = 0xED; / 清除RF接收缓冲区 ISFLUSHRX RFST = 0xE3; / RF接收使能 ISRXON void rf_send( char *pbuf , int len) RFST = 0xE3; / RF接收使能 ISRXON while( FSMSTAT1 & ( 11

11、 ) | ( 15 );/ 等待发送状态不活跃 并且 没有接收到SFD RFIRQM0 &= (16); / 禁止接收数据包中断 IEN2 &= (10); / 清除RF全局中断 RFST = 0xEE; / 清除发送缓冲区 ISFLUSHTX RFIRQF1 = (11); / 清除发送完成标志 / 填充缓冲区 填充过程需要增加2字节,CRC校验自动填充 RFD = len + 2; for (int i = 0; i len; i+) RFD = *pbuf+; RFST = 0xE9; / 发送数据包 ISTXON while (!(RFIRQF1 &(11) ); / 等待发送完成 P

12、0_0 = P0_0; RFIRQF1 = (11); / 清除发送完成标志位 RFIRQM0 |= (16); / RX接收中断 IEN2 |= (10);/* 程序入口函数*/void main(void) /char i; / float AvgTemp; /char strTemp6; CLKCONCMD &= 0x40; /设置系统时钟源为32MHZ晶振 while(CLKCONSTA & 0x40); /等待晶振稳定为32M CLKCONCMD &= 0x47; /设置系统主时钟频率为32MHZ InitUart(); /调用串口初始化函数 UartState = UART0_RX

13、; /串口0默认处于接收模式 memset(RxData, 0, SIZE); InitSensor(); rf_init(); float x = GetTemperature(); char a10; sprintf(a, %g, x); char b15=A C1:; strcat(b,a); while(1) rf_send(b,20); DelayMS(20); /* if(UartState = UART0_TX) /发送状态 U0CSR &= 0x40; /禁止接收 AvgTemp = 0; for (i=0; i64; i+) AvgTemp += GetTemperature

14、(); AvgTemp = AvgTemp/2; /每次累加后除 2 memset(strTemp, 0, 6); sprintf(strTemp,%.02fn, AvgTemp);/将浮点数转成字符串 UartSendString(strTemp, 6); rf_send(strTemp , 5); DelayMS(1000); /延时 / UartSendString(RxData, count); /发送已记录的字符串。 U0CSR |= 0x40; /允许接收 UartState = UART0_RX; /恢复到接收状态 count = 0; /计数清0 memset(RxData,

15、0, SIZE); /清空接收缓冲区 */ 接收代码:/* * 文件名称:UART(Receive INT)_Ex.c * 功 能:CC253x系列片上系统基础实验- UART(接收数据 中断方式) * 描 述:本实验使用CC253x系列片上系统的片内USART控制器,工作在UART模式下,通 * 过UART0接收数据,采用中断方式。 * 实验硬件: * 用USB电缆连接SK-SmartRF05EB上的USB接口与用户PC的USB接口。 * * 作 者:POWER * 日 期:2010-04-18 */* 包含头文件 */*/#include ioCC2530.h / CC2530的头文件,包

16、含对CC2530的寄存器、中断向量等的定义#include LCD.h / lcd驱动头文件#include stdio.h / C语言标准输入/输出库头文件/*/* 定义枚举类型 */*/enum SYSCLK_SRCXOSC_32MHz,RC_16MHz; / 定义系统时钟源(主时钟源)枚举类型/*/* * 函数名称:SystemClockSourceSelect * 功 能:选择系统时钟源(主时钟源) * 入口参数:source * XOSC_32MHz 32MHz晶体振荡器 * RC_16MHz 16MHz RC振荡器 * 出口参数:无 * 返 回 值:无 */void SystemC

17、lockSourceSelect(enum SYSCLK_SRC source) unsigned char osc32k_bm = CLKCONCMD & 0x80; unsigned char _clkconcmd,_clkconsta; /* 系统时钟源(主时钟源)选择16MHz RC振荡器,定时器tick设置为16MHz,时钟速度设置为16MHz CLKCONCMD.OSC32Kb7不改变 32KHz时钟源选择保持先前设置 CLKCONCMD.OSCb6 = 1 系统时钟源(主时钟源)选择16MHz RC振荡器 CLKCONCMD.TICKSPDb5.b3 = 001 定时器tick设

18、置为16MHz CLKCONCMD.CLKSPDb2.b0 = 001 时钟速度设置为16MHz */ if(source = RC_16MHz) /* CLKCONCMD.OSC32Kb7 */ CLKCONCMD = (osc32k_bm) | /* CLKCONCMD.OSCb6 = 1 */ (0x01 6) | /* CLKCONCMD.TICKSPDb5.b3 = 001 */ (0x01 3) | /* CLKCONCMD.CLKSPDb2.b0 = 001 */ (0x01 0); /* 系统时钟源(主时钟源)选择32MHz晶体振荡器,定时器tick设置为32MHz,时钟速度设

19、置为32MHz CLKCONCMD.OSC32Kb7不改变 32KHz时钟源选择保持先前设置 CLKCONCMD.OSCb6 = 0 系统时钟源(主时钟源)选择32MHz晶体振荡器 CLKCONCMD.TICKSPDb5.b3 = 000 定时器tick设置为32MHz CLKCONCMD.CLKSPDb2.b0 = 000 时钟速度设置为32MHz */ else if(source = XOSC_32MHz) CLKCONCMD = (osc32k_bm /*| (0x006) | (0x003) | (0x00 0)*/); /* 等待所选择的系统时钟源(主时钟源)稳定 */ _clkc

20、oncmd = CLKCONCMD; / 读取时钟控制寄存器CLKCONCMD do _clkconsta = CLKCONSTA; / 读取时钟状态寄存器CLKCONSTA while(_clkconsta != _clkconcmd); / 直到CLKCONSTA寄存器的值与CLKCONCMD寄存 / 器的值一致,说明所选择的系统时钟源(主 / 时钟源)已经稳定 /* * 函数名称:InitUART0 * 功 能:UART0初始化 * P0.2 RX * P0.3 TX * 波特率:57600 * 数据位:8 * 停止位:1 * 奇偶校验:无 * 入口参数:无 * 出口参数:无 * 返 回

21、 值:无 */void InitUART0(void) /* 片内外设引脚位置采用上电复位默认值,即PERCFG寄存器采用默认值 */ /* P0.2 RX P0.3 TX P0.4 CT P0.5 RT */ /* UART0相关引脚初始化 */ P0SEL |= (0x01 2) | (0x01 3); / P0.2和P0.3作为片内外设I/O /* P0口外设优先级采用上电复位默认值,即P2DIR寄存器采用默认值 */ /* 第一优先级:USART0 第二优先级:USART1 第三优先级:Timer1 */ /* UART0波特率设置 */ /* 波特率:57600 当使用32MHz 晶

22、体振荡器作为系统时钟时,要获得57600波特率需要如下设置: UxBAUD.BAUD_M = 216 UxGCR.BAUD_E = 10 该设置误差为0.03% */ U0BAUD = 216; U0GCR = 10; /* USART模式选择 */ U0CSR |= 0x80; / UART模式 /* UART0配置 */ U0UCR |= 0x80; / 进行USART清除 /* 以下配置参数采用上电复位默认值: 硬件流控:无 奇偶校验位(第9位):奇校验 第9位数据使能:否 奇偶校验使能:否 停止位:1个 停止位电平:高电平 起始位电平:低电平 */ /* 用於发送的位顺序采用上电复位默认值,即U0GCR寄存器采用上电复位默认值 */ /* LSB先发送 */ URX0IF = 0; / 清零UART0 RX中断标志 U0CSR |= (0x01 6); / 使能接收器 URX0IE = 1; / 使能UART0 RX中断char rf_rx_buf16;char pbuf16;/* * 函数名称:UART0SendByte * 功 能:UART0发送一个字节 * 入口参数:c * 出口参数:无 * 返 回 值:无 */void UA

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2