CC2530寄存器编程学习笔记_点灯

下面是我的CC2530的学习笔记之点灯部分。

第一步:分析原理图

找到需要对应操作的硬件

  图 1

通过这个图1我们可以找到LED1和LED2连接的引脚,分别是P1_0和P1_1。


第二步 分析原理图

   图 2  

  • 通过图2 确认P1_0和P1_1引脚连接到LED,并且这些引脚可以通过单片机控制。

LED连接到两个引脚:P1_0和P1_1,这两个引脚属于并行IO口。可以看到当P1_0和P1_1输出高电平时,LED灯就会亮。这两个引脚由单片机控制,当P1_0和P1_1输出1(0低电平)时,LED灯亮。


 第三步 查手册设置引脚和配置寄存器

第一步 将引脚设为通用模式

        首先我们要知道 CC2530 有3组端口 P0 P1 P2 ---> P0 P1 有8个引脚 P2 有5个引脚。合起来21个数字输入/输出引脚。可以配置为通用数字I/O或外设I/O信号,配置为连接到ADC、定时器或 USART 外设。这些 I/O 口的用途可以通过一系列寄存器配置,由用户软件加以实现。

I/O 端口具备如下重要特性:
  • 21 个数字 I/O 引脚
  • 可以配置为通用 I/O 或外部设备 I/O
  • 输入口具备上拉或下拉能力
  • 具有外部中断能力。
        21 个 I/O 引脚都可以用作于外部中断源输入口。因此如果需要外部设备可以产生中断。外部中断功能也可以从睡眠模式唤醒设备。

        对于CC2530单片机的P1_0和P1_1引脚,配置为通用I/O口而不是外设I/O口是因为我们需要直接控制这些引脚的电平状态来实现LED的点亮和熄灭。外设I/O口通常用于特定的硬件外设(如UART、SPI、I2C等),而在这种情况下,选择通用I/O口更适合用于简单的引脚电平控制。别纠结 反正就是选通用就对了。


                                                                        图 3

                                                                    图 4  此图来自手册  

        我们根据图3 和图4 篮框部分可以看到如果我们需要配置端口功能为通用IO口,就选择PxSEL寄存器因为我们是P1_0和P1_1引脚。 所以我们就选择P1SEL寄存器。

PxSEL寄存器: 

        PxSEL寄存器(这里的x可以是0、1或2)用来决定每个引脚的用途。你可以把它想象成一个开关板,每个开关对应一个引脚。这个开关可以让引脚变成普通的输入/输出口(就像家里的开关控制灯的开关),或者让引脚连接到单片机内部的特殊功能(比如UART、SPI等外设)。

         默认情况下,当单片机复位(重启)后,所有的引脚都会被设置成普通的输入口。这就像家里的所有开关在重启后都默认是关闭状态,等你需要的时候再手动打开。

 

                                                             图 5 此图来自手册 

  要将P1_0和P1_1引脚配置为普通I/O口,可以这样设置:

P1SEL &= ~0x03; /将P1_0和P1_1配置为通用I/O 把第0位和第1位置为0。
引脚从0 开始  0 1 2 3 4 5 6 7 共8位
             0 0 0 0 0 0 0 0
///          0 0 0 0 0 0 1 1 如果你要配置为外设IO 就把对应位,置为1就可以了

 第二步 设置引脚方向为输出

        在将方向设置为输出的时候,我们要先知道什么是输入输出,不需要多懂,简单了解一下就好了,懂这个为啥设为输出即可。

输入:输入是指检测各个引脚上的电平状态。

电平状态:电平状态分为高电平和低电平。高电平表示有电压,通常用数字符号1表示;低电平表示接地,通常用数字符号0表示。

应用示例:一个常见的输入例子是按钮。当按钮按下时,引脚检测到高电平(1);当按钮松开时,引脚检测到低电平(0)。

输出:输出是指控制引脚电平的高低状态。

电平状态:通过设置引脚的电平状态,可以控制外部设备。例如,高电平(1)可以点亮LED,低电平(0)可以熄灭LED。

应用示例:你提供的图片就是一个输出的例子。P1_0和P1_1引脚通过电阻连接到LED,当引脚输出高电平时,LED亮起;当引脚输出低电平时,LED熄灭。

                                                            图 6 此图来自手册 

                                                                     图  7

       我们根据图6 和图7 篮框部分可以看到如果我们需要配置改变方向为输入,就选择PxDIR寄存器因为我们是P1_0和P1_1引脚。 所以我们就选择P1DIR寄存器。

PxDIR寄存器的作用

        PxDIR寄存器就像一个控制面板,用来决定每个引脚是作为输入还是输出。每个引脚都有一个对应的开关(位),你可以通过这个开关来设置引脚的方向是输入还是输出。

                                                               图 8

