Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПС2 Проектирование аппаратного и программного...doc
Скачиваний:
5
Добавлен:
26.09.2019
Размер:
2.77 Mб
Скачать

4. Модуль "Ввод режимов" (ModeInput)

Этот модуль обеспечивает ввод информации о состоянии управляющих переключателей: "Режим" ("Ввод"/"Просмотр"), "Тип ввода" ("Адрес"/"Данные") и "Адрес" ("+1"/"1") , определяющих порядок функционирования устройства.

Для уменьшения аппаратных затрат эта информация должна вводиться через один порт в упакованной форме. Для удобства ее использования упакованный формат должен распаковываться, и состояние каждого переключателя представляться отдельным флаговым байтом (см. рис. 3.24). Эта идея реализована в ГСА модуля ModeInput, приведенной на рис. 3.29,а.

Управляющие переключатели являются электромеханическими переключателями (кнопками и тумблером). При переключении всем им присуще явление дребезга (вибрации) контактов. Это явление заключается в том, что электрически переключение фиксируется не одновременно с механическим переключением, а после некоторого колебательного процесса, обусловленного упругостью контакта. На рис. 3.29,б приведена временная диаграмма установления электрического выходного сигнала при механическом переключении кнопки.

Рис. 3.27. Алгоритм модуля "Тестовый контроль ОЗУ по ША"

Рис. 3.28. Алгоритм модуля "Вывод сообщений об ошибках"

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

Рис. 3.29. Алгоритм модуля "Ввод режимов":

а) общий алгоритм; б) эффект дребезга контактов;

в) алгоритм гашения дребезга контактов

Для гашения дребезга контактов могут использоваться аппаратные средства. Однако в МПС это целесообразно делать программным путем. Суть программного гашения дребезга состоит в обнаружении факта многократного считывания одного и того же значения входного кода. На практике считают, что, если 50 раз подряд считывается один и тот же входной код, то дребезг контактов закончился, и выходной сигнал переключателя несет достоверную информацию. Гашение дребезга контактов, как правило, контактов необходимо и при включении, и при выключении кнопки, а выход из программного модуля считывания информации с переключателей при отсутствии особых требований должен осуществляться лишь после действительного механического освобождения кнопки.

Исходя из этого, в представленном алгоритме ввода режимов (см. рис. 3.29,а) осуществляется гашение дребезга контактов. Поскольку среди управляющих переключателей имеется тумблер, то гашение дребезга выполняется при любом обращении к ним. ГСА подпрограммы гашения дребезга контактов VibrDestr, реализующая изложенную идею, приведена на рис. 3.29,в.

В ней выполняется многократное сравнение запомненного исходного состояния переключателей с текущим состоянием, получаемым в результате циклического считывания. При каждом совпадении этих состояний инкрементируется счетчик повторений, а при несовпадении процесс начинается сначала. В случае, если в счетчике повторений накапливается число, равное установленному порогу, то фиксируется конец дребезга контактов.

Для упрощения реализации модуля ModeInput флаговые байты режимов Mode, AddrInc и AddrDec сначала устанавливаются в некоторое значение, которое затем при необходимости корректируется. Флаг типа ввода InType в режиме "Ввод" изменяет свое значение только по сигналам с кнопок "Тип ввода" ("Адрес"/"Данные"). При отсутствии этих сигналов тип ввода не изменяется.

В режиме "Просмотр" с клавиатуры может вводиться только адрес. Поэтому в нем флаг типа ввода InType принудительно устанавливается в положение "Адрес" независимо от состояния переключателей "Тип ввода".

Далее анализируются значения переключателей модификации адреса на значения "+1", "1" и устанавливаются соответствующие флаговые байты. После этого осуществляется выход из модуля.

Очевидно, что при таком построении алгоритма возможен выход из модуля до механического отпускания кнопок. В связи с этим за счет цикличности программы при однократном включении некоторой кнопки будет многократно обнаружено ее активное значение. Без принятия дополнительных мер это вызовет многократную модификацию адреса, что недопустимо. Для исключения подобного явления флаги модификации адреса AddrInc и AddrDec устанавливаются лишь при первом появлении, т. е. по переднему фронту (ПФ) сигналов "+1", "1".