Кнопки могут быть на любых портах, любых пинах. Макрос позволяет проверить состояние кнопки. Проверка - не чаще раза в миллисекунду. Можно отличать короткое и долгое нажатие. Антидребезг - программным счетчиком (у меня - 10 мс): событие нажатия или отпускания появляется лишь 9 мс спустя. Если кому-то критично, это легко можно переделать (чтобы событие генерировалось сразу, а следующие 10мс просто отсутствовала реакция на кнопку - у меня так было где-то в старых реализовано). Но вот если кнопка - не кнопка, а какой-нибудь экстренный концевик, то более разумным может быть его на прерывание посадить. Правда, те же шаговики я тоже без прерываний обслуживаю: просто каждые 5-10мс проверяю состояние концевиков, и если что - экстренно останавливаю.
Я на гитхабе, в ЖЖ


