CC2530其实可以理解成一款单片机+无线模块
学习之前希望大家先去了解51单片机和加深一下C语言,这对学习这款芯片是很有帮助的,本教程是基于有一点模拟电路基础和C语言基础的玩家,不时也会推出一些基础的干货,大神登门请多多指教,当然大家如果有什么疑问的话可以私下联系虎牙小哥。
下面我们先复习一下单片机吧;
第一个学习教程:I/O端口
·学习之前我们先看看芯片手册,打开我们的芯片手册(中英文资料在我的论坛帖子里面可以下载,我用的是中文版的,毕竟英语水平一般般),大家可以先浏览一下,有个认知;
·玩转IO一般只用到三个常用的寄存器就好(看我们的芯片手册IO栏目里面有详细介绍)
*P0SEL/P1SEL(0:普通IO 口 1:第二功能)
*P0DIR/P1DIR(0:输入 1:输出 )
*P0INP/P1INP(0:上拉/下拉 1:三态 )
一般初始化流程:普通IO--->设置输入输出--->配置上拉/下拉/三态
例如:
P1SEL &= 0X01; //功能选择---通用IO
P1DIR |= 0X01; //方向设定---输出
P1INP &= ~0X01; //输入模式选择---打开上拉/下拉
P0SEL &= 0X30; //功能选择---通用IO
P0DIR &= ~0X30; //方向设定---输入
P0INP &= ~0X30; //输入模式选择---打开上拉/下拉
由于 CC2530 寄存器初始化时默认是:
P1SEL =0x00;
P1DIR =0x00;
P1INP =0X00;
所以我们可以简化我们的初始化指令:
P1DIR |= 0X01; //方向设定---输出
P0DIR &= ~0X30; //方向设定---输入
大家都有点意思了吧,下面我们来实战一下;学习之前先配置好开发环境,第一步安装IAR此处省略,大家可以看到IAR的初始界面(下图),点击project--->Create New Project
弹出如下的界面,我们选择默认的配置就可以了,点击OK。然后选择储存路径。
下面配置我们的开发环境,点击project--->Options(快捷键alt+F7),看到如下界面:
第一步:Greneral Options---Target
Device;选择我们的芯片型号---点击右边的超链接
打开文件夹Texas Instruments选择CC2530F256.i51,按下图设置
第二步:Linker---Config---Linker configuration file---Override default
打开文件夹Texas Instruments选择lnk51ew_CC2530F256.xcl,按下图设置
第三步:Debugger---SETUP---Driver,选择Texas Instruments
配置完成,点击OK;
学过51单片机的同学是不是觉得很熟悉,步骤还是差不多,先新建一个文件,保存为.c文件,在右击Files下的工程(就是IO-Debug)---Add---Add“IO.c”
下面开始码程序吧,先回想一下前面看的芯片手册,看下面代码:
#include<ioCC2530.h> //添加我们芯片的头文件
#define led P1_0 //先宏定义下我们的IO,方便下面写代码
#define key_1 P0_4 //*宏定义#define A常量B
#define key_2 P0_5 //*字面意思就是用A标识常量B
/***函数声明,main函数在前面,我们必须在主函数前加入函数声明,不然调用会编译出错***/
void Led_init(void); //LED初始化函数
void Key_init(void); //按键初始化函数
void Delayms(unsigned int xms); //毫秒延时函数
void main(void) //main函数
{
Led_init(); //初始化LED
Key_init(); //初始化按键
while(1) //while(1)循环(在没有跳出语句的情况下,无限循环)
{
if(!key_1) //判断key_1有没有按下
{
Delayms(20); //消抖
if(!key_1) //确定key_1有没有按下
led = 0; //led点亮,P1_0置0
}
if(!key_2) //判断key_2有没有按下
{
Delayms(20); //消抖
if(!key_2) //确定key_2有没有按下
led = 1; //led灭,P1_0置1
}
}
}
/***********
LED初始化函数:初始化LED
无返回值
*/
void Led_init(void)
{
P1SEL &= 0X01; //功能选择---通用IO
P1DIR |= 0X01; //方向设定---输出
P1INP &= ~0X01; //输入模式选择---打开上拉/下拉
}
/***********
按键初始化函数:初始化按键
无返回值
*/
void Key_init(void)
{
P0SEL &= 0X30; //功能选择---通用IO
P0DIR &= ~0X30; //方向设定---输入
P0INP &= ~0X30; //输入模式选择---打开上拉/下拉
}
/***********
延时函数:延时xms
x:unsigned int类型
无返回值
*/
void Delayms(unsigned int x)
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=587;j>0;j--);
}
这段代码还是挺容易啃的,大家肯得下吗?有疑问的可以联系虎牙小哥哦;
下面我们编译看看代码有没有错吧,第一次Compile的时候需要保存工作空间:
再点一次,没有错误也没有警告;
下面进入我们的仿真吧,我用的是网蜂科技的zigbee开发板,看图
连接我们的仿真器,马上开始实战吧。
点击Download and Debug,下载程序并仿真
进入仿真页面
效果(按下KEY_1,LED亮,按下KEY_2,LED灭)
我们看回代码吧,通过这次实验,大家基本上都会配置IO了吧,大家可以脑洞大开,按照技术手册去的更改两个init函数,然后玩出想要的效果,本次讲解就到这里了,后面会慢慢更新一些实验,让大家更好的体会!