#include #include #ifndef F_CPU /* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert (z.B. durch Übergabe als Parameter zum Compiler innerhalb des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die "nachträgliche" Definition hinweist */ //#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert" #define F_CPU 8000000UL /* Quarz mit 3.6864 Mhz */ #endif #include /* in älteren avr-libc Versionen*/ //#include "taster2.cpp" #include #include #include #include #include //#include "usart.cpp" //#define UART_BAUD_RATE 960000 // 960000 Baud /* lange, variable Verzögerungszeit, Einheit in Millisekunden Die maximale Zeit pro Funktionsaufruf ist begrenzt auf 262.14 ms / F_CPU in MHz (im Beispiel: 262.1 / 3.6864 = max. 71 ms) Daher wird die kleine Warteschleife mehrfach aufgerufen, um auf eine längere Wartezeit zu kommen. Die zusätzliche Prüfung der Schleifenbedingung lässt die Wartezeit geringfügig ungenau werden (macht hier vielleicht 2-3ms aus). */ void long_delay(uint16_t ms) { for(; ms>0; ms--) _delay_ms(1); } void USART_Init( unsigned long baud) { /* Baudrate setzten*/ uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*baud) - 1); UBRRH = (uint8_t) (ubrr>>8); UBRRL = (uint8_t) (ubrr); /* Receiver und Trasmitter einschalten*/ UCSRB = (1<