Zitat Zitat von Kjion
volatile const prog_char *p_string;
Das mutet etwas seltsam an. Wenn etwas const ist, ist es kaum flüchtig (volatile).
Du meinst wohl eher:
const prog_char * volatile p_string;
p_string ist volatile und das, worauf er zeigt, ist unveränderlich.

Übrigens brauchst du nicht UDR zu schreiben, um das Senden anzustoßen. Da genügt ein UCSRB |= (1<<UDRIE); und man landet in der ISR, sobalt UDR bereit ist. Dort wird dann mit dem 1. Zeichen begonnen und nicht erst mit dem 2.
Spart Platz und ist klarer