Zigbee实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、Zigbee简介1.1什么是ZigBeeZigBee是基于IEEE802.15.4标准的低功耗局域网协议。ZigBee技术是一种短距离、低功耗的无线通信技术。其特点是近距离、低复杂度、自组织、低功耗、低数据速率。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。ZigBee是一种低速短距离传输的无线网络协议。1.2Zigbee协议栈ZigBee协议从下到上分别为物理层(PHY)、媒体访问控制层(MAC)、传输层(TL)、网络层(NWK)、应用层(APL)等。其中物理层和媒体访问控制层遵循IEEE802.15.4标准的规定。1.3Zigbee技术优势•数据传输速率低:10KB/秒~250KB/秒,专注于低传输应用•功耗低:在低功耗待机模式下,两节普通5号电池可使用6~24个月•成本低:ZigBee数据传输速率低,协议简单,所以大大降低了成本•网络容量大:网络可容纳65,000个设备•时延短:典型搜索设备时延为30ms,休眠激活时延为15ms,活动设备信道接入时延为15ms。•网络的自组织、自愈能力强,通信可靠•数据安全:ZigBee提供了数据完整性检查和鉴权功能,采用AES-128加密算法(美国新加密算法,是目前最好的文本加密算法之一),各个应用可灵活确定其安全属性•工作频段灵活:使用频段为2.4GHz、868MHz(欧洲)和915MHz(美国),均为免执照(免费)的频段1.4Zigbee应用条件•低功耗;•低成本;•较低的报文吞吐率;•需要支持大型网络接点的数量级;•对通信服务质量QoS要求不高(甚至无QoS);•需要可选择的安全等级(采用AES-128),•需要多方面的较复杂的网络拓扑结构应用;•要求高的网络自组织、自恢复能力。二、CC2530实验及实验修改2.1基础实验(1)实验要求:按键触发中断,DS18B20测外部温度,数据以一定格式传输到串口显示(2)程序代码:#includestdio.h#includeiocc2530.h#includeds18b20.h#defineuintunsignedint#defineucharunsignedchar#defineKEY1P0_1//定义按键为P01口控制//变量ucharKeyvalue=0;//定义变量记录按键动作uintKeyTouchtimes=0;//定义变量记录按键次数//函数声明voidDelay(uint);//延时函数声明voidInitial(void);//初始化函数声明voidInitKey(void);//初始化按键函数声明ucharKeyScan(void);//按键扫描函数声明//字符串【DS18B20采集到的温度是:XXXXXXX】chardata[23]={0x44,0x53,0x31,0x38,0x42,0x32,0x30,0xB2,0xC9,0xBC,0xAF,0xB5,0xBD,0xB5,0xC4,0xCE,0xC2,0xB6,0xC8,0xCA,0xC7,0xA3,0xBA};unsignedchartemp;//定义温度缓冲//延时voidDelay(uintn){uinti;for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);}//时钟初始化voidInitialCLK()//系统初始化{CLKCONCMD=0x80;//系统选择32M振荡器while(CLKCONSTA&0x40);//这里等待晶振稳定}//初始化按键为中断输入方式voidInitKeyINT(void){P0INP|=0x02;//上拉P0IEN|=0X02;//P01设置为中断方式PICTL|=0X01;//下降沿触发EA=1;//使能总中断IEN1|=0X20;//P0设置为中断方式;P0IFG|=0x00;//初始化中断标志位}//串口初始化设置voidUartInitial(void){PERCFG=0x00;//位置1P0口P0SEL=0x0c;//P0用作串口P2DIR&=~0xc0;//P0优先作为UART0U0CSR|=0x80;//串口设置为UART方式U0GCR|=11;U0BAUD|=216;//波特率设为115200U0CSR|=0x40;UTX0IF=0;}//串口输出字符voidUartPutChar(unsignedcharDataChar){U0DBUF=DataChar;//发送字符while(UTX0IF==0);//等待发送完成UTX0IF=0;}//串口发送字符串函数voidUartPutString(char*Data,intlen){intj;for(j=0;jlen;j++){U0DBUF=*Data++;//发送字符串while(UTX0IF==0);UTX0IF=0;}}//外部中断程序#pragmavector=P0INT_VECTOR__interruptvoidP0_ISR(void){temp=ReadDs18B20();//温度检测UartPutString(data,23);//串口输出字符串if(temp/100)//判断是否数据只有1位UartPutChar(temp/10+48);//十位UartPutChar(temp%10+48);//个位UartPutChar('\n');//换行P0IFG=0;//清中断标志P0IF=0;//清中断标志}//主函数voidmain(){InitialCLK();//初始化系统时钟UartInitial();//串口初始化InitKeyINT();//按键初始化P0SEL&=0xbf;//DS18B20的io口初始化while(1){}}(3)实验效果:按键一下,串口传出一次“DS18B20采集到的温度是:xx”显示在串口调试助手软件显示屏上2.2实验修改(1)实验要求:按键触发中断改成按键检测程序代码:#includestdio.h#includeiocc2530.h#includeds18b20.h#defineuintunsignedint#defineucharunsignedchar#defineKEY1P0_1//定义按键为P01口控制//变量ucharKeyvalue=0;//定义变量记录按键动作intKeytouchtimes=0;//定义变量记录按键次数//函数声明voidDelay(uint);//延时函数声明voidInitial(void);//初始化函数声明voidInitKey(void);//初始化按键函数声明ucharKeyScan(void);//按键扫描函数声明//字符串【DS18B20采集到的温度是:XXXXXXX】chardata[23]={0x44,0x53,0x31,0x38,0x42,0x32,0x30,0xB2,0xC9,0xBC,0xAF,0xB5,0xBD,0xB5,0xC4,0xCE,0xC2,0xB6,0xC8,0xCA,0xC7,0xA3,0xBA};unsignedchartemp;//定义温度缓冲//延时voidDelay(uintn){uinti;for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);for(i=0;in;i++);}//时钟初始化voidInitialCLK()//系统初始化{CLKCONCMD=0x80;//系统选择32M振荡器while(CLKCONSTA&0x40);//这里等待晶振稳定}//按键初始化函数voidInitKey(){P0SEL&=~0X2;//设置P04为普通IO口P0DIR&=~0X2;//按键在P04口,设置为输入模式P0INP&=~0x2;//打开P04上拉电阻,不影响}//串口初始化设置voidUartInitial(void){PERCFG=0x00;//位置1P0口P0SEL=0x0c;//P0用作串口P2DIR&=~0xc0;//P0优先作为UART0U0CSR|=0x80;//串口设置为UART方式U0GCR|=11;U0BAUD|=216;//波特率设为115200U0CSR|=0x40;UTX0IF=0;}//串口输出字符voidUartPutChar(unsignedcharDataChar){U0DBUF=DataChar;//发送字符while(UTX0IF==0);//等待发送完成UTX0IF=0;}//串口发送字符串函数voidUartPutString(char*Data,intlen){intj;for(j=0;jlen;j++){U0DBUF=*Data++;//发送字符串while(UTX0IF==0);UTX0IF=0;}}//按键检测函数ucharKeyScan(void){if(KEY1==0)//判断按键是否按下{Delayms(10);//延时很短一段时间if(KEY1==0)//再次判断按键情况{while(!KEY1);//松手检测return1;//有按键按下}}return0;//无按键按下}//主函数voidmain(){InitialCLK();//初始化系统时钟UartInitial();//串口初始化InitKeyINT();//按键初始化P0SEL&=0xbf;//DS18B20的io口初始化while(1){Keyvalue=KeyScan();//读取按键动作if(Keyvalue==1){temp=ReadDs18B20();//温度检测UartPutString(data,23);//串口输出字符串if(temp/100)//判断是否数据只有1位UartPutChar(temp/10+48);//十位UartPutChar(temp%10+48);//个位UartPutChar('\n');//换行}Delay(100);//延时}}实验效果:按键一下,串口传出一次“DS18B20采集到的温度是:xx”显示在串口调试助手软件显示屏上(2)实验要求:去掉松手检测,观察效果程序代码:#includestdio.h#includeiocc2530.h#includeds18b20.h#defineuintunsignedint#defineucharunsignedchar#defineKEY1P0_1//定义按键为P01口控制//变量ucharKeyvalue=0;//定义变量记录按键动作intKeytouchtimes=0;//定义变量记录按键次数//函数声明voidDelay(uint);//延时函数声明voidInitial(void);//初始化函数声明voidInitKey(void);//初始化按键函数声明ucharKeyScan(void);//按键扫描函数声明//字符串【DS18B20采集到的温度是:XXXXXXX】chardata[23]={0x44,0x53,0x31,0x38,0x42,0x32,0x30,0xB2,0xC9,0xBC,0xAF,0xB5,0xBD,0xB5,0xC4,0xCE,0xC2,0xB6,0xC8,0xCA,0xC7,0xA3,0xBA};unsi

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功