So, mittlerweile bekomme ich zumindest sowohl 1 als auch 0 in rc5.code geschrieben, allerdings stimmen die Codes meistens nicht, oft kommt bei mehreren Tasten der selbe Code etc.
Vom Timing her müsste es stimmen, das hab ich mittlerweile oft nachgerechnet. Kann es sein, dass die Zeit, die bei der Abarbeitung des Codes verloren geht, meine Rechnung stört?
Code:
//**********************************************************USART-ENDE********************

SIGNAL(SIG_OVERFLOW0)
{
 bitnummer++;
 TCNT0 = 145;      //Timer soll nach 1.778ms Overflow haben
	
 if(bitnummer == 12)      
  {
   TIMSK &= ~(1<<TOIE0);    //Wenn die 11 Bits davor erfasst wurden, TimerIRQ deaktivieren
   rc5.rdy = 1;
   bitnummer = 13;
  }
 
 if(bitnummer<6)             //Wenn i<6, werden die ausgelesenen Bits zu Addresse hinzugefügr
	{
	  if((PIND & (1<<3)) != 0)
	   {
	    rc5.addresse |= (1<<(5-bitnummer));
	   }
	  else
	   {
	    rc5.addresse &= ~(1<<(5-bitnummer));
	   }
    }
	
 if((bitnummer>=6 && bitnummer<=11))    //6 - 11 werden zu rc5.code hinzugefügt
	{
	  
	  if((PIND & (1<<3)) != 0)
	   {
	    rc5.code &= ~(1<<(11-bitnummer));

	   }
	  else
	   {
	    rc5.code |= (1<<(11-bitnummer));
	
	   }
	}
}

SIGNAL(SIG_INTERRUPT1)
{

 
 if(rc5.s_bit<3)
  {
   rc5.s_bit++;
  }
 if(rc5.s_bit == 3)
  {    
   TIMSK |= (1<<TOIE0);  // Timer0 Interrupts enablen
   TCNT0 = 228;         //Timer so vorladen, dass er zur Mitte des 2. Halbbits den ersten Timeroverflow hat      
 
   GICR &= ~(1<<INT1);  //Int1 disablen
  }
}
   
int main(void)
{
 init_usart();
 init_rc5();
 char i = 1;
 sei();
 char result[10];
 char hello[15] = "Hallo Martin";
 send_string(hello);
 for(;;)
  {
   if(rc5.rdy == 1)
    {
     itoa(rc5.code,result,10);
	 char hello2[15] = "RC5-Code: ";
     send_string(hello2);
     send_string(result);
	 rc5.rdy = 0;
	 rc5.s_bit = 0;
	 GICR |= (1<<INT1);          //    ext. Interrupt wieder aktivieren
	 bitnummer = 0;              // bitnummer zurücksetzten
	 rc5.addresse = 0;
	 rc5.code = 0;
	}
  }
}