Външни прекъсвания на 8-битов avr, с помощта на бутони

Здравейте, онзи ден реших да експериментирам с външни прекъсвания на attiny2313A. Мисля, че тези, които са програмирали микроконтролери, знаят, че MK не винаги може бързо да реагира на натискане на бутон, защото. Проверката на PIN стандартно се извършва в безкраен цикъл и ако програмата е достатъчно голяма, това може да забави запитването на крака. Кодът по-долу е написан за WinAVR.

външни

Стандартна анкета:

(1 ако (!(PINB & (1 ако е обърнат), тогава ще работи за първия метод, но не мисля, че някой има нужда от него.

Така че самите външни прекъсвания

В листа с данни на Mk attiny2313Aима прекъсвания INT0 (крак PD2), INT1 (крак PD3) и PCINT0..7 (целия порт B и въпреки че има 8 крака, но има само едно прекъсване за всички, което лично мен не ме радва) Прекъсванията INT0 и INT1 имат по-висок приоритет от другите прекъсвания.

Общо можем да настроимсамо три бутона, без да използваме стандартното проучване. Имах идеята, че защото Ако използвам външни прекъсвания, тогава регистрите DDR и PORT няма да променят нищо в поведението на MK, но това не е така ... изходът също трябва да бъде конфигуриран както при стандартна обработка. Веднага ще направя резервация, че пиша за крака, конфигурирани за издърпващи резистори, т.е. DDRxy&=

(1 void preriv() //функция за инициализация на прекъсване GIMSK=(1

Проект за Win AVR, attiny2313 PORTD4 - има аноден (плюс) светодиод върху него и мига, когато бутонът на POTRD2 се затвори към маса.

За да използвате различен MK, вижте съответния лист с данни.

Hardcore conf в C++. Каним само професионалисти.