У меня есть вопрос относительно маскировки и смещения битов.
У меня есть следующий код:
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_D - это 16-битное число, в котором я передаю только самые значащие биты, которые я хочу на самом деле что-то «сделать». Я хочу, чтобы предыдущие 12 бит были сохранены на случай, если они делали что-то еще.
Является ли моя логика с точки зрения маскировки битов и смещения «слова» правильной с точки зрения передачи верхнего и нижнего полубайтов соответствующим образом на LCD_D?
Спасибо за помощь!