********************************* uart.h ********************************* // init USART 1 und 2 void init_usart0 ( void ); void init_usart1 ( void ); ********************************** uart.c ********************************** #include void init_usart0 ( void ) { UBRR0H = 0; // 0 für 115200 @ 7,3728 MHz UBRR0L = 3; // 3 für 115200 @ 7,3728 MHz UCSR0A |= 0x00; UCSR0B |= 0x98; UCSR0C = 0x06; } // init_usart0 ********************************** main.c ********************************** #include #include "uart.h" #include "ports.h" // Ports initialisieren char rx_string[24]; // String, in dem die empfangenen Daten stehen (max. 25) char str_complete = '0'; // kompletter String empfangen ? 0=nein / 1=ja int char_count=0; // Zähler für die Zeichen im String char data; // Zwischenspeicher für ein empfangenes Zeichen ISR (USART0_RX_vect) // ISR für Datenempfang an USART0 { cli(); // Für die Verarbeitung Interrupts ausschalten data = UDR0; // Empfangenes Zeichen in data speichern if ( data != '\n' ) // Wenn empfangenes Zeichen nicht \n ist, dann ... { rx_string[char_count] = UDR0; // ... Zeichen in Array schreiben char_count++; // ... ein Arrayplatz weiter str_complete = '0'; // ... ist der String noch nicht vollständig } if ( data == '\n' ) // Wenn empfangenes Zeichen gleich \n ist, dann ... { rx_string[char_count] = '0'; // ... String abschließen char_count = 0; // ... char_count zurücksetzen str_complete = '1'; // ... ist der String vollständig } sei(); // Interrupts wieder anschalten } // ISR RX USART 0 int main ( void ) { init_usart0(); // Initialisierung der USART0 - Schnittstelle //init_usart1(); // Initialisierung der USART1 - Schnittstelle init_ports(); // Initialisierung der Ports sei(); // Interrupts einschalten while(1) // Loop { if ( str_complete == '1' ) // Wenn String komplett bis zum \r empfangen wurde, dann ausgeben { while (rx_string[char_count] != '0') // so lange zeichen des String != '\0' { while (!(UCSR0A & (1<