0

マスキングとビットシフトの両方について質問があります。

次のコードがあります。

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 に適切に渡すという点で、ビット マスキングと「ワード」のシフトに関する私のロジックは正しいですか?

助けてくれてありがとう!

4

1 に答える 1

1

どちらの場合も、シフトの前に「ワード」を unsigned short (16 ビット) にキャストする必要があることを除けば、問題ないように見えます。そのため、シフトは char に対して実行されず、データが失われます。例えば:

LCD_D = (LCD & 0x0FFF) | ((unsigned short) word << 8);
于 2013-02-12T08:38:15.433 に答える