Tisk
Koutek AVR -
Napsal uĹživatel radioklub.cz   
Středa, 22 Červen 2011 21:01

Kompatibilní zapojení: LED panel s ATmega8

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

Untitled
/*
Popis:
Vybrané ledky budou blikat cca 2x za vte?inu

Ledky které mají takto blikat jsou vybrány konstantou "LED" a ?as svícení je dán
d?li?kou ?asova?e a ší?kou jeho registru.
V tomto p?íkladu bude použit ?íta?/?asova? "0" který má ší?ku registru 8 bit? 
to znamená že po?ítá do 255.
?íta? bude mít zapnutou d?li?ku hodinového signálu s d?litelem 1024.
Výsledná frekvence tedy bude 1 000 000/1024/255 = 3,8 Hz - p?i každém p?ete?ení 
budeme negovat stav ledek, takže se rozsvítí a zhasnou p?ibližn? 2x za sekundu.

P?ete?ení ?íta?e zp?sobí p?erušení, ve kterém bude negován stav 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() )

#define LED 0b01110101; //Ledky, které  se mají rozsvítit p?i stisku tla?ítka

/********************Obsluha p?erušení***********************/
ISR(TIMER0_OVF_vect)     //Vektor p?erušení p?i p?ete?ení ?íta?e/?asova?e "0"
{
PORTB = ~PORTB;	//vym?? na portu "B" všechny nuly za jedni?ky a naopak
}


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

int main (void) //hlavní funkce
{
TIMSK = 0b00000001; //vybereme p?erušení od TC0
sei();              //povol p?erušení
TCCR0 = 5; 			//spus? ?asova? "0" s p?edd?li?kou 1024

DDRB = 0xff; 	//(0xff = 0b11111111) -> Piny 0 - 7 portu "B" budou výstupní
PORTB = LED;	//rozsvi? vybrané ledky


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

	;	//nic ned?lej (prázdný p?íkaz)
		//- zde by mohl být program, který nebude zdržován blikáním
	}//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)