我有关于屏蔽和位移的问题。
我有以下代码:
void WriteLCD(unsigned char word, unsigned commandType, unsigned usDelay)
{
// Most Significant Bits
// Need to do bit masking for upper nibble, and shift left by 8.
LCD_D = (LCD & 0x0FFF) | (word << 8);
EnableLCD(commandType, usDelay); // Send Data
// Least Significant Bits
// Need to do bit masking for lower nibble, and shift left by 12.
LCD_D = (LCD & 0x0FFF) | (word << 12);
EnableLCD(commandType, usDelay); // Send Data
}
“字”为8位,正在通过4位LCD接口。这意味着在发送数据之前,我必须将最高有效位和最低有效位分开。
LCD_D是一个16位数字,其中只有我传递给它的最高位我想要实际“做”某事。我希望保留之前的12位,以防它们正在做其他事情。
我的逻辑在位掩码和移位“字”方面是否正确地将上部和下部半字节正确地传递给LCD_D?
感谢您的帮助!
答案 0 :(得分:1)
在两种情况下,除了需要在移位之前将“字”转换为无符号短(16位)之外,看起来还不错,因此不会对char执行移位并丢失数据。例如:
LCD_D = (LCD & 0x0FFF) | ((unsigned short) word << 8);