/* * Dioda migająca * * Program używa timera w trybie normalnym do włączania/wyłączania diody. * Możliwe modyfikacje/zadania: zmiana szybkości migania diody; zmiana ilości migających diod * (napisanie kodu tak, aby diody świeciły naprzemian). */ #include #include int main(void) { /* * ustawienie portu i zapalenie diody */ PORTB.DIRSET = PIN0_bm; PORTB.OUTSET = PIN0_bm; /* * konfiguracja przerwań */ TCC0.INTCTRLA = TC_OVFINTLVL_LO_gc; // przepełnienie timera ma generować // przerwanie o niskim priorytecie (LO), PMIC.CTRL = PMIC_LOLVLEN_bm; // odblokowanie przerwań o niskim priorytecie, sei(); // globalne odblokowanie przerwań, /* * konfiguracja timera */ TCC0.CTRLB = TC_WGMODE_NORMAL_gc; // ustawienie trybu normalnego timera, TCC0.CTRLA = TC_CLKSEL_DIV1024_gc; // ustawienie preskalera (podzielenie zegara // 2MHz przez 1024) i uruchomienie timera // 2MHz/1024=1953Hz - częstotliwość zegara timera, TCC0.PER = 1000; // ustawienie pojemności timera na 1000 impulsów zegara, while(1) { } } /* * obsługa przerwania od timera przychodzącego, gdy się przepełni */ ISR(TCC0_OVF_vect) { PORTB.OUTTGL = PIN0_bm; // zamiana stanu diody, }