Hi !
Erst mal Danke für deine Antworten....
Mist ich erhöhe ja wirklich nur bis 6 ^^(wo hab ich nur meinen Kopf)
Also Das mit dem CTC hört sich gut an, da muss ich mich gleich mal drüber schlau machen....
Hier Jetzt erst mal der versprochene Code, damit sollte es doch aber rein theoretisch bei 300Baud doch funktionieren oder ? (mit ausnahme davon das ich immer noch das startbit mit einlese....)
Also ich würde wirklich gerne erst mal versuchen dieses Beispiel irgendwie zum laufen zu Bringen, so rein für den Kopf und das Verständniss... Achso, der chip den ich verwende ist ein Mega8 bei 16MHz

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

#include "init.h"
#include "lcd.h"


//SoftUART PINS
#define RXPIN 2
#define RXINT INT0
#define UARTDDR DDRD
#define UARTPIN PIND
#define UARTPORT PORTD
#define T0REL 152

char iOut[20];

unsigned char bitFlag = 0;
unsigned char bitCnt = 0;
unsigned char udr = 0;


void cfgInt0(void)
{
    MCUCR |= (1<<ISC01);        //INT0 falling edge
    GICR |= (1<<INT0);            //INT0 interrupt enable
}

void cfgTimer0(void)
{
    TCNT0 = T0REL;
    TCCR0 |= (1<<CS02);
    //TIMSK |=(1<<TOIE0);
}

void cfgSoftUart(void)
{
    UARTDDR &=~ (1<<RXPIN);        //RX Pin als Input
    UARTPORT &=~ (1<<RXPIN);    //RX Pin auf 0

    cfgInt0();                    //Software UART Interrupt
    cfgTimer0();                //Software UART Timer
}


int main(void)
{
    cfgPorts();
    cfgSoftUart();
    cfgLcd(LCD_ON_CURSOR_OFF);
    lcdCls();
    enableInterrupts();

    _delay_ms(200);
    lcdPrint("Software Uart",1,1);

    while(1)

    {    
        itoa(udr,iOut,10);
        lcdPrint("                    ",1,3);
        lcdPrint(iOut,1,3);
        itoa(udr,iOut,2);
        lcdPrint(iOut,5,3);
        
        _delay_ms(1000);
    }
      return 0;
}


ISR(INT0_vect)
{
    GICR &=~ (1<<INT0);
    TCNT0 = T0REL;
    TIMSK |=(1<<TOIE0);
}

ISR(TIMER0_OVF_vect)
{
    TCNT0 = T0REL;
    if(bitFlag == 0)
    {
        bitFlag = 1;
    }else 
    {
        bitFlag = 0;
        if(!(PIND & (1 << PD2)))
        {
            udr &=~ (1<<bitCnt++);
        }else
        {
            udr |= (1<<bitCnt++);
        }

        if(bitCnt == 8)
        {
            bitCnt = 0;
            TIMSK &=~(1<<TOIE0);
            GIMSK |= (1<<INT0);
        }
    }
}
So sollte ich doch eigendlich die halbe bitzeit erwischen oder nicht ? Leider funktioniert das so immer noch nicht.... aber für 300 Baud sollte das mit dem timer overflow doch eigendlich genau genug sein oder nicht ?!?

Mfg Fugitivus