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); } 
}

芜湖 完结 撒花

附上原理图        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一体化运维:某省电力公司实现集中统一监控

在当今信息化高速发展的时代&#xff0c;电力公司作为国家基础设施的重要组成部分&#xff0c;其IT系统的稳定性和高效性直接关系到电力供应的安全与稳定。为了提升运维效率&#xff0c;确保电力系统的持续稳定运行&#xff0c;某省电力公司采购十多套“监控易”运维软件&#…

高算力智能监控方案:基于瑞芯微RK3576核心板开发NVR网络视频录像机

近年来&#xff0c;随着人工智能和物联网技术的不断发展&#xff0c;网络视频录像机&#xff08;NVR&#xff09;在智能监控领域中的应用越来越广泛。本文将围绕RK3576核心板展开讨论&#xff0c;探讨其在NVR开发中的潜力和优势。 一、RK3576核心板 RK3576是瑞芯微的新一代中…

14-35 剑和诗人9 - 普及 Agentic RAG

好吧&#xff0c;让我们直接进入正题——了解 Agentic RAG&#xff08;检索增强生成&#xff09;方法以及它如何彻底改变我们处理信息的方式。系好安全带&#xff0c;因为这将变得疯狂&#xff01; Agentic RAG 的核心在于为 RAG 框架注入智能和自主性。这就像对常规 RAG 系统…

《Windows API 每日一练》8.4 edit控件

编辑类是最简单的预定义窗口类&#xff0c;而另一方面却又是最复杂的。当你用“edit”作为类名创建子窗口时&#xff0c;可以基于CreateWindow调用的x坐标、y坐标、宽度和高度参数定义一个矩形。这个矩形包含可编辑的文本。一旦子窗口控件获得输入焦点&#xff0c;你就可以输入…

【文献解析】Voxelmap——一种自适应体素地图

Efficient and Probabilistic Adaptive Voxel Mapping for Accurate Online LiDAR Odometry 论文地址&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9813516 代码&#xff1a;GitHub - hku-mars/VoxelMap: [RA-L 2022] An efficient and probabili…

制冷软件SOLKANE单级制冷循环计算

SOLKANE软件下载 单级制冷循环参数介绍 输入数据&#xff1a; 1.蒸发器&#xff1a; 温度&#xff1a;蒸发温度t6&#xff08;露点温度&#xff09;。 过热&#xff1a;制冷剂t6-t6在蒸发器中过热。 压力损失&#xff1a;蒸发器入口和出口之间的压力下降。 制冷量&#x…

Android12 MultiMedia框架之MediaExtractorService

上节学到setDataSource()时会创建各种Source&#xff0c;source用来读取音视频源文件&#xff0c;读取到之后需要demux出音、视频、字幕数据流&#xff0c;然后再送去解码。那么负责进行demux功能的media extractor模块是在什么时候阶段创建的&#xff1f;这里暂时不考虑APP创建…

深圳晶彩智能ESP32-2432S028R实时观察LVGL9效果

深圳晶彩智能ESP32-2432S028R概述&#xff1a; 深圳晶彩智能出品ESP32-32432S028R为2.8寸彩色屏采用分辨率320x240彩色液晶屏&#xff0c;驱动芯片是ILI9431。板载乐鑫公司出品ESP-WROOM-32&#xff0c;Flash 4M。型号尾部“R”标识电阻膜的感压式触摸屏&#xff0c;驱动芯片是…

基于MATLAB对线阵天线进行泰勒加权

相控阵天线——基于MATLAB对线阵进行泰勒加权 目录 前言 一、泰勒综合 二、单元间距的改变对泰勒阵列方向图的影响 三、单元数的改变对泰勒阵列激励分布的影响 四、副瓣电平SLL对泰勒阵列激励幅度的影响 五、副瓣电平SLL对泰勒阵列方向图的影响 六、泰勒阵列和切比雪夫阵…

量化交易在不同经济周期中的表现

