Witaj, ja też dopiero zaczynam
#define F_CPU 8000000L
#include <avr/io.h>
#include <util/delay.h>
#define LED1 PD0 // tutaj definiujesz ze led ma być na PD0 ale to info dla ciebie dla kompilatora wygląda to tak LED1 = PD0=0
void main(void)
{
DDRD |= (1<<LED1); /* tu definiujesz kierunek pinu PD0 jako wyjście (robisz or wartości rejestru DDRD z jedynką przesunięta o 0 miejsc, bo LED1=PD0=0 czyli 00000001) */
PORTD |= (1<<LED1); /* tu przypisujesz 1 na PD0 dlatego dioda świeci (względem masy wybrałeś taką logikę) ale uwaga! tutaj tez traktuj LED1 jako wartość 0 przesuwasz jedynkę o zero miejsc czyli masz 00000001 robisz or z wartością PORTD czyli ustawiasz linię PD0 na 1 */
while (1) //Pętla główna
{
PORTB ^=(1<<LED1); /* tu zrobiłeś błąd zamiast portuD użyłes portuB ale zauważ ze dioda miga na na PB0 bo uwaga! LED1 traktujesz jako wartość 0 i stworzyłeś maskę przesuwając jedynkę o LED1 miejsc czyli o 0. Maska wynosi 00000001 robisz z nią xor z PORTB czyli w każdym obiegu pętli zmieniasz wartość PB0 na przeciwną.*/
_delay_ms(100); /*dioda miga słabo bo 100ms to bardzo krótki czas daj np 500ms * i słabo, bo nie ustawiłeś linii portu PB0 jako wyjście instrukcją DDRB |= (1<<PB0) - ale to taka dygresja ,bo zadaniem przecież jest miganie diodą na linii 0 portuB */
}
}
Zainteresuj się tez plikami nagłówkowymi tam się dzieje mnóstwo ciekawych rzeczy
Pozdrawiam Michał