cc2530学习路线-基础实验-gpio控制led灯亮灭(代码片段)

incerry incerry     2022-12-18     502

关键词:

目录


1.前期预备知识

1.1 新大陆ZigBee模块LED灯电路

技术分享图片


从上两的两个电路可知

1.LED1连接在LED-LINK上,而LED-LINK是从CC2530芯片的P1.0端口引出,同样LED2连接在LED-COMM上,而LED-COMM从CC2530芯片P1.1端口引出。
2.两个LED灯正极接的是CC2530芯片,而负极通过1K电阻后接地。根据LED灯单向导电特性,所以CC2530芯片端口为高电平时LED灯便会亮.

1.2 CC2530相关寄存器


寄存器名称 寄存器作用 寄存器描述
P1 (0x90) *控制端口1的高低电平 端口1.通用I/O。可以通过SFR位寻址
P1SEL (0xF4) 端口1 8个子端口的功能选择 P1SEL的8个bit分别代表 => P1.7~P1.0的功能选择.
值为 0:代表通用I/0(GPIO)功能.
值为 1 : 代表外设功能
P1DIR (0xFE) 端口1 输入输出选择 P1DIR的bit定义同P1SEL;
值为 0:代表从外部输入信号至CC2530;
值为 1:代表从CC2530输出信号至外部
P1INP (0xF6) 端口1 输入模式选择 P1INP定义为P1.7~P1.2的I/O输入模式。其中P1.0和P1.1是没有上拉/下拉功能
值为 0:上拉/下拉。
值为 1:三态(高电平、低电平、高阻态)
注意:端口输入模式选择中的三态分别是(高电平、低电平、高阻态),其中高阻态是让端口电阻无限大,让其外部信号改变不会影响到内部总线。

1.3 寄存器操作技巧

在官方示例文档中,推荐使用 &=~ 组合赋值运算将寄存器的某一位置为 0 ;使用 |= 组合赋值运算将寄存器的某一位置为 1 。我们可以通过以下示例来了解。

例1:将P1_0设置为GPIO功能并将设置为输出模式。
/*********官方推荐************/
    // 将P1_0设置为GPIO
    P1SEL &=~ 0x01;
    // 将P1_0设置为输出模式
    P1DIR |= 0x01;
    
/*********一般做法**********/
    P1SEL = 0x00;
    P1DIR = 0x01;

使用官方推荐的操作方法和使用我们一般做法有什么好处呢?其实乍一看我们发现官方推荐方式还是比较复杂,其实一般做法比较简介,好像一般做法还更好一些。我们继续看下面的例子。

例2:假设P1SEL初始值为0x31、P1DIR初始值为0xC3.请在不改变初始值的情况下将P1_0设置为GPIO功能并将设置为输出模式。
/*********官方推荐************/

    // 将P1_0设置为GPIO
    P1SEL &=~ 0x01;
    // 将P1_0设置为输出模式
    P1DIR |= 0x01;
    
/*********一般做法**********/

    P1SEL = 0x30;
    P1DIR = 0xC3;

从例2中大家就可以发现官方推荐做法的好处,如果使用官方推荐的方式,那么只需要关注需修改的那一位,不需要知道其它位到底是怎么样的。其中最重要的就是在改变某一位的值时不会影响到其它位。

1.4 CPU空转延时

单片机实现延时的方法有很多,一般是通过执行空指令来实现延时的效果。需知道单片机的晶振频率和主频。我们这里使用的是类51单片机,使用的晶振是32MHz晶振;按照文档说法,执行以下代码可以让其延时1ms.

typedef unsigned int uint;
void delay_ms(uint ms)

    for(uint i = 0 ; i < ms ; i ++)
        
        for(uint j = 0 ; j < 535 ; j++)
    

1.4 操作流程图

本次实验的操作流程如下。

技术分享图片

2.程序代码

程序代码中并无特别难的地方,根据流程图和之前的分析程序一目了然。

#include <ioCC2530.h>
#define LED1 P1_0        //P1.0端口控制LED1发光二极管
#define unint unsigned int
void init_gpio()

    // 设置 gpio
    P1SEL &= ~0x01;
    // 设置 输出
    P1DIR |= 0x01;
    // P1端口下拉
    P1 = 0;

void delay(unint z)

    for (unint i = 0; i < z; i++)
    
        for (unint j = 0; j < 500; j++);
    

void main(void) 
    init_gpio();
    while (1) 
    
        LED1 = 0;        // 熄灭LED1发光二极管
        delay(1000);
        LED1 = 1;       // 点亮LED1发光二极管
        delay(1000);
    

The End








cc2530学习路线-基础实验-串口通讯发送字符串(4未完待续)

目录1.前期预备知识1.1串口通讯电路图1.2实验相关寄存器1.2常用波特率设置本章未完待续.....原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上。1.前期预备知识1.1串口通讯电路图从上图可见,CC2530芯片通... 查看详情

cc2530gpio控制led灯(代码片段)

...输出接口的总称。通常情况下单片机的计算单元通过向I/O控制寄存器写入数据可以控制I/O口输入输出模式,实现对某些设备的控制或信号采集的功能。若将通用I/O进行组合配置可以实现较为复杂的总线控制接口 查看详情

zigbee开发--基础实验led(代码片段)

