So, also hier nochmal mein kompletter code, jegliche Kritik und Verbesserung ist erwünscht, ich bin ja auch noch Anfänger in dieser Sache :



Code:
#include <avr/io.h>
#include <avr/interrupt.h>

#define BAUD 9600UL

#include "../classes/rs232/UART/UART.h"

volatile uint32_t t,t2;
volatile unsigned char dcf=0xff;
volatile unsigned char dcf_buf[128];
volatile unsigned char r;


SIGNAL(SIG_OUTPUT_COMPARE2)
{
if(!(PINC & (1<<PC0)))			//Kein Impuls==Pause
{

	if(t>78000 && t<82000)					//Wenn kleiner 900ms
	{
	if(dcf!='0')
	dcf='1';
	}

	if(t>88000 && t<92000)					//Wenn größer gleich 900ms
	{
	dcf='0';
	}

	if(t>170000 && t<180000)				//PAUSE für ENDEBIT
	{
	dcf_buf[t2]='1';
	dcf_buf[t2+1]='\0';
	t2=0;
	r='2';
	}

	if(t>180000 && t<190000)				//Pause für ENDEBIT
	{
	dcf_buf[t2]='0';
	dcf_buf[t2+1]='\0';
	t2=0;
	r='2';
	}

t++;
}
else							//Impuls==timer zurücksetzen
{
	if(dcf=='0' || dcf=='1')		//Wenn Zeichen empfangen
	{
	dcf_buf[t2]=dcf;
	dcf_buf[t2+1]='\0';							
	dcf=0xff;
	t2++;
	}
t=0;							//Timer zurücksetzen
}

}

void timer_init(void)
{
t2=0;
t=0;
r='0';
TCCR2=(1<<CS22) | (1<<WGM21);
OCR2=160;						//0,01ms (?)
TIMSK|=(1<<OCIE2);
sei();
}


int main(void)
{
DDRC&=~(1<<PC0);		//Eingangspin DCF-Signal
PORTC|=(1<<PC0);		//Pullups aktivieren

timer_init();			//Timer initialisieren

uart_init();			//UART inititalisieren

while(1)
{
	if(r=='2')			//Wenn Signal zum Senden gesetzt
	{
	dcf=0xff;			//Bit zurücksetzen
	r='0';				//Signal zurücksetzen
	send("DCF: ");
	send(dcf_buf);		//Daten an PC senden
	send("\r\n");
	}
}

return 0;
}
Gruß
cesupa

P.S.: Mein Atmega8 läuft mit einem externen 16MHz Quarz.