自学stm32第二天

假设有数据unsigned int temp=0x78;完成对第7位置1,对第4位清零,不影响其它位。

#include <stdio.h>

int main() {
    unsigned int temp = 0x78; // 初始值为 0x78

    // 将第7位置1
    temp |= (1 << 7);

    // 将第4位清零
    temp &= ~(1 << 4);

    // 打印结果
    printf("Modified value: 0x%X\n", temp);

    return 0;
}

0x78是什么意思?

在C语言中,以0x开头的数字表示十六进制数。因此,0x78表示的是十六进制数,其对应的十进制值为120。

具体来说,0x78的拆分是:

  • 第一个数字是7,代表十六进制的7,对应十进制的7。
  • 第二个数字是8,代表十六进制的8,对应十进制的8。

将这两个数字组合起来,得到十进制数120。所以,当你看到0x78时,它实际上是表示数字120。

怎么得到十进制数120的?

将十六进制数 0x78 转换为十进制数的方法是按权展开:

0x78=(7×161)+(8×160)=112+8=1200x78=(7×161)+(8×160)=112+8=120

在这里,161161 表示十六进制的第二位的权值,160160 表示第一位的权值。将各个位上的数字与相应的权值相乘,然后将结果相加,即可得到十进制数。

所以,0x780x78 转换为十进制数是 120。

将第7位置1,为什么要“ temp |= (1 << 7)”?

temp |= (1 << 7) 这个语句使用了按位或运算符 | 和位移运算符 << 来将第7位设置为1。

让我解释一下这个语句的每个部分:

  • (1 << 7): 这是一个位移操作,将数字1左移7位。在二进制中,这等同于在第7位(从右向左数,从0开始)设置为1,其它位都是0。这创建了一个只有第7位为1的二进制数。

  • temp |= (1 << 7): 这是按位或运算符,它将 temp 的第7位与上面创建的二进制数进行按位或操作。由于上面的二进制数只有第7位是1,所以这个操作的结果就是将 temp 的第7位置为1,而不影响其它位。

这样的操作是为了确保只修改 temp 的第7位,而不改变其它位的值。

为什么要有按位或操作?

按位或操作 | 用于在指定位置设置特定的位。在这个场景中,我们想要将 temp 的第7位设置为1,而不改变其它位的值。

如果我们直接使用赋值操作 temp = (1 << 7),那么 temp 的所有位都会被重新赋值,而不仅仅是第7位。这可能会导致丢失 temp 中的其他信息。

通过使用按位或操作 temp |= (1 << 7),我们只在第7位上添加一个1,而不改变其他位的值。这样可以确保我们只修改我们感兴趣的位,而保留其他位的原始值。这是一种常见的位操作技巧,用于修改一个或多个特定的位,而不影响其他位。

将第4位清零,为什么要“temp &= ~(1 << 4)”?

temp &= ~(1 << 4) 这个语句使用了按位与运算符 & 和按位取反运算符 ~ 来将第4位清零。

  • (1 << 4): 这是一个位移操作,将数字1左移4位。在二进制中,这等同于在第4位(从右向左数,从0开始)设置为1,其它位都是0。这创建了一个只有第4位为1的二进制数。

  • ~(1 << 4): 这是按位取反操作,它将上述创建的二进制数中的所有位取反,即1变为0,0变为1。这样得到了一个只有第4位为0的二进制数。

  • temp &= ~(1 << 4): 这是按位与运算符,它将 temp 的每一位与上述创建的只有第4位为0的二进制数进行按位与操作。由于只有第4位为0,其它位都为1,这个操作的结果就是将 temp 的第4位清零,而不影响其他位的值。

这样的操作是为了确保只修改 temp 的第4位,而不改变其它位的值。同样,这是一种常见的位操作技巧,用于清零一个或多个特定的位,而不影响其他位。

为什么有时候用“|”,有时候用“&”,它们在这里的用法是什么?

在这里,使用 |& 是因为它们分别执行按位或和按位与的操作,用于设置或清零特定的位。

  • temp |= (1 << 7): 这个语句使用按位或操作 |,目的是将 temp 的第7位设置为1,而不影响其他位。按位或操作的特点是,只要其中一个操作数的相应位为1,结果的相应位就为1。这用于设置特定位的值。

  • temp &= ~(1 << 4): 这个语句使用按位与操作 &,目的是将 temp 的第4位清零,而不影响其他位。按位与操作的特点是,只有两个操作数的相应位都为1时,结果的相应位才为1。通过与一个只有第4位为0的二进制数进行按位与操作,可以清零特定位。

所以,| 用于设置位,& 用于清零位。这两个操作符在位操作中经常用于修改特定位,而不影响其他位的值。

MCU、CPU、寄存器有什么关系?

MCU(Microcontroller Unit)、CPU(Central Processing Unit)和寄存器(Register)之间存在密切的关系,它们是计算机体系结构中的关键组成部分。

