Kompatibilní zapojení: LED panel s ATmega8

Ke stažení: LED_Tlacitko-preruseni.c == LED_Tlacitko-preruseni.pdf == LED_Tlacitko-preruseni.htm


/*
Popis:
Při stisku tlačítka se rozsvítí vybrané ledky. Po uvolnění tohoto tlačítka ledky
opět zhasnou.

Ledky které se mají rozsvěcet jsou vybrány konstantou "LED".

Tlačítka jsou připojena k portu "D" K tlačítkům jsou připojeny "pull up" rezistory
na 5 V, takže pokud není stisknuté tlačítko, je na daném pinu 5 V (log. 1).
Při stisku tlačítka se daný pin uzemní a je na něm tedy 0 V (log 0).

Tlačítko je připojeno k pinu PD2 (INT0).
Při stisku tlačítka bude vyvoláno přerušení ve kterém dojde k rozsvícení ledek.
*/

#include <avr/io.h>		//Vlož knihovnu vstupů a výstupů (PORT, DDR, PIN)
#include <avr/interrupt.h> //Vlož knihovnu vektorů přerušení (ISR(), sei() )

#define LED 0b01010101; //Ledky, které  se mají rozsvítit při stisku tlačítka
                        //(každá lichá)

/********************Obsluha přerušení***********************/
ISR(INT0_vect)          //obsluha vnějšího přerušení 0
{
PORTB = LED;	//Rozsviť vybrané ledky (zhasnou se v hlavní smyčce)
                //až přestane být voláno přerušení
}

/**********************HLAVNÍ FUNKCE*************************/

int main (void) //hlavní funkce
{
GIMSK = 0b01000000;  	//vybereme přerušení od INT0
sei();              	//povol přerušení

DDRB = 0xff; 	//(0xff = 0b11111111) -> Piny 0 - 7 portu "B" budou výstupní
DDRD = 0;		//Port "D" bude vstupní (tlačítko je připojeno k portu "D")

while (1)		// Nekonečná smyčka (dokud 1 = pořád)
    {

    PORTB = 0;	//zhasni všechny ledky (rozsvicují se v přerušení)
                //Pokud není stisknuté tlačítko, program v hlavní smyčce neustále
                //zhasíná ledky.

    }	//Konec cyklu "while (1)" - program skočí zpět na jeho začátek

}//konec funkce main() - sem se program nikdy nedostane
 //(závorka tu však musí být jinak by překladač nahlásil chybu)