Формирование временных задержек с помощью таймеров
Борьба с дребезгом контактов
Для борьбы:
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