1. **CPU(Central Processing Unit):** CPU是计算机的核心,负责执行指令集中的指令。它包含算术逻辑单元(ALU)、控制单元和寄存器。ALU执行算术和逻辑运算,控制单元管理指令的执行流程。CPU是整个计算机系统的大脑,执行计算和控制任务。

2. **寄存器(Register):** 寄存器是CPU内部的存储单元,用于暂时存储指令、数据和中间结果。寄存器的存取速度非常快,因此它们被用于存储临时数据,以便供CPU快速访问。寄存器是在CPU内部直接实现的存储单元,与内存不同,它们在计算机体系结构中扮演着重要的角色。

3. **MCU(Microcontroller Unit):** MCU是一种嵌入式系统中的特殊计算机系统,它集成了处理器(通常是CPU)、内存、输入/输出接口和定时器等功能,通常用于控制电子设备。MCU通常包含一个或多个CPU核心,这些核心执行嵌入式应用程序的指令。在MCU中,CPU与寄存器一起工作,执行特定的任务,例如控制传感器、执行实时操作等。

在一个计算机系统中,CPU通过寄存器进行数据传输和存储,而MCU是一种特殊的计算机系统,集成了CPU和其他必要的硬件模块,用于执行特定的控制任务。因此,MCU中的CPU与寄存器之间存在紧密的协作,以实现特定的嵌入式控制功能。

上下拉电阻有什么作用?

上下拉电阻是在数字电路中常用的电阻,用于确保输入信号在特定情况下具有确定的电平。它们通常用于微控制器(MCU)或数字逻辑电路的输入引脚。

1. **上拉电阻(Pull-Up Resistor):** 当一个引脚被连接到一个上拉电阻时,这个电阻将引脚连接到正电源(通常是Vcc或电源电压)。这样,当没有外部信号驱动引脚时,上拉电阻会拉高引脚的电平。上拉电阻的作用是确保引脚在没有外部输入时保持为高电平

2. **下拉电阻(Pull-Down Resistor):** 当一个引脚被连接到一个下拉电阻时,这个电阻将引脚连接到地(GND)。这样,当没有外部信号驱动引脚时,下拉电阻会拉低引脚的电平。下拉电阻的作用是确保引脚在没有外部输入时保持为低电平。

### 作用和应用:

- **防止浮动状态:** 当一个引脚没有外部输入时,它可能处于一个未确定的电平状态,称为浮动状态。上下拉电阻通过连接到电源或地,确保引脚有一个明确定义的电平状态。

- **输入信号稳定性:** 在数字输入引脚上使用上下拉电阻可以确保输入信号在没有外部输入时保持稳定。这对于避免不必要的干扰和提高信号的可靠性很重要。

- **按键和开关:** 在按键和开关连接到微控制器的输入引脚时,上下拉电阻常用于确保在按键未按下时引脚保持在高电平或低电平,从而避免浮动状态。

总的来说,上下拉电阻是为了确保数字输入引脚在没有外部输入时具有确定的电平,防止浮动状态,提高信号的可靠性。

寄存器在单片机中的角色

1. **数据存储:** 寄存器是一种高速且直接位于CPU内部的存储单元,用于存储临时数据、中间结果和操作数。由于寄存器的速度远高于其他存储介质(如RAM),它们被广泛用于临时数据的快速存储和访问。

2. **控制寄存器:** 单片机的控制寄存器用于存储和配置各种控制信息,例如时钟设置、中断控制、电源管理等。通过修改这些寄存器的值,程序可以控制单片机的各种行为和功能。

3. **状态寄存器:** 状态寄存器用于存储有关CPU运行状态的信息,例如零标志、进位标志、溢出标志等。这些标志用于指示运算的结果或CPU的当前状态。

4. **输入/输出寄存器:** 用于与外部设备通信的输入/输出寄存器。这些寄存器允许程序读取或写入与单片机连接的外部设备,如传感器、执行器、通信接口等。

5. **地址寄存器:** 地址寄存器用于存储内存地址信息,帮助CPU访问内存中的数据。通常,这些寄存器包括程序计数器(PC)等,用于跟踪当前指令的内存地址。

6. **计时器/计数器寄存器:** 用于实现定时和计数功能。单片机通常包含内部计时器和计数器,这些寄存器用于生成定时器中断、计数外部事件脉冲等。

7. **配置寄存器:** 用于配置和初始化微控制器的各种参数和模块。这包括时钟频率、I/O口配置、模拟数字转换器(ADC)配置等。

8. **中断寄存器:** 用于控制和处理中断。中断寄存器存储中断请求和相应中断服务程序的地址。

总的来说,寄存器在单片机中充当了数据存储、控制、状态指示和外设交互等多个方面的角色。它们是单片机内部的关键组成部分,直接影响着单片机的功能和性能。

寄存器地址查找方法

寄存器的地址通常由芯片制造商提供的文档或数据手册中给出。这些文档通常称为“数据手册”、“参考手册”或“技术手册”。例如:

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值