量化交易&#xff0c;作为一种基于算法和数学模型的交易方法&#xff0c;其在不同经济周期中的表现受到了市场参与者的广泛关注。量化交易策略的设计使其能够在多种市场环境中寻找投资机会&#xff0c;无论是经济扩张期还是衰退期&#xff0c;都能够展现出其独特的适应性和效率…

7.6数据结构作业

// 练习一 struct K { double a; //8 char b; //1 char c; //1 double d; //8 };//24 // 练习二 struct L { int a; //4 double b; //8 char c; //1 };//24 // 练习三 struct M { char a;//1 int b; //4 char c; //1 double d; //8 };//24 /…

(5) 深入探索Python-Pandas库的核心数据结构:Series详解

目录 前言1. Series 简介2. Series的特点3. Series的创建3.1 使用列表创建Series3.2 使用字典创建Series3.3 使用列表和自定义索引创建Series3.4 指定数据类型和名称 4. Series的索引/切片4.1 下标索引&#xff1a;基于整数位置的索引4.2 基于标签的索引4.3 切片4.4 使用.loc[]…

触感网络:WebKit 振动(Vibration API)的交互新维度

触感网络&#xff1a;WebKit 振动&#xff08;Vibration API&#xff09;的交互新维度 在数字化时代&#xff0c;用户体验的追求已经不仅限于视觉和听觉&#xff0c;触觉反馈也逐渐成为网页交互设计的重要组成部分。WebKit 作为众多现代浏览器的核心技术引擎&#xff0c;对振动…

Linux 文件描述符 fd

当然&#xff0c;以下是一些关于 Linux 文件描述符&#xff08;fd&#xff09;的示例&#xff0c;以清晰、分点表示和归纳的形式给出&#xff1a; 1. 文件描述符的基本概念和用途 定义&#xff1a;文件描述符是一个非负整数&#xff0c;用于指代被进程所打开或使用的文件、套…

Leetcode 59. 螺旋打印矩阵

题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 示例 2&#xff1a; 输入&#xff1a;n…

c++中new和delete重载的一点介绍

通义千问中作答的&#xff0c;感觉回答的比自己总结的好&#xff1a; 实际上&#xff0c;你可以在C中重载new和delete运算符。重载new和delete允许你自定义内存分配和释放的行为&#xff0c;这对于实现特殊的内存管理策略非常有用&#xff0c;例如&#xff1a; 内存池&#xf…

系统迁移从CentOS7.9到Rocky8.9

我有两台阿里云上的服务器是CentOS7.9&#xff0c;由于CentOS7已经停止支持&#xff0c;后续使用的话会有安全漏洞&#xff0c;所以需要尽快迁移&#xff0c;个人使用的话目前兼容性好的还是RockyLinux8&#xff0c;很多脚本改改就能用了。 一、盘点系统和迁移应用 查看当前系…

AI在软件开发中的革新与未来挑战

目录 前言 AI工具的广泛应用与优势 AI与开发者技能需求的互动关系 AI的未来展望与面临的挑战 结语 前言 在当今快速发展的技术领域中&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;正以前所未有的方式改变着软件开发的面貌。从代码生成到错误检测&#xff0c;再…

linux内核源码学习所需基础

1.面向对象的思想&#xff0c;尤其是oopc的实现方式。 2.设计模式。 这两点需要内核源码学习者不仅要会c和汇编&#xff0c;还要接触一门面向对象的语言&#xff0c;比如c&#xff0b;&#xff0b;/java/python等等任意一门都行&#xff0c;起码要了解面向对象的思想。 另外li…

MyBatis 框架核心及面试知识要点

1、什么是 MyBatis? MyBatis 是一款优秀的支持自定义 SQL 查询、存储过程和高级映射的持久层框架&#xff0c;消除了 几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索 。 MyBatis 可以使用 XML,或注解进 行配置和映射&#xff0c;MyBatis 通过将参数映射到配置的 SOL,形…