Du musst auf der µC des MAX232 die RX/TX die Verbindung machen, wenn dann kein Echo kommt, hat es ein Problem mit der Verbindung zum PC.
Code:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>

#define BAUD 38400UL          // Baudrate
 
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
 
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
#endif
void USART_transmit(unsigned int data){
    while (!(UCSRA & (1<<UDRE)))
    {
     UDR = data;
    }
	}
int main(void)
{
    UCSRB = (1<<TXEN);                // UART TX einschalten
    UCSRC = (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1
 
    UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;
    
    unsigned int data = 'X';
 for(;;){

    USART_transmit(data);

 }
}
So sollte es dauernd ein X am PC ausgeben, es ist sicherer falls etwas verschluckt wird.