CC2530的IO口配置我们需要配置三个寄存器P1SEL、P1DIR、P1INP。IO口功能如下表所示:(详细参考CC2530datasheet.pdf)CC2530datasheet.pdf的链接https://pan.baidu.com/s/1nLjYI8LgqxPH6WHd_n1Szw*P1SEL(0:普通IO口1:第二功能)*P1DIR(0:输入1:输出)*P1INP(0:上... 查看详情

ti的cc2530z-stack协议栈简单问题

...么功能(即什么例子)我想在这三个例子中的一个例子的基础上修改实现:串口接收后立刻由此串口发出刚接收到的字符。请问串口的接收事件在哪里实现,看了比较多的资料还是一头雾水(到底在哪个文件的哪个函数里实现,... 查看详情

cc2530串口接收数据

...tmp!=0)if((tmp!='#')&&(num<3))Recdata[num++]=tmp;else//进入LED控制RTflag=3;//接收3个字符后进入LED控制if(num==3)RTflag=3;tmp=0;//控制LEDif(RTflag==3)//控制LED2if(Recdata[0]=='1')//10#关LED2if(Recdata[1]=='0')LED1=1;else//11#LED2开LED1=0;// 查看详情

zigbee开发--基础实验按键(代码片段)

CC2530的IO口配置我们需要配置三个寄存器P1SEL、P1DIR、P1INP。功能如下表所示:(详细参考CC2530datasheet.pdf)*P1SEL(0:普通IO口1:第二功能)*P1DIR(0:输入1:输出)*P1INP(0:上拉/下拉1:三态)按照表格寄存器内容,我们对LED1和按键S1,也... 查看详情

树莓派实验1:gpio点亮led灯

详细请参考网友博文。实验目的:控制GPIO,点亮一个led灯实验步骤:1、使用wiscp传输GPIO的库文件(下载地址)到树莓派中,并解压(可以像windows操作一样解压,或者使用命令行解压)。2、解压后,可以看到其中有一个文件setup... 查看详情

5按键中断实验

中断方式——按键控制LED亮灭(外部信号输入读取)  电路依然没变,若要使用CC2530的外部中断需要使用P0IEN、PICTL、P0IFG、INE1寄存器    查看详情

cc2530控制两个led灯交替闪烁,闪烁周期为0.5左右.其中p1_2连led1p1-3连2

如果是PC机需要配置一块MOXA的TTL板卡来实现高低电瓶输出:1、先设定LED灯是低电平亮还是高电瓶亮,这里假设低电平;2、设置一个定时器,在定时器里面写代码,分别发送高、低电瓶值可实现交替闪耀;参考技术A但有三点要注... 查看详情

cc2530t3定时器控制引脚p1_1的亮灭

/*****************************************************************************文件名:main.c*作者:Andy*修订:2013-01-08*版本:1.0*描述:操作IO口控制3盏LED灯的全亮和全灭、闪烁、流水灯***************************************************** 查看详情

zigbee学习----点亮led(代码片段)

一、前言  其实我把zigbee后面的组网那些都看完了,现在开始写也是当复习吧。二、原理分析  ①:看过好多博客,刚开始都是直接讲配置寄存器,但我觉得需要且有必要了解一下cc2530这款单片机。zigbee就在人家上面搭载嘛... 查看详情

linux应用开发第九章gpio编程应用开发(代码片段)

文章目录9GPIO编程应用开发9.1GPIO编程基础介绍9.2GPIO编程软件接口9.2.1控制接口9.2.2GPIO信号9.2.3GPIO控制器9.3IMX6ULL开发板GPIO编号的确定9.3.1LED的GPIO编号计算9.3.2按键的GPIO编号计算9.3.3特殊情况下的GPIO编号计算9.4实际编程操作9.4.1导... 查看详情

GPIO 引脚控制 SAMC21

...,但我卡住了。我在AtmelStudio中使用ASF。我从基础开始,学习如何用开关切换LED。这是Atmel的代码,完美无瑕:voidconfigure_port_pin 查看详情

cc2530芯片定时器1的输出比较模式怎么用?

...intunsignedint#defineucharunsignedchar#defineRLEDP1_0 //定义LED1为P10口控制#defineYLEDP1_1 //定义LED2为P11口控制#defineGLEDP1_4 //定义LED3为P14口控制uintcounter=0; //统计溢出次数uintLEDFlag; //标志是否要闪烁voidInitialT1test(void);//初始化函数声明/********... 查看详情

巧用1个gpio控制2个led显示4种状态!(代码片段)

...(点击阅读)清华大学的卓老师,做了具体的实验分析。不仅重点分析了串并联两种实现方式,还对串联方式时两个LED存在微亮的问题提出了解决方案。文章讲解得非常到位,有理有据,实在是“实践出真... 查看详情

arm裸机之点亮led

声明:本文由个人学习过程中整理而成,转载请注明出处实验开发版:S5PV2101、什么是GPIO?GeneralPurposeInputOutput(通用输入/输出)简称为GPIO,属于芯片引脚的一部分。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设... 查看详情

arm裸机之点亮led

声明:本文由个人学习过程中整理而成,转载请注明出处实验开发版:S5PV2101、什么是GPIO?GeneralPurposeInputOutput(通用输入/输出)简称为GPIO,属于芯片引脚的一部分。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设... 查看详情

stm32学习笔记——串口控制led(中断方式)

目录:一、时钟使能,包括GPIO的时钟和串口的时钟使能二、设置引脚复用映射三、GPIO的初始化配置,注意要设置为复用模式四、串口参数初始化配置五、中断分组和中断优先级配置六、设置串口中断类型并使能串口中断七、编... 查看详情