概述
一、实验目的与要求
1、通过本实验对编译环境和程序架构有一定的认识
2、学习基于ZStack控制LED的操作;
3、学习OSAL系统API接口函数使用;
二、实验原理与内容
1、LED电路图
2、基本控制原理
通过输出高低电平来驱动灯。
CC2530 的 IO 口配置我们需要配置三个寄存器 P1SEL 、P1DIR 、P1INP。IO口功能如下表所示:
- P1SEL (0:普通 IO 口 1:第二功能)
- P1DIR (0:输入 1:输出)
- P1INP (0:上拉/下拉 1:三态)
按照表格寄存器内容,我们对 LED1,也就是 P1_0口进行配置,当 P1_0输出高电平时 LED1被点亮。
3、实验内容:
3.1安装IAR集成开发环境。
3.2 安装TI协议栈 Zstack。
3.3 基于ZStack的LED控制,实现亮与灭,并实现灯的连续闪烁的效果。
三、实验设备与软件环境
1、硬件:实验箱1台,CC Debugger仿真器一套
2、软件:IAR Embedded WorkBench 8.10,ZStack协议栈:ZStack-CC2530-2.5.1a
四、实验过程与结果
- 安装IAR8.10集成开发环境
安装IAR 8.1过程截图
IAR 8.1的界面
设置工程属性
- 安装TI 协议栈 Zstack-CC2530-2.5.1a
3.编写实验源代码文件
(1)打开IAR 8.1,点击Project->Create New Project新建一个工程;
(2)设置工程属性
(3)新建文件,编写代码,并把文件添加到工程里面(详细代码见附录)
(4)编译调试,点“Make”
(5)连接仿真器到目标板,并且给目标板上电
(6)把代码下载到目标板上
(7)观察实验现象:LED灯连续闪烁
效果图一
效果图二
(8)实验结果现象视频
五、操作异常问题与解决方案
异常问题:Download and Debug过程中有问题,无法将代码下载到目标板。
解决方案:没有安装SmattRF04EB驱动,首先打开设备管理器,然后找到SmattRF04EB驱动,点击更新找到IAR 8.1的安装路径即可。
六、实验总结
在本次实验中,我成功安装了安装IAR集成开发环境和安装TI协议栈 Zstack。通过在IAR 8.1中编写代码,基于ZStack的LED控制,实现了LED的亮与灭,并实现灯的连续闪烁的效果。通过本实验,使我对编译环境和程序架构有了一定的认识,同时也掌握了基于ZStack控制LED的操作和OSAL系统API接口函数使用。
七、附录
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
//定义控制LED灯的端口
#define LED1 P1_0 //定义LED1为P10口控制
//函数声明
void Delayms(uint xms); //延时函数
void InitLed(void); //初始化P1口
void InitT3(); //初始化定时器T3
uint count;//用于定时器计数
/****************************
//延时函数
*/
void Delayms(uint xms) //i=xms 即延时i毫秒
{
uint i,j;
for(i=xms;i>0;i–)
for(j=587;j>0;j–);
}
/
//初始化程序
*****************************/
void InitLed(void)
{
P1DIR |= 0x01; //P1_0义为输出
P1INP |= 0X01; //打开下拉
LED1 = 0; //LED1灯熄灭
}
//定时器初始化
void InitT3()
{
T3CTL |= 0x08 ; //开溢出中断
T3IE = 1; //开总中断和T3中断
T3CTL|=0XE0; //128分频,128/16000000*N=0.5S,N=65200
T3CTL &= ~0X03; //自动重装 00->0xff 65200/256=254(次)
T3CTL |=0X10; //启动
EA = 1;
}
/***************************
//主函数
***************************/
void main(void)
{
InitLed(); //调用初始化函数
InitT3();
while(1);
}
#pragma vector = T3_VECTOR //定时器T3
__interrupt void T3_ISR(void)
{
IRCON = 0x00; //清中断标志, 也可由硬件自动完成
if(++count>254) //254次中断后LED取反,闪烁一轮(约为0.5 秒时间)
{
count = 0; // 计数清零
LED1=~LED1;
}
}
最后
以上就是忐忑人生为你收集整理的ZigBee基础控制实验的全部内容,希望文章能够帮你解决ZigBee基础控制实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复