代码如下:

P1SEL &= ~0x03; /将P1_0和P1_1配置为通用I/O
P1DIR |= 0x03; // 将P1_0和P1_1设置为输出

 写到这里我们的寄存器配置就完成了。

 第四步 软延时

void delay(int num) 
{ 
    int i = 0; 
    for(i = 0; i < num; i++) 
    { 
        int j = 0; 
        for(j = 0; j <400; j++) 
          {
          
          }
    } 
} 

这个软延时不精准,但是能达到延时的作用了,为了闪烁嘛

下面我们就可以来编写简单的LED闪烁的代码了,下面是代码的流程图;

代码

那下面就请你根据这个图来完善你的代码喽 实现LED灯闪烁

#include "ioCC2530.h" 
#define LED1 P1_0 
#define LED2 P1_1 
 
void LED_Init() 
{ 
    P1SEL &= ~0X03; 
    P1DIR |= 0X03; 
    LED1 = 0; 
    LED2 = 0; 
} 
 
void delay(int num) 
{ 
    int i = 0; 
    for(i = 0; i < num; i++) 
    { 
        int j = 0; 
        for(j = 0; j <400; j++) 
          ; 
    } 
} 
 
void main() 
{ 
    LED_Init(); 
    while(1) 
    {
        LED1 = !LED1; 
        LED2 = !LED2; 
        delay(1000); 
    } 
}

芜湖 完结 撒花

附上原理图        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/781331.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目/代码规范与Apifox介绍使用

目录 目录 一、项目规范&#xff1a; &#xff08;一&#xff09;项目结构&#xff1a; &#xff08;二&#xff09;传送的数据对象体 二、代码规范&#xff1a; &#xff08;一&#xff09;数据库命名规范&#xff1a; &#xff08;二&#xff09;注释规范&#xff1a; …

【0基础学爬虫】爬虫框架之 feapder 的使用

前言 大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0…

mac|Mysql WorkBench 或终端 导入 .sql文件

选择Open SQL Script导入文件 在第一行加入use 你的schema名字&#xff0c;相当于选择了这个schema 点击运行即可将sql文件导入database 看到下面成功了即可 这时候可以看看左侧的目标database中有没有成功导入table&#xff0c;如果没有看到的话&#xff0c;可以点一下右上角的…

Bert入门-使用BERT(transformers库)对推特灾难文本二分类

Kaggle入门竞赛-对推特灾难文本二分类 这个是二月份学习的&#xff0c;最近整理资料所以上传到博客备份一下 数据在这里&#xff1a;https://www.kaggle.com/competitions/nlp-getting-started/data github&#xff08;jupyter notebook&#xff09;&#xff1a;https://gith…

【JavaEE】多线程进阶

&#x1f921;&#x1f921;&#x1f921;个人主页&#x1f921;&#x1f921;&#x1f921; &#x1f921;&#x1f921;&#x1f921;JavaEE专栏&#x1f921;&#x1f921;&#x1f921; 文章目录 1.锁策略1.1悲观锁和乐观锁1.2重量级锁和轻量级锁1.3自旋锁和挂起等待锁1.4可…

AI大模型的智能心脏:向量数据库的崛起

在人工智能的飞速发展中,一个关键技术正悄然成为AI大模型的智能心脏——向量数据库。它不仅是数据存储和管理的革命性工具,更是AI技术突破的核心。随着AI大模型在各个领域的广泛应用,向量数据库的重要性日益凸显。 01 技术突破:向量数据库的内在力量 向量数据库以其快速检索…

TypeError: Cannot read properties of null (reading ‘nextSibling‘)

做项目用的Vue3Vite, 在画静态页面时&#xff0c;点击菜单跳转之后总是出现如下报错&#xff0c;百思不得其解。看了网上很多回答&#xff0c;也没有解决问题&#xff0c;然后试了很多方法&#xff0c;最后竟然发现是template里边没有结构的原因。。。 原来我的index.vue是这样…

自注意力 公式解释

公式 (\mathbf{y}_i f(\mathbf{x}_i, (\mathbf{x}_1, \mathbf{x}_1), \ldots, (\mathbf{x}_n, \mathbf{x}_n)) \in \mathbb{R}^d) 描述了自注意力机制中单个词元的输出表示如何生成。我们来逐步解释这个公式&#xff1a; 输入序列 (\mathbf{x}_1, \mathbf{x}_2, \ldots, \math…

2024吉他手的超级助手Guitar Pro8中文版本发布啦!

亲爱的音乐爱好者们&#xff0c;今天我要来和你们分享一款让我彻底沉迷的软件—Guitar Pro。如果你是一名热爱吉他的朋友&#xff0c;那么接下来的内容你可要瞪大眼睛仔细看哦&#xff01;&#x1f440;&#x1f3b6; Guitar Pro免费绿色永久安装包下载&#xff1a;&#xff0…

