Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по АТ89С51 изд.вариант 2010-54.doc
Скачиваний:
86
Добавлен:
19.11.2019
Размер:
865.22 Кб
Скачать
      1. Устранение дребезга контактов

Рисунок 4.4 – Переходные процессы при дребезге контактов

Рисунок 4.5 – Схема подавления дребезга контактов

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

Наибольшее распространение получили два программных способа ожидания установившегося значения:

1) подсчет заданного числа последовательно совпадающих значений сигнала;

2) временная задержка.

Блок-схемы процедур подавления помех от дребезга контактов при вводе сигнала логического 0 показаны на рисунке 4.6.

В первом способе число N подбирается экспериментально для каждого типа используемых датчиков в зависимости от частоты кварцевого резонатора МК и лежит, как правило, в пределах от 5 до 50.

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

а) путем многократного считывания; б) с использованием временной задержки

Рисунок 4.6 – Блок-схемы процедур подавления дребезга контактов

Примеры программ устранения дребезга контактов первым и вторым способом приведены в листингах 4.6, 4.7 соответственно.

Листинг 4.6 – Программа устранения дребезга контактов путем многократного считывания

; Пример программного подавления дребезга контакта приводится

; для случая, когда датчик импульсного сигнала подключен к входу

; Р3.4 (Т0), счет «удачных» опросов ведется в регистре RЗ, N=20.

; При замыкании на вход Р3.4 поступает логический 0.

.ORG 0000H

; Адрес начала программы

SETB P3.4

; Настройка разряда 4

; порта P3 на ввод сигнала

BEGIN:

NEXT:

MOV R3, #20

JB P3.4, BEGIN

DJNZ R3, NEXT

; Инициализация счетчика

; Если контакт разомкнут,

; (Р3.4=«1»), то переход к

; инициализации счётчика

; Иначе декремент

; счётчика и проверка его

; на равенство нулю. Если

; R3=0, то выход из цикла,

; иначе – переход на опрос

; разряда порта

; Подпрограмма обработки

; нажатия кнопки

JMP BEGIN

;Переход на начало

; программы

Листинг 4.7 – Программа устранения дребезга контактов путем введения временной задержки

; Программа написана для случая подключения датчика к входу Т0.

; Временная задержка реализуется подпрограммой DELAY.

; Длительность временной задержки определяется числом,

; загружаемым в регистры R1:R0.

; При замыкании на вход Т0 поступает логический 0.

.ORG 0000H

; Адрес начала программы

SETB T0

; Настройка разряда 4

; порта P3 на ввод сигнала

BEGIN:

JB T0, $

CALL DELAY

; Ожидание замыкания

; контактов

; Вызов процедуры,

; реализующей временную

; задержку

JB T0, BEGIN

; Повторная проверка

; замыкания контактов

; после паузы. Если нет

; замыкания, то на начало

; Подпрограмма обработки

; нажатия кнопки

JMP BEGIN

; Переход на начало

; программы

; Процедура временной задержки

DELAY:

PUSH 0

PUSH 1

MOV R1, #7Fh

; Сохранение в стеке

; регистров R0 и R1

; Загрузка старшего байта

WAIT:

MOV R0, #FFh

DJNZ R0, $

DJNZ R1, WAIT

POP 1

POP 0

; Загрузка младшего байта

; счетчика R1:R0

; Декрементирование

; младшего байта счётчика

; и переход на эту же

; команду, если R00

; Декрементирование

; старшего байта счётчика

; и переход на метку WAIT,

; если R10

; Восстановление из стека

; регистра R0

; Восстановление из стека

; регистра R1

RET

; Выход из процедуры