English version

Atmel AVR pro začátečníky 2 - Přerušení a binární počítadlo

     V minulém článku o mikroprocesorech Atmel AVR jsme zatím jen blikali s LEDkami, bez možnosti nějak z venku ovlivnit dění v mikroprocesoru. Všechny vývody fungovaly pouze jako výstupy, nebyl žádný vstup. Nyní si ukážeme, jak k mikroprocesoru připojit ovládací tlačítka a využít vývody INTO a INT1 jako vstupy. K předvedení jsem vybral obvod ATmega8 (Lze použít i novější Atmega8A). Tlačítka jsou připojena na vývody 4 a 5, což jsou bity 3 a 4 portu D, ale mají i alternativní funkce - INT0 a INT1. Právě tyto alternativní funkce nás budou zajímat. Jedná se o vnější zdroje přerušení. Pokud jsou tato přerušení povolena, můžeme pomocí těchto vstupů vyvolat spuštění příslušné obslužné rutiny. Přerušení INT1 se povoluje nejvyšším bitem registru GICR. Přerušení INT0 se povoluje druhým nejvyšším bitem. Povolení obou přerušení tedy provedeme nastavením těchto dvou horních bitů na 1:

LDI REG,0b11000000
OUT GICR,REG

Dále musíme zvolit, na co budou vstupy reagovat. To se dělá pomocí registru MCUCR. Citlivost INT0 se volí kombinací dvou bitů - ISC01 a ISC00. Citlivost INT1 se volí bity ISC10 a ISC11. V našem příkladě chceme citlivost na sestupnou hranu, a proto obě dvojice nastavíme na 1 0. To provedeme takto:

LDI REG,0b00001010
OUT MCUCR,REG

     Rozmístění bitů v registrech GICR a MCUCR zobrazuje tabulka:

     Význam dvojic bitů ISC01 a ISC00 nebo ISC10 a ISC11 registru MCUCR nastavujících citlivost přerušení:
0 0 ... přerušení při log 0
0 1 ... přerušení jakoukoliv změnou
1 0 ... přerušení sestupnou hranou
1 1 ... přerušení náběžnou hranou

Stisknutí tlačítka nyní vyvolá spuštění příslušné obslužné rutiny. V našem příkladě se jedná o inkrementaci/dekrementaci pracovního registru REG a následné poslání na výstup, kterým je zde port C - přesněji jeho prvních 6 bitů. Jeho stav je indikován pomocí 6 LED. Vznikne tedy binární počítadlo, které při stisku jednoho tlačítka přičte 1 a při stisku druhého tlačítka odečte 1. Schéma pokusného zapojení je uvedeno níže. Funkci názorně ukazuje video na konci stránky. Sami jistě přijdete na spousty dalších věcí, ke kterým se tlačítka dají využít :). Pokud zrovna nedochází k přerušení, provádí se smyčka (SMYCKA). V té zatím nic není, ale můžete tam něco přidat. Program je ke stažení níže. V komentářích zdrojového kódu programu se dozvíte další užitečné informace.
     Celý program ke stažení:
Binární počítadlo s přerušením - zdrojový kód v assembleru (ASM)
Binární počítadlo s přerušením - přeložený v HEX souboru


Schéma zapojení ATmega8 pro pokusy s přerušeními. Umožňuje programování i testování.


Pokusný obvod v kontaktním poli.


Video - názorná ukázka funkce.


Upozornění pro lamy
Pozor! nesprávným zapojením si můžete poškodit mikroprocesor, LPT port nebo celý PC.



Minulý článek - Světelní hadi a Vzdušný displej
zpět na úvodní stránku