ВУЗ:
Составители:
165
флагом нажатия на кнопку и флагом удержания кнопки. Кроме этого, подпро-
грамма использует некоторую байтовую константу, назовем ее порогом подав-
ления «дребезга». Как видно из блок-схемы, при каждом вызове подпрограммы
при условии, что кнопка не нажата, регистр накопления будет обнуляться, а
флаг удержания будет сбрасываться, то есть будет происходить постоянная ус-
тановка цифрового программного фильтра «дребезга» в начальное состояние.
Вызовы подпрограммы должны происходить циклически, для чего следует по-
местить инструкцию вызова либо в основной цикл управляющей программы
микроконтроллера, либо, что более предпочтительно, в блок обработки перио-
дических прерываний от какого-нибудь системного таймера. Когда кнопку на-
жимают, то при каждом вызове подпрограммы регистр накопления начинает
инкрементироваться, причем содержимое регистра начнет реально увеличи-
ваться только после окончания «дребезга», когда регистр перестанет сбрасы-
ваться из-за пауз между импульсами «дребезга». Когда процесс инкрементиро-
вания приобретет устойчивый характер, то через некоторое число вызовов под-
программы содержимое регистра накопления станет равным порогу подавления
«дребезга» и произойдет установка флагов нажатия и удержания кнопки. Флаг
удержания будет оставаться в единичном состоянии столько времени, сколько
удерживается кнопка, и сбросится при первом же импульсе «дребезга» в мо-
мент отпускания кнопки. Этот флаг можно использовать в целевой программе,
например, для реализации каких-то дополнительных функций данной кнопки в
пользовательском интерфейсе разрабатываемого устройства.
Флаг нажатия подпрограммой не сбрасывается. Его сброс возлагается на
тот фрагмент пользовательской программы, который опрашивает состояние
этого флага, т. е. реализует обработку обнаружения нажатия на данную кнопку.
Подбирая значение константы порога подавления «дребезга» в своей про-
грамме, пользователь может, во-первых, настраивать интерфейс под конкрет-
ный тип кнопок, во-вторых, под конкретную периодичность вызовов подпро-
грамм обслуживания кнопок и, наконец, устанавливать требуемое время реак-
ции своего интерфейса на нажатия кнопок. С учетом этих соображений значе-
ние константы подавления «дребезга» может лежать в диапазоне от нескольких
единиц до нескольких десятков.
Исходные тексты подпрограмм, написанных на ассемблере Metalink 8051
и реализующих описанный выше алгоритм обслуживания кнопок, содержатся в
файле knop.asm. Этот файл в дальнейшем будет указываться как подключаемый
в исходных текстах пользовательских программ для ADuC824, о которых будет
рассказано в следующих главах. В файле содержатся подпрограммы обслужи-
вания шести кнопок, каждая из которых подключена к отдельной линии ввода-
вывода микроконвертора, предварительно сконфигурированной как вход. Эти
линии в подпрограммах имеют имена _IN_KNOP0 – _IN_KNOP5. Для оптими-
зации кода каждая ветвь управления в подпрограммах Pod_OPR_KNOP0 –
Pod_OPR_KNOP5 реализована подпрограммами более низкого уровня вложен-
ности вызова, одинаковыми для всех кнопок: Pod_NNAG_KNOP – последова-
Страницы
- « первая
- ‹ предыдущая
- …
- 163
- 164
- 165
- 166
- 167
- …
- следующая ›
- последняя »
