当前位置: 首页 > news >正文

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

芜湖 完结 撒花

附上原理图        

相关文章:

  • C编程使用clock函数实现计算一段代码的执行时间:毫秒单位
  • 17.分频器设计拓展练习-任意分频通用模块
  • XML Schema 属性
  • 揭秘:离心风机风量背后的科学原理
  • 没什么事情,随记一下 -出差
  • Labview_压缩文件
  • 关于string的‘\0‘与string,vector构造特点加部分特别知识点的讨论
  • 详细对比Java SPI、Spring SPI 和 Dubbo SPI
  • 【机器学习】特征选择:精炼数据,提升模型效能
  • 暴雨突袭不可不看!水浸传感器作用有这些
  • ubuntu 查看联网配置
  • PaddleVideo:Squeeze Time算法移植
  • WebOffice在线编微软Offfice,并以二进制流的形式打开Word文档
  • 【软件测试】 1+X初级 功能测试试题
  • antDesignPro随记
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Angular数据绑定机制
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • C++类的相互关联
  • FastReport在线报表设计器工作原理
  • golang中接口赋值与方法集
  • Hibernate最全面试题
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • SpringBoot几种定时任务的实现方式
  • Vue实战(四)登录/注册页的实现
  • 关于Java中分层中遇到的一些问题
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 七牛云假注销小指南
  • 什么是Javascript函数节流?
  • 通信类
  • 我建了一个叫Hello World的项目
  • 异常机制详解
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​MySQL主从复制一致性检测
  • ​渐进式Web应用PWA的未来
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #Z0458. 树的中心2
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1)bark-ml
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (day18) leetcode 204.计数质数
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (六)激光线扫描-三维重建
  • (三)模仿学习-Action数据的模仿
  • (四)React组件、useState、组件样式
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)pytest自动化测试框架之生成测试报告(mac系统)