Naja,
Dir ist hoffentlich aber klar, daß Du:
1.
Code:
while (!(UCSR1A & (1<<UDR1E)))
vor jedem Zeichen machen musst
2.
nicht unbedingt 100 ms sein muß
3. Keine Endloschleife in Deinem Programm vorhanden ist
Warum übergibst Du UBRR an die Initfunktion ?
Ich füge mal ein paar Schnipsel, die bei mir mit M128 100% Funktionieren, ist zwar für UART0 , sollte aber egal sein
Code:
#define BAUDSELECT (F_CPU/(BAUD*16L))-1
void init_uart(void){
UBRR0L = BAUDSELECT;
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
}
senden tue ich mit solcher Funktion
Code:
void sendmessage(Message *message){
uint8_t a;
for (a=0;a<message->laenge;a++){
while(!(UCSR0A&(1<<UDRE0)));
UDR0 = message->text[a];
}
Vielleicht hilft es Dir weiter.
Gruß Sebastian
P.S.
Code:
while (!(UCSR1A & (1<<UDR1E))) //warten bis Senden möglich
{
}
Hier stinkt was, UDR1E gibt es nicht, es heißt UDRE1, sicher, daß es keine Fehler gibt ?
Lesezeichen