Логический элемент НЕ на микроконтроллере PIC16F628A

Техническое задание.

Собрать на микроконтроллере PIC16F628A аналог логического элемента «НЕ».

Схема логического элемента.

Схема и таблица истинности логического элемента «НЕ» изображены на рисунке 1.

Рисунок 1. Логический элемент «НЕ» и его таблица истинности.

Здесь видно, что логика работы аналогична элементу повторителя, но с инверсией выходного сигнала. Т.е., там, где повторитель должен был выдать нам 1, элемент «НЕ» даст 0 и наоборот (логическое отрицание).

Эквивалентная схема на PIC-контроллере.

Эквивалентная схема у нас остаётся та же самая, что и в предыдущем примере (повторитель), поскольку количество задействованных выводов у нас не меняется (рис. 2).

 Рисунок 2. Эквивалентная схема логического элемента "НЕ" на микроконтроллере PIC16F628A.

Вывод RA0 будет работать на вход, RB0 – на выход. D8(A) – источник сигнала логической единицы. DSW1 – многоконтактный переключатель (пока используется только один контакт). Светодиод D8 просто сигнализирует о наличии напряжения на источнике сигнала, и в принципе в нашем случае не важен (может не ставиться).

Резистор R1 выполняет роль подтягивающего. В устройствах с высокоомным входом при снятии сигнала логической единицы (сброс в ноль) на выводе может на какое-то время сохраняться остаточный заряд, который будет восприниматься устройством как логическая единица. Резистор, соединяющий вывод с корпусом отводит от него остаточный заряд, как бы подтягивая его к корпусу. По видимому, отсюда о пошло название – подтягивающий.

Светодиод D1 выполняет роль индикатора логической единицы на выходе элемента. На выходе единица – диод горит, ноль – не светится.

Алгоритм работы элемента.

Поскольку мы уже заметили, что логика работы элемента «НЕ» аналогична повторителю, алгоритмы будут так же похожи, но принципиальные отличия всё же имеются (рисунок 3).

 Рисунок 3. Алгоритм программы микроконтроллера.

Если сравнить этот алгоритм с предыдущим примером, то можно заметить, что здесь у нас всего лишь поменялись местами инструкции: устанавливающая в единицу и сбрасывающая в ноль выход элемента (BSF и BCF).

Программный код.

В программном коде изменения по сравнению с примером «повторителя» аналогичны алгоритму. Инструкции BCF   PORTB,0 и BSF   PORTB,0 поменялись местами:

PPROG1      BTFSC       PORTA,0     ; Если бит 0 регистра PORTA =0,

                                                    ; пропускается следующая операция

                   BCF          PORTB,0     ; Сбросить бит 0 регистра

                                                     ; PORTB в 0 (погасить диод).

                   BTFSS       PORTA,0      ; Если бит 0 регистра PORTA =1,

                                                     ; пропускается следующая операция

                    BSF          PORTB,0      ; Установить бит 0 регистра PORTB

                                                      ; в 1 (зажечь диод).

                    GOTO      PPROG1       ; Переходим к началу проверки

                                                      ; состояния входа и установки

                                                      ; соответствующего уровня выхода.

Скачать оригинальный файл кода на ассемблере можно по ссылке Logic_ne.asm.

Прошивка микроконтроллера.

Компилируем полученный код и проверяем в программе симуляторе, или, прошиваем микроконтроллер, собираем схему и проверяем в реале. Всё работает.

Файл прошивки можно скачать здесь.

Архив файлов примера качайте тут.