Опрос клавиатуры и подавление дребезга

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Andrew

Сообщение Andrew »

Тестовая схема простецкая

процессор AT90S2313

.def Temp=R16
.def Flag=R17
.cseg
.org 0
........ сдеся вся байда по настройке прерываний на 1 сек (это усе работает)

ldi Temp,0b11111110 ;настройка портов на вывод/ввод (0)
out DDRB,Temp
ldi Temp,0b11111100 ;настройка портов на вывод/ввод (0, 1)
out DDRD,Temp
; на разряды 0 и 1 порта Д и на 0 порт Б подцеплены кнопеи на замыкание
подтягивающие резисторы на +5 естествено стоят
на вывод 1 порта Б повешан светодиод
в обработчике прерывание 1 раз в сек устанавливается и збрасывается флаг
по этому флагу в основном цикле если флаг установлен светодиод горит если сброшен
погашен (вобщем мигает с частотой 1 сек) как я говорил это усе работает

главный цикл
start:
cpi Flag,1
brne ledoff ;если флаг не 1 то гасим светодиод иначе зажигаем
ldi Temp,0b00000000 ;зажигаем светодиод
out PORTB,Temp
rjmp start
ledoff:
ldi Temp,0b00000010 ;гасим светодиод
out PORTB,Temp
rjmp start

потребовалось при нажатии на кнопку (допустим на 0 разряде порта Б)
чтоб светодиод светился постоянно вне зависимости от флага

start:
in Temp,PinB ;читаем порт
andi Temp,0b00000000 ;маскируем
cpi Temp,0 ; если нажата клавиша то зажигаем
breq ledon ; иначе как обычно в зависимости от флага

cpi Flag,1
brne ledoff ;если флаг не 1 то гасим светодиод иначе зажигаем
ledon: ldi Temp,0b00000000 ;зажигаем светодиод
out PORTB,Temp
rjmp start
ledoff:
ldi Temp,0b00000010 ;гасим светодиод
out PORTB,Temp
rjmp start

так вот после этого изменения прога не работает
на нажате клавиши ваще нет реакции

и попутно вопрос по подавлению дребезга
кто как делает (желательно алгоритм или примерчик на АСМе

Всего хорошего всем
Реклама
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Насчет дребезга.

Самый простой вариант - после первого срабатывания кнопки делаешь задержку мс на 30-40 (экспериментально подбирается, но обычно именно такую) и если после нее все еще есть срабатывание - кнопка нажата...
Есть более извращенные способы, но смысла особого я в них не вижу
(типа многократного опроса после первого срабатывания и вычисления состояния по преобладанию нулей или единиц... )
Контактная информация:
Реклама
Ответить

Вернуться в «Периферия»