Формирование временных задержек с помощью таймеров

Борьба с дребезгом контактов

Для борьбы:

1. аппаратный метод − используются RS − триггеры или триггер Шмидта

2. программный метод:

а) подсчитывается число переключений контакта.

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

б) программная задержка: когда программа обнаружила срабатывание контакта, выполнение ее приостанавливается на время, большее времени дребезга.

WAIT_L: IN IPORT

ANI 0000 0010B

JNZ WAIT_L ; цикл, если D1 = 1

CALL DELAY ; подпрограмма задержки на tзд

RET

Виды управляющих сигналов:

1] Статические

VKL: MVI A, 01H

OUT OPORT ; вывод D0 = 1

OTKL: MVI A, 00H

OUT OPORT ; вывод D0 = 0

OTKL: XRA A ; сброс (А)

OUT OPORT ; вывод D0 = 0

2] Формирование импульсных управляющих сигналов

XRA A

OUT OPORT ; вывод D1 = 0

MVI A, 02H

OUT OPORT ; вывод D1 = 1

CALL DELAY ; задержка на tИ

XRA A

OUT OPORT ; вывод D1 = 0

Формирование временных задержек

CALL DELAY ; вызов подпрограммы задержки

DELAY: MVI B, X ; загрузка в регистр В числа Х

LOOP: DCR B ; декремент В

JNZ LOOP ; цикл, если (В)=0

RET ; возврат в основную программу, если (В)=0

Для получения требуемой временной задержки необходимо опреде­лить значение числа Х, загружаемого в регистр-счетчик В. При этом необходимо учитывать, что ко­манды MVI B, X и RET выполняются однократно, а число повторений ко­манд DCR B и JNZ LOOP равно числу Х, загружаемому в регистр В.

Можно записать длительность выполнения команд:

CALL DELAY - 17 тактов

MVI B, X - 7 тактов

DCR В - 5 тактов

JNZ LOOP - 10 тактов

RЕТ - 10 тактов

Время выполнения любой команды подсчитывается по формуле: t = n *T,

где n - число машинных тактов в команде;

Т - длительность машинного такта.

Длительность машинного такта определяется частотой fт тактового генератора микропроцессорной системы:

Т=1/fт

Величина Х может быть вычислена по формуле:

X=(tз-to)/tц,

где tз - заданная величина задержки;

tо - время, требуемое для однократно выполняемых команд;

tц - время цикла, требуемое для выполнения циклически повторяе­мых команд.

Формирование временных задержек с помощью таймеров

Методы формирования временной задержки с программным опросом флага переполнения таймера. Допустим, что надо сформировать импульс низкого уровня длительностью 10 мс на выводе P1.7 микроконтроллера. Тактовая частота работы fCLK = 12 МГц. Для формирования задержки используем таймер T/C0 в режиме 1. Число, которое необходимо загрузить в таймер при его инициализации:

65536 – 10000 = 55536 = D8F0H.

Программа формирования импульса может иметь вид:

ORG 0000H

TIMER_1: MOV TMOD, #01H ; Режим 1 для T/C0

MOV TH0, #0D8H ; Загрузить старший байт

MOV TL0, #0F0H ; Загрузить младший байт

CLR P1.7 ; Вывод P1.7 0

SETB TR0 ; Запустить таймер

COUNT: JNB TF0, COUNT ; Ожидание переполнения

; таймера 393

SETB P1.7 ; Вывод P1.7 1

CLR TR0 ; Остановить таймер

STOP: JMP STOP ; Зацикливание программы

END

Необходимо сформировать импульс на выводе P1.7 длительностью 2 с. Будем полагать, что таймер обеспечивает задержку на 50 мс. Для получения задержки на 2 с необходимо 40 раз запускать и останавливать таймер. Для получения задержки на 50 мс надо первоначально загрузить в таймер число 65536 – 50000 = 15536 = 03B0H.

Программа формирования импульса в этом случае имеет вид:

ORG 0000H

TIMER_2: MOV TMOD, #01H ; Режим 1 для T/C0

MOV R7, #40 ; Загрузить счетчик

; переполнений таймера

CLR P1.7 ; Вывод P1.7 0

AGAIN: MOV TH0, #03H ; Загрузить старший байт

MOV TL0, #0B0H ; Загрузить младший байт

SETB TR0 ; Запустить таймер

COUNT: JNB TF0, COUNT ; Ожидание переполнения

; таймера

CLR TR0 ; Остановить таймер

CLR TF0 ; Сбросить флаг

;переполнения таймера

DJNZ R7, AGAIN ; Повторить цикл 40 раз

SETB P1.7 ; Вывести P1.7 1

STOP: JMP STOP ; Зацикливание программы

END

ВИДЫ КЛАВИАТУР

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

Кодирующие клавиатуры.

Каждой кнопке(контакту переключателя) соответствует определённый вход порта ввода, узнать положение клавиши можно, опрашивая вход порта.

Галетный переключатель:

Кнопочный переключатель:

Подключение переключателей к порту ввода:

При опросе порта ввода от переключателя поступает унитарный код, т.е код в котором только один 0, положение которого определяется номером замкнутого контакта.

Унитарный код неудобен для использования в программах, поэтому его необходимо преобразовать в позиционный.

Преобразование унитарного кода в позиционный возможно двумя методами:

1. табличный метод

2. метод сдвигов унитарного кода

Табличный метод.

Основан на том, что в ПЗУ имеется таблица кодов: каждому унитарному коду соответствует позиционный. Для идентификации нажатой клавиши используется программа:

IN IPORT

CMA

CPI MASK

JZ EXIT

Наши рекомендации