Hallo Zusammen!

Ich habe folgendes Problem:

Ich versuche mich gerade am USART eines Mega32 und habe Probleme beim kompilieren.

Folgender Fehler wird ausgegeben:
avr-gcc.exe -mmcu=atmega32 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=4000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT usart.o -MF dep/usart.o.d -c ../usart.c
../usart.c:10:8: error: division by zero in #if
../usart.c:10:8: error: division by zero in #if
../usart.c:11:6: error: #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
make: *** [usart.o] Error 1
Build failed with 3 errors and 0 warnings...


Dazu folgender code:
Code:
#include "usart.h"
#include <avr/io.h>

void usart_init(unsigned long baudrate)
{
	#define UBRR_VAL ((F_CPU+baudrate*8)/(baudrate*16)-1)   // clever runden
	#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
	#define BAUD_ERROR ((BAUD_REAL*1000)/baudrate) // 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

	UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;

	UCSRB = (1<<RXEN) | (1<<TXEN) | (1<<RXCIE); //aktivieren des Empfängers und Senders und Interrupt für Empfänger
	
	UCSRC = (1<<UCSZ0) | (1<<UCSZ1); //8,N,1	
}

int usart_putc(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
    {
    }                             
 
    UDR = c;                      /* sende Zeichen */
    return 0;
}

void usart_puts(char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        usart_putc(*s);
        s++;
    }
}
Woran kann das liegen?

MfG, Marten83