Дешифратор — логическое элемент, которое преобразует цифровой код двоичной системе счисления на входе в определенной сигнал на выходе. Можно реализовать как в цифровом виде с помощью программирования, так и на транзисторно-транзисторной логике (ТТЛ). Дешифратор не имеет определенной схемы, потому что имеет 2 важных параметра:
- Битовая длина — это ширина линии цифрового сигнала, который подключается к входам дешифратора.
- Кол-во выходов. Каждый схемотехник или программист сам решает какое количество и какие выводы ему нужны.
Дешифратор является незаменимым элементом в цифровой и аналоговой схемотехники. Например, он используется электронных устройствах для выбора команды или доступа к ячейкам памяти, в модуляторах и демодуляторах, в системах управления для контролирования датчиков через управляющие сигналы.
Принцип работы Дешифратора
На вход дешифратору подается цифровой код в двоичной системе счисления, который сравнивается внутри с помощью программы и ТТЛ, и если результат совпал с закладываемым значением, то выводит на определенном выходе высокий уровень. Высокий уровень сигнала означает:
- Если схема на ТТЛ, то высокое рабочее напряжение, которое схемотехник закладывал в схему.
- Если это цифровая схема, то на выходе появляется логическая единица «1».
Рассмотрим 16-битный дешифратор, цифровая схема которого построенная отображена на рисунке 1.

Однако, в таком виде никогда не применяются ни в аналоговой, ни в цифровой схемотехнике. Разработчика имеется необходимость проверять лишь совпадение с несколькими числами, а не всеми. В качестве 2-го примера рассмотри дешифратор, проверяющий значение 8, 13. У данного логического элемента 4 входных порта и 2 выходных. Условное графическое обозначение(УГО), схема на ТТЛ и RTL показано на рисунке 2.

Пример Дешифратора на Verilog
module decoder16(out8, out13, data0, data1, data2, data3);
input data0, data1, data2, data3;
output out8, out13;
assign out8 = data3 & ~data2 & ~data1 & ~data0,
out13 = data3 & data2 & ~data1 & data0;
endmodule
Пример Дешифратора на C++
Для написания 16-битного дешифратора для микроконтроллера AVR, который обрабатывает входной двоичный код, получаемый с четырех входов, и подает высокий сигнал на выходы в случае, если код равен 6, 10 или 13, вам понадобится создать соответствующую логику обработки данных.
Вам придется подключить к пинам микроконтроллера ваши входы и выходы, а затем использовать сочетания операций чтения входных данных и управления выходами в зависимости от условий равенства входного двоичного кода заданным значениям.
#include <avr/io.h>
void setup() {
// Настройка портов ввода-вывода
DDRD = 0b00000000; // Назначение D0-D3 для входа
DDRB = 0b00100000; // Установка B5 как выход
DDRB = DDRB | 0b00010000; // Установка B4 как выход
DDRD = DDRD | 0b00010000; // Установка D4 как выход
}
void decoder(uint8_t input) {
if(input == 6 || input == 10 || input == 13) {
if(input == 6) PORTB |= 0b00100000; // Установка высокого сигнала на B5
if(input == 10) PORTB |= 0b00010000; // Установка высокого сигнала на B4
if(input == 13) PORTD |= 0b00010000; // Установка высокого сигнала на D4
} else {
// Сброс выходов
PORTB &= 0b11011111;
PORTB &= 0b11101111;
PORTD &= 0b11101111;
}
}
int main() {
setup();
// Считываем данные с четырех входов и формируем двоичный код
uint8_t input_code = PINA & 0b00001111;
// Применяем дешифратор
decoder(input_code);
return 0;
}