无线传感网络基础实验-CC2530
指导书
一、开发环境介绍
硬件设备:CC2530扩展板一块,Zigbee模块一块,编程器一个,USB线一条
CC2530引脚图
软件环境:IAR Embedded Workbench for MCS-51
二、IAR的使用
1、打开IAR:
开始->IAR Systems->IAR Embedded Workbench for MCS-51 7.51A Evaluation
下点击IAR Embedded Workbench图标打开IAR软件,如图1
图1
2、工程建立:
在菜单栏选择File->New->Workspace,完成工作区的建立。
在菜单栏选择Project->Creat New Project,建立一个新的工程,如图2所示:
图2
弹出图3建立新工程对话框,确认Tool chain 栏已经选择8051,在Project
templates栏选择Empty project 单击下方OK 按钮。
图3
根据需要选择工程保存的位置,更改工程名,如ledtest 单击Save来保存,如图4所示。这样便建立了一个空的工程。
图4
这样工程就出现在工作区窗口中了,如图5所示
图5
系统产生两个创建配置:调试和发布。在这里我们只使用Debug即调试。项目名称后的星号(*)指示修改还没有保存。选择菜单:File\\Save\\Workspace ,保存工作区文件,并指明存放路径,这里把它放到新建的工程目录下。
3、添加文件或新建程序文件
选择菜单Project\\Add File 或在工作区窗口中,在工程名上点右键,在弹出的快捷菜单,选择CC2530基础实验中对应实验中需要的文件,点击打开,如图6。
图6
打开后工程文件显示如图7:
图7
如没有建好的程序文件也可单击工具栏上的 或选择菜单File\\New\\File 新建一个空文本文件,向文件里添加程序代码。
4、工程的编译与下载
编译方式有以下几种:
A.菜单栏中快捷方式
编译:
生成可执行代码:
B.选择菜单栏中的Project->Compile,然后选择菜单栏中Project->Make; C.选择菜单栏中的Project->Rebuild All Code下载:
A.选择菜单栏中Project->Debug B.单击菜单栏图标
三、驱动安装
在第一次插上下载器时,一般会提示驱动安装失败。在设备管理器对话框中,右面图中的Chipcom SRF04EB上会打红叉。 安装驱动过程:右键点击我的电脑,选择设备管理器,右键单击打红叉的Chipcom SRF04EB项,会出现如图8所示的对话框。
图8
选择浏览计算机以查找驱动程序软件(R)项,调到下界面,如图9
图9
单击浏览,选择IAR软件安装路径中的D:\\IAR Systems\\Embedded Workbench 5.3 Evaluation version\\8051\\drivers目录。如图10
图10
驱动安装成功,如图11
图11
IAR编译器中的设置:
点击工作空间名,如右图12中的蓝色立方体
图12
然后选择菜单栏中的Project->Option,弹出图13,单击Debugger,在Setup栏的Driver下,选择驱动为Texas Instruments。其他的选择默认就可以。
图13
实验一 I/O口的控制
实验介绍:
本次实验的目的是让用户学会使用CC2530的I/O来控制外设,本例以LED灯为外设,用CC2530控制简单外设时,应将I/O设置为输出,实现LED的闪烁。LED2与LED3分别与CC2530单片机的P1.0(红灯)与P1.1(绿灯)连接。 实验设备:仿真器1块,Zigbee模块1块,USB连接线一根。 实验相关寄存器:
实验中操作了的寄存器有P1,P1DIR,没有设置而是取默认值得寄存器有:P1SEL,P1INP。
实验目的:通过延时来控制LED2与LED3交替发光。
P1DIR(P1方向寄存器) 位号 7 6 5 4 3 2 1 0 位名 DIRP1_7 DIRP1_6 DIRP1_5 DIRP1_4 DIRP1_3 DIRP1_2 DIRP1_1 DIRP1_0 复位值 0 0 0 0 0 0 0 0 操作性 度/写 度/写 度/写 度/写 度/写 度/写 度/写 度/写 功能描述 P1_7方向,0输入,1输出 P1_6方向,0输入,1输出 P1_5方向,0输入,1输出 P1_4方向,0输入,1输出 P1_3方向,0输入,1输出 P1_2方向,0输入,1输出 P1_1方向,0输入,1输出 P1_0方向,0输入,1输出
P1SEL(P1功能选择寄存器) 位号 7 6 5 4 3 2 1 0 位名 SELP1_7 SELP1_6 SELP1_5 SELP1_4 SELP1_3 SELP1_2 SELP1_1 SELP1_0 复位值 0 0 0 0 0 0 0 0 操作性 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 功能描述 P1_7功能,0普通I/O,1外设功能 P1_6功能,0普通I/O,1外设功能 P1_5功能,0普通I/O,1外设功能 P1_4功能,0普通I/O,1外设功能 P1_3功能,0普通I/O,1外设功能 P1_2功能,0普通I/O,1外设功能 P1_1功能,0普通I/O,1外设功能 P1_0功能,0普通I/O,1外设功能 P1INP(P1口输入模式寄存器) 位号 7 6 5 4 3 2 1,0 位名 MDP1_7 MDP1_6 MDP1_5 MDP1_4 MDP1_3 MDP1_2 保留 复位值 0 0 0 0 0 0 0 操作性 读/写 读/写 读/写 读/写 读/写 读/写 R0 功能描述 P1.7输入模式功能,0上下拉电阻,1三态 P1.6输入模式功能,0上下拉电阻,1三态 P1.5输入模式功能,0上下拉电阻,1三态 P1.4输入模式功能,0上下拉电阻,1三态 P1.3输入模式功能,0上下拉电阻,1三态 P1.2输入模式功能,0上下拉电阻,1三态 无用
上下拉电阻控制请查看P2INP寄存器。
实验代码:
#include #define s1 p1-2 #define s3 p1-3 int s1,s3; Void Delay(unsig 实验二 按键控制LED闪烁 实验介绍: 本次试验是通过检测按键状态来控制LED2和LED3的状态,按键S1对应CC2530的引脚P1.2,按键S3对应CC2530的引脚P1.3,LED2对应CC2530的引脚P1.0,LED3对应CC2530的引脚P1.1 。要实现按下S1,LED2闪烁。按下S3,LED3闪烁。 实验设备:仿真器一块,Zigbee模块一块,USB线一根。 实验相关寄存器: 实验中操作了的寄存器有P0,P0DIR,P0SEL,P1INP。 P0:通用IO口; P0DIR:P0口方向寄存器;(描述同P1DIR) P0SEL:P0口功能选择寄存器(通用IO、外围功能接口);(描述同P1SEL) P1INP:端口P1输入模式控制寄存器。(参见实验1说明) 实验目的: 通过扫描检测按键S1与S3按键的状态,根据按键状态控制LED2与LED3状态。当S1按下时,LED2闪烁。当S3按下时,LED3闪烁。任何一个按键只要再次按下,对应LED的状态就会发生改变。 实验三 系统睡眠状态唤醒 实验介绍: 本次实验使能外部I/O中断(按下液晶扩展板的S1或S3按键)唤醒CC2530,每次唤醒LED闪烁10次,然后进入低功耗模式,在进入PM3之前程序会将两个LED灯关闭。 实验设备:仿真器一块,Zigbee模块一块,USB线一根。 实验相关寄存器: P2INP(P2输入模式寄存器) 位号 位名 复位值 操作性 功能描述 7 PDUP2 0 读/写 P2口上下拉选择,0上拉,1下拉 6 PDUP1 0 读/写 P1口上下拉选择,0上拉,1下拉 5 4-0 PDUP0 MDP2_4 0 0 读/写 读/写 P0口上下拉选择,0上拉,1下拉 P2.4-P2.0口输入模式,0上拉,1下拉 CC2530共有四种工作模式,运行模式、待机模式、低功耗模式1、低功耗模式2、低功耗模式3。详细说明如下 实验中用到的寄存器如下: 实验目的: 熟悉CC2530电源管理模块,掌握常用的几种工作模式。 实验代码: //cd wxl2009 #include #define uint unsigned int #define uchar unsigned char #define DELAY 10000 //小灯控端口定义 #define RLED P1_0 #define YLED P1_1 void Delay(void); void Init_IO_AND_LED(void); void PowerMode(uchar sel); /**************************************************************** *函数功能:延时 *入口参数:无 *返回值 :无 *说 明 :可在宏定义中改变延时长度 ****************************************************************/ void Delay(void) { uint tt; for(tt = 0;tt ****************************************************************/ void PowerMode(uchar sel) { uchar i,j; i = sel; if(sel<4) { SLEEPCMD &= 0xfc; SLEEPCMD |= i; for(j=0;j<4;j++); PCON = 0x01;//睡眠 } else { PCON = 0x00;//唤醒 } } /**************************************************************** * 函数功能:初始化I/O,控制LED * 入口参数:无 * 返回值 :无 * 说 明 :初始化完成后关灯 ****************************************************************/ void Init_IO_AND_LED(void) { P1DIR = 0X03; RLED = 1; YLED = 1; // P0SEL &= ~0X30; //设置P0口的P1.4,P1.5为通用IO口 // P0DIR &= ~0X30; // P0INP &= ~0X30;//有上拉、下拉 P2INP &= ~0X40; //P1口选择上拉 P1IEN |= 0X0C; //允许P1.2,P1.3中断 PICTL |= 0X02; //P1口下降沿产生中断 EA = 1; //允许总中断 IEN2 |= 0X10; //P1IE = 1(P1口中断允许); P1IFG |= 0x00; //清P1口中断标志 }; /**************************************************************** * 函数功能:主函数 * 入口参数: * 返回值 :无 * 说 明 :10次绿色LED闪烁后进入睡眠状态 ****************************************************************/ void main() { uchar count = 0; Init_IO_AND_LED(); RLED = 0 ; //开红色LED,系统工作指示 Delay(); //延时 Delay(); Delay(); Delay(); while(1) { YLED = !YLED; RLED = 0; count++; if(count >= 20) { count = 0; RLED = 1; PowerMode(3); //10次闪烁后进入睡眠状态 } //Delay(); Delay(); //延时函数无形参,只能通过改变系统时钟频率 //来改变小灯的闪烁频率 }; } /***************************************** //唤醒系统 *****************************************/ #pragma vector = P1INT_VECTOR __interrupt void P1_ISR(void) { if(P1IFG>0) { P1IFG = 0; } P1IF = 0; PowerMode(7);//退出睡眠模式 } 实验四 片内温度采集 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- howto234.com 版权所有 湘ICP备2022005869号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务