Das läuft bei mir einwandfrei.Code:#include <avr/io.h> #include <util/delay.h> #ifndef F_CPU #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000" #define F_CPU 3686400 // Systemtakt in Hz - Definition als unsigned long beachten #endif #define BAUD 9600UL // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden! // Berechnungen #define UBRR_VAL (((F_CPU)/(BAUD*16))-1) // clever runden #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille //#if ((BAUD_ERROR>10) || (BAUD_ERROR<=10)) //#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! //#endif int main(void) { UCSRB |= (1<<TXEN); // UART TX einschalten UCSRC |= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); // Asynchron 8N1 UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF; while( 1 ) { while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */ { } UDR = 'A'; _delay_ms(5); } }
Ich verwende normalerweise die uart-Lib von Fleury, da braucht man sich um nichts kümmern.
Lesezeichen