2. Ожидание требуемого времени установления, около 20 мкс.
3. Запуск преобразования установкой бита GO/DONE.
4. Ожидание завершения преобразования (сброса бита
5. Чтение регистров результата ADRES.
6. Переход к этапу 1 или 2 для выполнения следующего преобразования (зависит от программы).
Предположим в качестве примера, что нам необходимо поочередно считывать каждый из восьми аналоговых каналов микроконтроллера PIC16F874/7, выводя старшие восемь битов результата в порт В, а номер канала — в младшие три бита порта D. Частота основного резонатора составляет 20 МГц, в качестве опорного напряжения используется напряжение питания микроконтроллера.
Код, приведенный в Программе 14.1, предполагает, что после сброса модуль АЦП был сконфигурирован следующим образом:
Переключаемся в 1-й банк
Все разделяемые линии порта А — аналоговые
include "p16f877a.
bsf STATUS,RP0; Переключаемся а 1-й банк
clrf ADCON1; Все разделяемые линии порта А — аналоговые
clrf TRISB; Все выводы порта В — выходы
movlw b’11111000’; Младшие 3 бита порта D — выходы
movwf TRISD
bcf STATUS,RP0; Возвращаемся в 0-й банк
movlw b’10000001’; fosc/32 (10), СН0 (000)
movwf ADCON0; Не запускать преобразование (0), включить АЦП (1)
В данном случае разрешается использование всех восьми аналоговых каналов с внутренним ИОН, результат преобразования выравнивается полевому краю. Регистр ADCON1 инициализируется значением
Рис. 14.14.
Основная программа, код которой приведен в Программе 14.1, постоянно крутится в бесконечном цикле. В каждом проходе этого цикла из ADRESH считывается оцифрованный результат преобразования очередного канала и копируется в регистр данных порта В. Перед оцифровкой значение счетчика каналов CHANNEL выдается в порт D в качестве числа по модулю 3.