To, co jsi napsal sice funguje, ale přehazuješ LEDky v hlavním programu a ne v přerušení. Přerušení znamená, že program, který běží v mcu “všeho nechá” a zareaguje na nějaký podnět, který rychle zpracuje a pak pokračuje dál.
Jak funguje přerušení :
Představ si, že jsi mcu a provádíš program (například řežeš dříví), v tom někdo zazvoní u dveří - Ty přestaneš řezat a jdeš se podívat, kdo zazvonil. Pak se vrátíš a pokračuješ v řezání. Takhle nějak vypadá přerušení. To, že odejdeš ke dveřím, vyřídí potřebné a vrátíš se zpět, tomu se říká obsluha přerušení. Přerušení se dále dělí na externí a interní. Tohle byl příklad externího přerušení (podnět přišel z vnějšku mcu na pin pro externí přerušení - v tomhle případě je ten pin pro externí přerušení Tvoje ucho). Interní přerušení by bylo, že řežeš dřevo a chce se Ti na záchod - postup je stejný - přestaneš řezat, odskočíš si (obsloužíš přerušení) a vrátíš se k řezání. To je interní přerušení vzniklé uvnitř mcu.
Já bych tedy zadání pochopil tak, že máš mcu a nějaký oscilátor. Výstup tohoto oscilátoru přivedeš na nožičku externího přerušení mcu a programově ho obsloužíš.
smyčka hlavního programu
.
.
.
tady v nějakým intervalu pravidelně zhasínáš LEDky
(to aby nezůstaly trvale rozsvícené, to bys pak nepoznal,
jestli ti to funguje).
.
.
.
skok na smyčku hlavního programu
rutina pro obsluhu externího přerušení
tady rozsvítíš LEDky (záměrně nepíšu ty tečky,
protože každá obsluha přerušení by měla být co možná nejkratší)
návrat
Druhá varianta:
smyčka hlavního programu
tady neděláš nic
skok na smyčku hlavního programu
rutina pro obsluhu externího přerušení
Tady měníš stav LEDky nebo LEDek.
návrat
Interní přerušení je třeba přerušení od časovače, sériového portu mcu, AD převodníku apod.
Priorita přerušení znamená, že je předem dáno, které přerušení se obslouží dříve v případě, že přijdou dvě (nebo víc) najednou. Například - přijde přerušení od časovače - skočíš na jeho obsluhu. Při obsluze přerušení jsou vždy přerušení zakázány. Mezitím přijde přerušení od AD převodníku a třeba od externího pinu. Po ukončení přerušení mcu zkontroluje příznaky a podle priority přerušení začne postupně obsluhovat všechny podněty. Pak se vrátí k hlavnímu programu.
Snad jsem Ti dokázal aspoň trošku přiblížit, jak obsluha přerušení v mcu funguje.
Ve Tvým případě by bylo asi optimální řešení pomocí druhé varianty. Uděláš si inicializaci portů a hlavní smyčku necháš prázdnou. V obsluze přerušení si zjistíš, jaký je stav portu, podle toho nastavíš následující stav a ukončíš přerušení.