Hallo,
Hast Du mein Post oben gelesen , scheinbar nicht ?
zu Deinem _delay_ms(100) ?
Du hast ein Quarz von 12 Mhz und laut avr-libc beträgt die maximale Delayzeit damit
262.14 ms / F_CPU in MHz.
bei Dir also 21 mS.

Der debugger unterstützt auch manche Sachen nicht, das ist u.a. UART das
kann man auch unter known issues nachlesen.
Vertraue hier also nicht auf den Debugger sondern auf uns.

Antwort auf warum man UDRE1 pollen muß ist wohl ganz einfach.
UART kann ja nur byteweise übertragen und nachdem man ihm sagt, es soll was senden muß man halt warten, bis es damit fertig ist und das steht halt im UDRE drin.

Und eine Endlosschleife ist immer noch nicht drin.

Ich kopiere Dir nochmal von oben was
Code:
void sendchar(char message){
      while(!(UCSR1A&(1<<UDRE1)));
      UDR1 = message;
    }
jetzt sendest Du aus Deinem main Zeichen an die Funktion, etwa so
Code:
sendchar('H');
sendchar('a');
sendchar('l');
sendchar('l');
sendchar('o');
Gruß Sebastian