Простые переключатели

Простейшим из возможных устройств ввода является кнопка, при нажатии которой включается короткая логическая цепь или обнуляется один разряд. Соединение кнопки о микропроцессором показано на рис. 8.24. Если кнопка не нажата, то потенциал на выходе этого простейшего УВВ высокий благодаря наличию резистора, находящегося под высоким потенциалом. Кнопка — это однополюсный однопозиционный переключатель.

Кнопочный переключатель легко подсоединить к микро-ЭВМ. В качестве интерфейса нужен, только адресуемый буфер с тремя состояниями (рис. 8.24). Фиксатор сигнала не нужен, так как изменение положения кнопки происходит (о точки зрения быстродействия ЭВМ) очень медленно.

Можно легко определить, в каком положении находится кнопка* Центральный процессор читает содержимое буфера, т. е. передает это содержимое через шину данных в процессор. Затем выполняется команда логического умножения (AND) над данными и маской, содержащей 1 в разряде, соответствующем линии шины данных, с которой соединена кнопка. Если этот разряд содержит 0,то кнопка нажата. Если кнопка соединена с младшим или старшим разрядом шины данных, то с помощью команды сдвига можно содержимое этого разряда поместить в триггер «перенос» (CARRY) и команда AND не понадобится. Если доступно значение знакового бита (SIGN), то его также можно использовать для определения положения кнопки.

Единственная проблема при использовании кнопочного переключателя состоит в том, что замыкание о помощью механического переключателя не обеспечивает четкого фронта сигнала. Напряж^й няется, т. е. цепь нерегулярно замыкается и размыкается до тех пор, пока не установится надежный контакт. Длительность этого периода зависит от конкретного переключателя, но обычно не превышает 2 мс. Нестабильность сигнала можно устранять («демпфировать») двумя способами:

1) программным. Когда ЦП обнаружит контакт, то программа выполняет специальный цикл задержки в течение времени, достаточного для прекращения скачков напряжения. Задержку можно осуществить с помощью программы, изображенной на рис. 8.5, или предоставляя процессору возможность выполнять другую работу в течение требуемого времени;

2) аппаратным (с использованием одновибратора). Длительность импульса одновибратора должна превосходить период нестабильности, чтобы выходной сигнал представлял собой одиночный импульс.

Определить, изменилось ли положение кнопки, просто, если воспользоваться командой ИСКЛЮЧАЮЩЕЕ ИЛИ. Это выполняется следующим образом:

Шаг 1. Запомнить старое состояние кнопки.

Шаг 2. Прочитать новое состояние кнопки и выполнить команду ИСКЛЮЧАЮЩЕЕ ИЛИ с аргументами «новое состояние» и «старое состояние».

Шаг 3. Если результат не равен 0, то положение кнопки изменилось.

С помощью команды ИСКЛЮЧАЮЩЕЕ ИЛИ можно также идентифицировать событие, состоящее в том, чтс^ нажата хотя бы одна из нескольких кнопок, подсоединенных к одному порту ввода. Результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ, вторым аргументом которой является слово, состоящее из одних единиц, равен нулю, если не была нажата ни одна кнопка.

Обычный однополюсный двухпозиционный переключатель устроен немного сложнее. Он имеет общий вывод (common lead) и выводы NO (нормально открыт — normal open), NC (нормально закрыт — nor n al closed). Этот переключатель может быть присоединен к процессору через буфер с тремя состояниями. Механические переключатели такого типа можно демпфировать с помощью одновибратора, двух схем И—НЕ (рис. 8.25) или программным способом. Перекрестно соединенные схемы И—НЕ работают следующим образом. Если переключатель замкнут, то заземлен вывод NC, а поэтому на выходе первой схемы И—НЕ — высокий потенциал (так как на одном из ее входов имеется низкий потенциал). Вывод N0 имеет высокий потенциал, поэтому на выходе второй схемы И—НЕ — низкий потенциал (оба ее входа имеют высокий потенциал). Если переключатель разомкнут, то N0 заземлен и на выходе второй схемы устанавливается высокий потенциал, на выходе первой— низкий. В промежуточных (нестабильных) состояниях, когда как NC, так и N0 имеют высокий потенциал, потенциал на выходе схемы не меняется.

Предположим, что программа должна обнаружить изменение положения переключателя. В данном случае снова можно воспользоваться командой ИСКЛЮЧАЮЩЕЕ ИЛИ. В результате ее применения к аргументам «старое состояние» и «новое состояние» изменится содержимое; битов, соответствующих переключателям, изменившим свое положение.