Ok, kannst du mir denn sagen, was dann noch falsch sein soll? Ich denke, die Berechnung der Baudrate ist richtig, und auch sonst sollte alles stimmen, oder?
Code:
#ifndef F_CPU
#define F_CPU 20000000UL
#endif
#ifndef UART_BAUD_RATE
#define UART_BAUD_RATE 9600UL
#endif
/***************/
int main(void) {
/***************/
USART_init(UART_BAUD_RATE);
for(;;) {
USART_transmit('A');
_delay_ms(10);
_delay_ms(10);
USART_transmit('B');
_delay_ms(10);
_delay_ms(10);
}
/***************/
static void USART_init(unsigned int baud) { //nochmal genau ansehen und schöner formulieren!
/***************/
UCSRA=0x00;
UBRRL = (F_CPU/(16 * baud)) - 1;
UBRRH=0x00;
UCSRB = (1 << RXEN) | (1 << TXEN);
}
/***************/
void USART_transmit(unsigned char cData) { //sendet ein Zeichen ans Terminal
/***************/
while( !(UCSRA & (1<<UDRE)) ) {
;//warten, bis der transmit buffer leer ist, so dass wieder übertragen werden kann
}
UDR = cData;
}
Lesezeichen