无线传感器网络实验报告模板

  • 格式:docx
  • 大小:35.71 KB
  • 文档页数:37

无线传感器网络实验报告专业计算机科学与技术班级 13级计科1班学号姓名目录实验一CC2530 I/O基础实验实验二 CC2530按键中断实验三 CC2530定时器的使用实验四串行通信接口发送与接收实验五 Zigbee点到点无线通信实验六 Zigbee串口实验实验七无线温度检测实验实验八 Zigbee组网实验实验一CC2530 I/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:端口0 P1:端口1 P2:端口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:观察输出控制寄存器0 OBSSEL1:观察输出控制寄存器1 OBSSEL2:观察输出控制寄存器2 OBSSEL3:观察输出控制寄存器3 OBSSEL4:观察输出控制寄存器4 OBSSEL5:观察输出控制寄存器5四、实验步骤1.启动IAR;2.新建一个IAR工作区,或者打开一个IAR工作区;3.连接CC Debugger调试器和ZigBee模块、连接CC Debugger到计算机,安装驱动;4.设置项目参数;5.编写、编译、下载程序。

五、实验源程序//*******************************//I/O口轮流控制2个LED循环点亮//*******************************#include <ioCC2530.h>#define uint unsigned int#define uchar unsigned char//定义控制灯的端口#define RLED P1_0 //定义LED1为P10口控制#define YLED P1_1 //定义LED2为P11口控制#define K1 P2_0//函数声明void Delay(uint); //延时函数void InitialLed(void); //初始化P1口void InitialKey(void);/****************************//延时*****************************/void Delay(uint n){uint 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++);for(tt = 0;tt<n;tt++);}/****************************//初始化程序*****************************/void InitialLed(void){P1DIR |= 0x03; //P10、P11定义为输出RLED = 1;YLED = 1; //LED}void InitialKey(void){P2SEL&=~0X01;P2DIR &=~0X01;P2INP |= 0X00;}/***************************//主函数***************************/void main(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);}}}}六、实验结果和过程截图七、实验小结2530通用IO使用需要配置相关寄存器;2530通用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.中断使能的步骤:总中断使能;端口中断使能;位中断使能;触发沿设置。

中断处理程序格式:#pragama vector=中断向量——interrupt void 任意函数名{//中断处理,处理完成后通常需要清除中断;}四、实验步骤1.启动IAR;2.新建一个IAR工作区,或者打开一个IAR工作区,新建project;3.根据预备知识编写程序,编译程序;4.设置项目参数;5.连接CC Debugger调试器和ZigBee模块,下载程序,测试其运行效果;6.分析总结代码。

五、实验源程序//头文件的包含和宏定义#include <ioCC2530.h>#define uint unsigned int#define uchar unsigned char//定义控制灯的端口#define RLED P1_0 //定义LED1为P10口控制#define YLED P1_1 //定义LED2为P11口控制#define KEY1 P2_0 //定义按键为P20口控制//函数声明void Delay(uint); //延时函数声明void InitialLed(void); //初始化函数声明void InitKey(void); //初始化按键函数声明/****************************//延时*****************************/void Delay(uint n){uint 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++);for(i = 0;i<n;i++);}/****************************//初始化按键,并设置其为中断输入方式*****************************/void InitKeyINT(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灯初始化为灭*****************************/void InitialLed(void){P1SEL &= ~0X03;P1DIR |= 0x03; //P10、P11定义为输出RLED = 1;YLED = 0;}/****************************//中断处理函数*****************************/#pragma vector = P2INT_VECTOR__interrupt void P2_ISR(void){if(P2IFG>0) //按键中断{RLED =!RLED;YLED =!YLED;P2IFG = 0;Delay(100);P2IF = 0; //清中断标志}}/***************************//主函数***************************/void main(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时,对应的中断使能位中断使能,则根据中断类型号获得中断向量,根据中断向量得到中断服务子程序的地址,执行终端服务子程序。