rendered paste body// Włączenie diody na czas jednej sekundy // po puszczeniu przycisku #include <avr/io.h> // doste;p do rejestrów#include <avr/interrupt.h> // przerwania// flaga stanu programuvolatile uint8_t wcisnieto = 0x00;// licznik wywołań przerwania overflowvolatile uint8_t licznik = 0x00;void odpal_licznik(void){ TCCR0 |= _BV(CS00) | _BV(CS02); // 4mhz / 1024 / 256 ~ 15.26hz TIMSK |= _BV(TOIE0); // włączenie przerwania overflow TCNT0 = 0; TIFR = 0; // Zapalenie diody PORTC = ~PORTC; // włączenie przerwań sei();}int main( void ){ DDRC |= 0xFF; PORTC = 0; DDRB = 0x00; while(1) { if(wcisnieto != 0x01 && PORTB & 0x01) { wcisnieto = 0x01; } else if(wcisnieto == 0x01 && !(PORTB & 0x01) && !(TCCR0 & (_BV(CS00)))) { odpal_licznik(); } }}ISR(TIMER0_OVF_vect)zz{ licznik++; // Minęła sekunda (15.26mhz) if(licznik % 16 == 0) { // Zmiana stanu na przeciwny PORTC = ~PORTC; // Wyłączenie przerwania overflow TIMSK ^= _BV(TOIE0); // Wyłączenie zegara TCCR0 ^= _BV(CS00) | _BV(CS02); wcisnieto = 0x00; licznik = 0; }}