Цитата(Nikitoc @ Aug 22 2011, 13:19)

Спасибо всем за ответы. Прокомментируйте, пожалуйста, следующий вариант обработки нажатия кнопки: по нажатию на кнопку устанавливаем в обработчике флаг соотв. кнопки и запускаем таймер (и выходим из прерывания), по прерыванию от которого проверяем состояние кнопки (чей флаг предварительно был установлен) и устанавливаем флаг нажатия кнопок, который (в паре с флагом соотв. кнопки) обрабатываем в основной программе.
P.S. Учитывая пост Sserge добавляем запрещение соотв. прерывания в первом обработчике и разрешение во втором.
Возможно, заработает. Возможно, будет даже немного лучше чем вообще без антидребезга. Возможно...
По хорошему алгоритм в следующем:
Опрос кнопки в прерывании от таймера, раз в 0.5-5мс
Счетчик - от 0 до N, где N задает время антидребезга (порядка 10-200мс)
Буфер - состояние кнопки после антидребезга.
1. Если кнопка нажата и счетчик меньше максимума - прибавляем счетчик
2. Если кнопка отжата и счетчик больше нуля - убавляем счетчик
3. Если счетчик в максимуме, устанавливаем буфер в '1'
4. Если счетчик в нуле, устанавливаем буфер в '0'
5. По переходу буфера '0' -> '1' или '1' -> '0' делаем вывод о нажатии/отжатии кнопки.