启航CC2530

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) //while1)循环(在没有跳出语句的情况下,无限循环)

  {

    if(!key_1) //判断key_1有没有按下

    {

      Delayms(20); //消抖

      if(!key_1) //确定key_1有没有按下

      led = 0; //led点亮,P1_00

    }

    if(!key_2) //判断key_2有没有按下

    {

      Delayms(20); //消抖

      if(!key_2) //确定key_2有没有按下

      led = 1; //led灭,P1_01

    }

  }

  

}

 

/***********

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

xunsigned 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函数,然后玩出想要的效果,本次讲解就到这里了,后面会慢慢更新一些实验,让大家更好的体会!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值