c - 解释C代码指令

标签 c microcontroller

以下代码用于对微 Controller 进行编程。我想知道下面的代码在做什么。我知道'|'是 OR 和 '&' AND 但整条线在做什么?

lcd_port = (((dat >> 4) & 0x0F)|LCD_EN|LCD_RS);

最佳答案

因为我们不知道 dat 包含什么,所以很难将其放入上下文中,但我们可以看到:

  1. 数据右移 4 位,因此 11111111 变为 00001111,例如。
  2. 该值与 0x0F 进行“与”运算。这是删除不需要的位的常用技巧,因为 b & 1 = 1b & 0 = 0。将您的数字视为一个位序列,这是一个 2 字节的示例:

    0011010100111010

    &

    0000000000001111


    0000000000001010

  3. 现在 LCD_ENLCD_RS 标志被“或”运算。同样,这是一个常见的二进制技巧,因为 b | 1 = 1b | 0 = b,所以你可以添加标志但不能删除它们。所以,如果说 LCD_EN = 0x01LCD_RS = 0x02

    0000000000001010

    |

    0000000000000011


    0000000000001011

希望你更清楚。

关于c - 解释C代码指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749722/

相关文章:

microcontroller - 微 Controller 中的堆栈内存分配

microcontroller - 寻找超低功耗微 Controller 选项

在函数内部更改指针不会反射(reflect)在函数外部

c++ - 列出目标文件中 undefined reference

embedded - 以 block (1024 字节)删除闪存

migration - 寻找带 AES 的 MCU。从 STM32F107 迁移

linux - 在 Raspberry Pi 上收集应用程序跟踪

c - '#type' 在 Haskell 外部函数接口(interface)中意味着什么?

c - 在 llvm 链接 *.a 和 *.o 文件时出错

c - 在屏幕上打印特定的数字字符串