Я пытаюсь написать программу, которая для микроконтроллера PIC18F252 использует АЦП для преобразования 3 аналоговых сигналов (на 3 отдельных выводах) в цифровые сигналы для использования на выходе программы. Руководство, которое я использовал, чтобы помочь мне понять АЦП, было полезным, но я борюсь с частью, где они собирают все это вместе. Вот код:
unsigned int ADC_Read(unsigned char channel)
{
ADCON0 &= 0x11000101; //Clearing the Channel Selection Bits
ADCON0 |= channel<<3; //Setting the required Bits
__delay_ms(2); //Acquisition time to charge hold capacitor
GO_nDONE = 1; //Initializes A/D Conversion
while(GO_nDONE); //Wait for A/D Conversion to complete
return ((ADRESH<<8)+ADRESL); //Returns Result
}
Затем вы можете вызвать функцию и назначить ее переменной, используя это:
i = (ADC_Read(4)); //store the result of adc in “i”
Моя проблема в том, что я изо всех сил пытаюсь понять битовую часть кода. Я понимаю, почему и как он очищает биты выбора канала, но мне трудно понять, как 'channel‹‹3', когда в этом примере канал = 4, может создать двоичное значение, которое можно объединить по ИЛИ со значением ADCON0. Кто-нибудь может объяснить, каково значение канала после запуска кода, если он начинается с 4, а также какой будет новая конфигурация ADCON0 после строки ИЛИ?
Я понимаю каждую строку по отдельности, я просто пытаюсь понять, как они соединяются, потому что это нужно делать 3 раза, каждый раз выбирая другой канал, и на данный момент я не могу сказать, какой канал это устанавливает.
0x11000101
должно быть0b11000101
- person ikegami   schedule 14.11.2019