2013-02-12 1 views
0

마스킹과 비트 쉬프트에 관한 질문이 있습니다.4 비트 LCD 제어를위한 PIC 비트 마스킹 및 쉬프트

I가 다음 코드를 가지고

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에 상단 및 하단 니블을 적절하게 전달하는 측면에서 "단어"를 이동한다는 측면에서 논리가 맞습니까?

도움 주셔서 감사합니다.

답변

1

"word"를 부호없는 short (16 비트)로 변환하기 전에 두 가지 경우 모두에서 괜찮은 것처럼 보이며, 따라서 shift가 char에서 수행되지 않고 데이터가 손실됩니다. 예 :

LCD_D = (LCD & 0x0FFF) | ((unsigned short) word << 8); 
+0

감사합니다. 던지기는 그것을했다. –