嵌入式cc2530单片机ZigBee-流水灯的实验

本文详细介绍了如何使用CC2530单片机配合IAREmbeddedWorkbench和SmartRFFlashProgrammer软件,通过编程控制LED1和LED2实现流水灯效果。讲解了CC2530的I/O引脚特性,包括通用I/O、外部设备I/O、输入模式和外部中断能力,并提供了相应的寄存器配置和代码示例。最后,给出了程序流程和具体实现代码。
摘要由CSDN通过智能技术生成

嵌入式cc2530单片机ZigBee

单片机是一种集成电路芯片,包含中央处理器CPU、随机存储器RAM、只读存储器ROM、输入输出I/O接口、中断控制系统、定时/计数器和通信等多种功能部件

其针脚定义如下:

1.0 --P0、P1各8个针脚(1字节=8位,针脚/位。一般16进制定义,可以自己换算二进制并结合参数表去理解每个设定功能),P2有5个针脚。

1.1–CC2530单片机采用QFN40封装,外观上是一个边长为6mm的正方形芯片,每个边上有10个引脚,总共40个引脚。CC2530的引脚布局如图所示。

在这里插入图片描述

【软件】

1、IAR Embedded Workbench for 8051,IAR是著名的C编译器,CC2530使用的是8051内核。

2、SmartRF Flash Programmer,将IAR生成的hex文件烧写进cc2530芯片中。

3、sscom3.2 串口调试助手。

一、任务要求

编写程序控制实验板上的LED1和LED2的亮、灭状态,使它们以流水灯方式进行工作,即实验板通电后两个发光二极管以下述方式工作:

①电后LED1和LED2都熄灭。

②延时一段时间后LED1点亮。

③延时一段时间后LED2点亮,此时LED1和LED2都处在点亮状态。

④延时一段时间后LED1熄灭。

⑤延时一段时间后LED2熄灭,此时LED1和LED2都处在熄灭状态。

⑥返回步骤②循环执行。

二、2、CC2530的I/O引脚

1)CC2530总共具有21个数字I/O引脚,这些引脚可以组成3个8位端口,分别为端口0、端口1和端口2,通常表示为P0、P1和P2。其中,P0和P1是完全的8位端口,而P2仅有5位可以使用。21个I/O引脚具有以下特性,可以通过编程进行配置。

2)1.0–可配置为通用I/O端口

通用I/O端口是指可以对外输出逻辑值0(低电平)或1(高电平),也可读取从I/O引脚输入的逻辑值(低电平为0,高电平为1)。可以通过编程来将I/O端口设置成输出方式或输入方式。

3)1.1–可配置为外部设备I/O端口

CC2530内部除了含有8051CPU核心外,还具有其他功能模块,如ADC、定时器和串行通信模块,我们也称这些功能模块为外设。可通过编程将I/O口与这些外设建立起连接关系,以便这些外设与CC2530芯片外界电路进行信息交换。需要注意的是,不能随意指定某个I/O口连接到某个外设

4)1.2–输入口具备3种输入模式

当CC2530的I/O口被配置成通用输入端口时,端口的输入模式有上拉、下拉和三态三种选择,可通过编程进行选择,能够适应多种不同的输入应用。

5)1.3 --具有外部中断能力

当使用外部中断时,I/O口引脚可以作为外部中断源的输入口,这使得电路设计变得更加灵活。

6)I/O端口的相关寄存器

在单片机内部,有一些具有特殊功能的存储单元,这些存储单元用来存放控制单片机内部器件的命令、数据或是运行过程中的一些状态信息。这些寄存器统称“特殊功能寄存器(SFR)”,操作单片机本质上就是对这些特殊功能寄存器进行读写操作,并且某些特殊功能寄存器可以位寻址。例如通过已配置好的P1_1口向外输出高电平可用以下代码实现:

P1 = 0x02; 或者 P1_1 = 1;

7)P1是特殊功能寄存器的名字,P1_1是P1中一个位的名字,为了便于使用,每个特殊功能寄存器都会起一个名字,其中x取值为0~2,分别对应P0、P1和P2口。

三、电路分析

要使用单片机控制外界器件,就要清楚器件与单片机的连接关系和工作原理,这样才能在编写程序代码时知道该操作哪些I/O端口或功能模块,以及应该输入或输出什么样的控制信号。

(1)LED的连接和工作原理

实验板上LED1和LED2与CC2530的连接如图2-2所示,LED1和LED2的负极端分别通过一个限流电阻连接到地(低电平),它们的正极端分别连接到CC2530的P1_0端口和P1_1端口。

为控制两个LED,连接LED的P1_0端口和P1_1端口应被配置成通用输出端口。当端口输出低电平(逻辑值0)时,LED正极端和负极端都为低电平,LED两端没有电压差,也就不会有电流流过LED,此时LED熄灭。当端口输出高电平时,LED正极端电平高于负极端电平,LED两端存在电压差,会有电流从端口流出并通过LED的正极端流向负极端,此时LED点亮

四、寄存器配置分析:

这里我们只用到了灯,所以我们只配置灯的一系列寄存器。
第一个是我们端口功能选择寄存器,我们用的是P1端口所以我们只对P1端口进行配置。

对端口输入和输出进行定义:

通过对i/o的计算
https://img-blog.csdnimg.cn/2020120120230525.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMDMzOTAz,size_16,color_FFFFFF,t_70

五、流程分析

根据任务要求,可将LED的控制流程用流程图进行表示,如下图所示。

六、代码如下:

#include "ioCC2530.h" //引用CC2530头文件

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

函数名称:delay

功    能:软件延时

入口参数:time--延时循环执行次数

出口参数:无

返 回 值:无

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

void delay(unsigned int time)

{

    unsigned int i;

    unsigned char j;

    for(i = 0;i < time;i++){      

      for(j = 0;j < 240;j++)

        }

}

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

函数名称:main

功    能:程序主函数

入口参数:无

出口参数:无

返 回 值:无

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

void main(void)

{

    P1SEL &= ~0xff;//设置P1口所有位为普通IO口

    P1DIR |= 0xff;//设置P1口所有位为输出口

 

    while(1)//程序主循环

    {

        P1 = ~P1;//P1口输出状态反转

        delay(1000);//延时

    }

}

或者代码为:


#include "iocc2530.h" //头文件

#define LED1 P1_0 //宏定义p1_0

#define LED2 P1_1 //宏定义p1_1

void delay(unsigned int time){ //延时函数

  unsigned int i,j;

  for(i=0;i<time;i++){

    for(j=0;j<200;j++);

  }

}

 

void main(void){ //主函数

  P1SEL &=~0X03; //定义通用I/O口

  P1DIR |=0X03; //定义输出接口

  LED1=0;  //将led1置于低电平

  LED2=0; //将led2置于低电平

  while(1){

    delay(100);

    LED1=1;

    delay(100);

    LED2=1;

    delay(100);

    LED1=0;

    delay(100);

    LED2=0;

    delay(100);

  }//利用while循环使灯依此循环亮循环灭

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值