Zigbee实验报告

更新时间:2023-10-05 19:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、Zigbee简介

1.1 什么是ZigBee

ZigBee是基于IEEE802.15.4标准的低功耗局域网协议。ZigBee技术是一种短距离、低功耗的无线通信技术。其特点是近距离、低复杂度、自组织、低功耗、低数据速率。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。ZigBee是一种低速短距离传输的无线网络协议。

1.2 Zigbee协议栈

ZigBee协议从下到上分别为物理层(PHY)、媒体访问控制层(MAC)、传输层(TL)、网络层(NWK)、应用层(APL)等。其中物理层和媒体访问控制层遵循IEEE 802.15.4标准的规定。

1.3 Zigbee技术优势

? 数据传输速率低:10KB/秒~250KB /秒,专注于低传输应用

? 功耗低:在低功耗待机模式下,两节普通5号电池可使用6~24个月 ? 成本低:ZigBee数据传输速率低,协议简单,所以大大降低了成本 ? 网络容量大:网络可容纳65,000个设备

? 时延短:典型搜索设备时延为30ms,休眠激活时延为15ms,活动设备信道接入时延为15ms。

? 网络的自组织、自愈能力强,通信可靠

? 数据安全: ZigBee提供了数据完整性检查和鉴权功能,采用AES-128加密

算法(美国新加密算法,是目前最好的文本加密算法之一),各个应用可灵活确定其安全属性

? 工作频段灵活:使用频段为2.4GHz、868MHz(欧洲)和915MHz(美国),均为免执照(免费)的频段

1.4 Zigbee应用条件

?低功耗; ?低成本;

?较低的报文吞吐率;

?需要支持大型网络接点的数量级;

?对通信服务质量QoS要求不高(甚至无QoS); ?需要可选择的安全等级(采用AES-128), ?需要多方面的较复杂的网络拓扑结构应用; ?要求高的网络自组织、自恢复能力。

二、CC2530实验及实验修改

2.1 基础实验

(1)实验要求:按键触发中断,DS18B20测外部温度,数据以一定格式传输到串口显示 (2)程序代码: #include #include\

#include\

#define uint unsigned int #define uchar unsigned char

#define KEY1 P0_1 //定义按键为P01口控制 //变量

uchar Keyvalue=0; //定义变量记录按键动作 uint KeyTouchtimes=0; //定义变量记录按键次数 //函数声明

void Delay(uint); //延时函数声明 void Initial(void); //初始化函数声明

void InitKey(void); //初始化按键函数声明 uchar KeyScan(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}; unsigned char temp; //定义温度缓冲 //延时

void Delay(uint n) {

uint i;

for(i=0;i

//时钟初始化

void InitialCLK() //系统初始化 {

CLKCONCMD = 0x80; //系统选择32M振荡器 while(CLKCONSTA&0x40); //这里等待晶振稳定 }

//初始化按键为中断输入方式 void InitKeyINT(void) {

P0INP |= 0x02; //上拉

P0IEN |= 0X02; //P01设置为中断方式

PICTL |= 0X01; //下降沿触发 EA = 1; //使能总中断

IEN1 |= 0X20; // P0设置为中断方式; P0IFG |= 0x00; //初始化中断标志位 }

//串口初始化设置 void UartInitial(void) {

PERCFG = 0x00; //位置1 P0口 P0SEL = 0x0c; //P0用作串口

P2DIR &= ~0xc0; //P0优先作为UART0 U0CSR |= 0x80; //串口设置为UART方式 U0GCR |= 11;

U0BAUD |= 216; //波特率设为115200 U0CSR |= 0x40; UTX0IF = 0; }

//串口输出字符

void UartPutChar(unsigned char DataChar) {

U0DBUF = DataChar; //发送字符 while(UTX0IF == 0); //等待发送完成 UTX0IF = 0; }

//串口发送字符串函数

void UartPutString(char *Data,int len) {

int j;

for(j=0;j

U0DBUF = *Data++;//发送字符串 while(UTX0IF == 0); UTX0IF = 0; } }

//外部中断程序

#pragma vector = P0INT_VECTOR __interrupt void P0_ISR(void) { temp=ReadDs18B20(); //温度检测 UartPutString(data,23); //串口输出字符串

if(temp/10>0) //判断是否数据只有1位 UartPutChar(temp/10+48); //十位

UartPutChar(temp+48); //个位 UartPutChar('\\n'); //换行

P0IFG = 0; //清中断标志 P0IF = 0; //清中断标志 } //主函数 void main() {

InitialCLK(); //初始化系统 时钟 UartInitial(); //串口初始化 InitKeyINT(); //按键初始化

P0SEL &= 0xbf; //DS18B20的io口初始化 while(1) { } }

(3) 实验效果:按键一下,串口传出一次“DS18B20采集到的温度是:xx”显示在串口调试助手软件显示屏上

2.2 实验修改

(1)实验要求:按键触发中断改成按键检测 程序代码: #include #include\ #include\

#define uint unsigned int #define uchar unsigned char

#define KEY1 P0_1 //定义按键为P01口控制 //变量

uchar Keyvalue=0; //定义变量记录按键动作 int Keytouchtimes=0;//定义变量记录按键次数 //函数声明

void Delay(uint); //延时函数声明 void Initial(void); //初始化函数声明

void InitKey(void); //初始化按键函数声明 uchar KeyScan(void); //按键扫描函数声明 //字符串【DS18B20采集到的温度是:XXXXXXX】 char

data[23]={0x44,0x53,0x31,0x38,0x42,0x32,0x30,0xB2,0xC9,0xBC,0xAF,0xB5,0xBD,0xB5,0xC4,0xCE,0xC2,0xB6,0xC8,0xCA,0xC7,0xA3,0xBA}; unsigned char temp; //定义温度缓冲 //延时

void Delay(uint n) {

uint i;

for(i=0;i

//时钟初始化

void InitialCLK() //系统初始化 {

CLKCONCMD = 0x80; //系统选择32M振荡器 while(CLKCONSTA&0x40); //这里等待晶振稳定 }

//按键初始化函数 void InitKey() {

P0SEL &= ~0X2; //设置P04为普通IO口

P0DIR &= ~0X2; //按键在P04 口,设置为输入模式 P0INP &= ~0x2; //打开P04上拉电阻,不影响 }

//串口初始化设置 void UartInitial(void) {

PERCFG = 0x00; //位置1 P0口 P0SEL = 0x0c; //P0用作串口

P2DIR &= ~0xc0; //P0优先作为UART0 U0CSR |= 0x80; //串口设置为UART方式 U0GCR |= 11;

U0BAUD |= 216; //波特率设为115200 U0CSR |= 0x40; UTX0IF = 0; }

//串口输出字符

void UartPutChar(unsigned char DataChar) {

U0DBUF = DataChar; //发送字符 while(UTX0IF == 0); //等待发送完成

本文来源:https://www.bwwdw.com/article/6npd.html

Top