《昇思 25 天学习打卡营第 11 天 | ResNet50 图像分类 》

《昇思 25 天学习打卡营第 11 天 | ResNet50 图像分类 》 活动地址&#xff1a;https://xihe.mindspore.cn/events/mindspore-training-camp 签名&#xff1a;Sam9029 计算机视觉-图像分类&#xff0c;很感兴趣 且今日精神颇佳&#xff0c;一个字&#xff0c;学啊 上一节&…

【数据结构】经典链表题目详解集合(反转链表、相交链表、链表的中间节点、回文链表)

文章目录 一、反转链表1、程序详解2、代码 二、相交链表1、程序详解2、代码 三、链表的中间节点1、程序详解2、代码 四、回文链表1、程序详解2、代码 一、反转链表 1、程序详解 题目&#xff1a;给定单链表的头节点 head &#xff0c;请反转链表&#xff0c;并返回反转后的链…

STM32实现硬件IIC通信(HAL库)

文章目录 一. 前言二. 关于IIC通信三. IIC通信过程四. STM32实现硬件IIC通信五. 关于硬件IIC的Bug 一. 前言 最近正在DIY一款智能电池&#xff0c;需要使用STM32F030F4P6和TI的电池管理芯片BQ40Z50进行SMBUS通信。SMBUS本质上就是IIC通信&#xff0c;项目用到STM32CubeMXHAL库…

基于ROS的智能网联车远程交互软件,全UI无需记忆指令,剑指核心原理。

基于ROS的智能网联车远程交互软件&#xff0c;全UI无需记忆指令&#xff0c;剑指核心原理。 服务于中汽恒泰&#xff0c;伟大的项目&#xff0c;希望看官点赞&#xff0c;谢谢~~ 进程&#xff08;节点&#xff09;列表化&#xff0c;参数面板化&#xff0c;实现快速机器人配置…

SpringMVC(2)——controller方法参数与html表单对应

controller方法参数与html表单对应 0. User实体类 import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable; import java.util.Date; import java.util.List; import java.util.Map;public class User implements Serializable {private …

CosyVoice - 阿里最新开源语音克隆、文本转语音项目 支持情感控制及粤语 本地一键整合包下载

近日&#xff0c;阿里通义实验室发布开源语音大模型项目FunAudioLLM&#xff0c;而且一次包含两个模型&#xff1a;SenseVoice和CosyVoice。 CosyVoice专注自然语音生成&#xff0c;支持多语言、音色和情感控制&#xff0c;支持中英日粤韩5种语言的生成&#xff0c;效果显著优于…

apk反编译修改教程系列-----修改apk 解除软件限制功能 实例操作步骤解析_3【二十二】

在前面的几期博文中有过解析去除apk中功能权限的反编译步骤。另外在以往博文中也列举了修改apk中选项功能权限的操作方法。今天以另外一款apk作为演示修改反编译去除软件功能限制的步骤。兴趣的友友可以参考其中的修改过程。 课程的目的是了解apk中各个文件的具体作用以及简单…

JavaWeb—Servlet

概述 Javaweb的核心就是围绕servlet Servlet就是一个接口&#xff0c; 定义了java类 被浏览器访问到&#xff08;tomcat识别&#xff09;的接口 将来就是自己写一个类 &#xff0c;实现servlet接口 &#xff0c;重写方法 执行过程 当服务器接收到客户端浏览器的请求后&#xff…

【机器学习】机器学习与时间序列分析的融合应用与性能优化新探索

文章目录 引言第一章&#xff1a;机器学习在时间序列分析中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 数据增强 1.2 模型选择1.2.1 自回归模型1.2.2 移动平均模型1.2.3 长短期记忆网络1.2.4 卷积神经网络 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 A…

C# 编程中互斥锁的使用

C# 中的互斥锁 互斥锁是 C# 中使用的同步原语&#xff0c;用于控制多个线程或进程对共享资源的访问。其目的是确保在任何给定时间只有一个线程或进程可以获取互斥锁&#xff0c;从而提供互斥。 C# 中互斥锁的优点 可以使用互斥锁 (Mutex) 并享受其带来的好处。 1. 共享资源…

一篇就够了,为你答疑解惑:锂电池一阶模型-在线参数辨识(附代码)

锂电池一阶模型-在线参数辨识 背景在线 VS 离线 参数辨识递推最小二乘法一阶戴维南Z域离散表达式 背景 锂电池一阶戴维南等效模型的基础知识和离线辨识方法&#xff0c;已经在上一期非常详细地讲解了一轮&#xff08;上期文章请戳此处&#xff09;&#xff0c;本期继续讲解一下…