解释C代码指令

时间:2013-04-01 18:54:51

标签: c microcontroller

以下代码用于编程微控制器。我想知道下面的代码是做什么的。我知道'|'是OR和'&'但是整条生产线在做什么?

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

5 个答案:

答案 0 :(得分:3)

由于我们不知道dat包含哪些内容,因此很难进入上下文,但我们可以看到:

  1. 数据右移4位,因此11111111变为00001111
  2. 该值与0x0F进行AND运算。这是删除不需要的位的常用技巧,因为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

  4. 希望你能更清楚。

答案 1 :(得分:1)

一些猜测,因为您可能需要找到芯片数据表来证实这一点: -

lcd_port可能是一个直接映射到memory-mapped hardware的变量 - 可能是一个字母数字LCD显示器。

显示器可能将数据作为四位“半字节”(因此移位/和操作),而端口的高四位是控制信号。

LCD_EN可能是LCD ENABLE的缩写 - 在端口上使用的控制线。

LCD_RS可能是LCD READ STROBE(或LCD REGISTER SELECT)的缩写 - 端口上使用的另一个控制线。写入端口时设置这些位可能会告诉端口要执行的操作类型。

如果使用的硬件是Hitachi HD44780或某种衍生产品,我不会感到惊讶。

答案 2 :(得分:0)

它似乎是在lcd_port上设置一些数据和标志。第一部分将掩码0x0F应用于(dat>> 4)(右移4),然后应用LCD_EN标志,然后应用LCD_RS标志。

答案 3 :(得分:0)

它将变量data向右移动四位,然后用值15屏蔽该值。这导致值范围为0-15(最左边的四位)。此结果是带有LCD_ENLCD_RS标志的二进制ORd。

答案 4 :(得分:0)

此代码将dat 4位向右移位,然后使用& 0x0F以确保它仅获得那4个最低有效位。然后使用OR来查找该值中存在哪些位或LCD_EN或LCD_RS并将该值分配给lcd_port。