Salvando las distancias ... yo uso el ATMEGA88 transmitiendo y recibiendo a 9600 baudios y no se si podrá servirte mi código y que funciona a las mil maravillas:
(Para WinAVR 20050214)
Codigo:
#include<avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
uint32_t SYSCLK=8000000UL; // frecuencia de reloj HARD
...
// inicializa el puerto serie
void initserie(void)
{
//velocidad 9600 baudios
UBRR0=SYSCLK/16/9600-1;
//activa TX RX y IRQRX
UCSR0B=_BV(TXEN0)+_BV(RXEN0)+_BV(RXCIE0);
//8 data 1 bit stop
UCSR0C=0x06;
}
// transmite un caracter por RS232
int uart_putchar(char c)
{
loop_until_bit_is_set(UCSR0A, UDRE0); // espera buffer libre
UDR0 = c; // transmite el caracter
return 0;
}