Prinzipiell kann man eine beliebige Baudrate einstellen, solange sich
Empfaenger und Sender über ein gemeinsames Timing einig sind.
Das Programm sieht nach First Steps on AVR aus.
Wenn Du keinen Debugger hast, um im UDR0 nachschauen zu können, ob das
empfangene Zeichen dem gesendeten entspricht, dann solltest Du
vielleicht erst einmal mit einer langsameren Baudrate anfangen.
void SetCommBaudRate(unsigned int param_BaudRateToSet,
unsigned long param_ProcessorClockRate)
{
float varl_BaudRateRegister = (param_ProcessorClockRate / (16.0 *
(float) param_BaudRateToSet));
unsigned int varl_IntBRR = (unsigned int) varl_BaudRateRegister;
float varl_Remainder = varl_BaudRateRegister - (float) varl_IntBRR;
/* laut Formel einen abz,iehen und das im Integer. */
if(varl_Remainder < 0.5)
{
varl_IntBRR --;
}
UBRR0L = (unsigned int) (varl_IntBRR & 0x00FF);
UBRR0H = (unsigned int) ((varl_IntBRR & 0xFF00) >> 8);
}
Versuche mal, ob Dir diese Routine bei der Baudrate hilft.
Du kannst dabei z.b. den Aufruf so schreiben:
SetCommBaudRate(20000000,115000);
Viel Erfolg...