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.