前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CC2530基础实验一 IO实验

CC2530基础实验一 IO实验

作者头像
w候人兮猗
发布2020-07-01 17:34:32
1.3K0
发布2020-07-01 17:34:32
举报

####一、任务要求

编写程序控制实验板上的LED1和LED2的亮、灭状态,使它们以流水灯方式进行工作,即实验板通电后两个发光二极管以下述方式工作: ①通电后LED1和LED2都熄灭。 ②延时一段时间后LED1点亮。 ③延时一段时间后LED2点亮,此时LED1和LED2都处在点亮状态。 ④延时一段时间后LED1熄灭。 ⑤延时一段时间后LED2熄灭,此时LED1和LED2都处在熄灭状态。 ⑥返回步骤②循环执行。

####二、CC2530的引脚

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

这里写图片描述
这里写图片描述

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

(1)可配置为通用I/O端口 通用I/O端口是指可以对外输出逻辑值0(低电平)或1(高电平),也可读取从I/O引脚输入的逻辑值(低电平为0,高电平为1)。可以通过编程来将I/O端口设置成输出方式或输入方式。 (2)可配置为外部设备I/O端口 CC2530内部除了含有8051CPU核心外,还具有其他功能模块,如ADC、定时器和串行通信模块,我们也称这些功能模块为外设。可通过编程将I/O口与这些外设建立起连接关系,以便这些外设与CC2530芯片外界电路进行信息交换。需要注意的是,不能随意指定某个I/O口连接到某个外设 (3)输入口具备3种输入模式 当CC2530的I/O口被配置成通用输入端口时,端口的输入模式有上拉、下拉和三态三种选择,可通过编程进行选择,能够适应多种不同的输入应用。 (4)具有外部中断能力 当使用外部中断时,I/O口引脚可以作为外部中断源的输入口,这使得电路设计变得更加灵活。 3.I/O端口的相关寄存器 在单片机内部,有一些具有特殊功能的存储单元,这些存储单元用来存放控制单片机内部器件的命令、数据或是运行过程中的一些状态信息。这些寄存器统称“特殊功能寄存器(SFR)”,操作单片机本质上就是对这些特殊功能寄存器进行读写操作,并且某些特殊功能寄存器可以位寻址。例如通过已配置好的P1_1口向外输出高电平可用以下代码实现: P1 = 0x02; 或者 P1_1 = 1; P1是特殊功能寄存器的名字,P1_1是P1中一个位的名字,为了便于使用,每个特殊功能寄存器都会起一个名字。与CC2530的I/O口有关的主要特殊功能寄存器如下表所列,其中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点亮。

####三、代码设计 根据任务要求,可将LED的控制流程用流程图进行表示,如下图所示。

这里写图片描述
这里写图片描述

####四、代码 #include “ioCC2530.h” //引用CC2530头文件

代码语言:javascript
复制
/**************************************************************
函数名称: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++)
        {
            asm("NOP");//asm用来在C代码中嵌入汇编语言操作,汇
            asm("NOP");//编命令nop是空操作,消耗1个指令周期。
            asm("NOP");
        }
}
/**************************************************************
函数名称:main
功    能:程序主函数
入口参数:无
出口参数:无
返 回 值:无
**************************************************************/
void main(void)
{
    P1SEL &= ~0xff;//设置P1口所有位为普通IO口
    P1DIR |= 0xff;//设置P1口所有位为输出口

    while(1)//程序主循环
    {
        P1 = ~P1;//P1口输出状态反转
        delay(1000);//延时
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年3月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档