Witam poniższy kod to moje pierwsze podejście zaprogramowania uC z obsługa przerwań, oczywiście zakończone niepowodzeniem. Nie mam już pomysłu wiec proszę o pomoc, zaznaczam że nigdy nie miałem styczności z programowaniem, nauczyłem się jedynie operacji na bitach i kilku innych prostych rzeczy ale na przerwaniach się zatrzymałem. Chciałem uzyskać jakieś dwa proste efekty na LED-ach, wywołane najlepiej jednym przyciskiem. Próbowałem ale tak mi to wyszło:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define LED_FAST PORTB;
#define LED_SLOW PORTB;
#define LED_ON (1<<PD2);
int main(void)
{
DDRB = 0xFF; //PORTY B JAKO WYJSCIA//
PORTB =0xFF; // WYGASZENIE LED
DDRD |= ~(1<<PD2);
PORTD |= (1<<PD2);
{
LED_FAST;
_delay_ms(200);
PORTB = 0x18;
_delay_ms(200);
PORTB = 0x81;
_delay_ms(200);
LED_SLOW;
_delay_ms(500);
PORTB = 0x2F;
_delay_ms(500);
PORTB = 0xF2;
_delay_ms(500);
}
MCUCR |= (1<<ISC01)|(1<<ISC11);
GIMSK |= (1<<INT0);
sei();
while(1) { }
}
SIGNAL (SIG_INTERRUPT0)
{
DDRD |= ~(1<<PD2);
PORTD |= (1<<PD2);
while(1)
{
if(!(LED_ON & 0x20)) PORTB = LED_SLOW;
else
if PORTB = LED_FAST;
}
}