THX @ all,

also ich weiß inzwischen nicht mehr, wo hier das Problem war. Hab´s irgendwann geschafft, die Mühle zum mahlen zu bringen.
Ich stell meinen Code auch noch rein, dann haben wir eine schöne Sammlung an ASM, C und Basic.

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

#define FOSC 16000000// Clock Speed
#define BAUD 250000
#define MYUBRR FOSC/16/BAUD-1
#define ziel_adr 1 // hier die Adresse des Gerätes angeben
#define real_adr ziel_adr+1//trägt dem führenden Nullbyte rechnung

volatile unsigned int byte_counter = 0;
volatile unsigned char befehl [4] = {0};
volatile unsigned int time;
volatile unsigned char tmp;
volatile unsigned int tmp2;

void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and Interrupt*/
UCSRB = (1<<RXCIE)|(1<<RXEN);//|(1<<TXEN)
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);//
}



SIGNAL (SIG_UART_RECV)//Frame Recieve Interrupt
{
	unsigned char dummy;

	
	//PORTD =byte_counter;
	if((UCSRA & 0b00010000)== 16)//Frame Error?
	{//JA/////////////
		byte_counter = 0;
		dummy = UDR;
		UCSRA &= 0b11101111;
	}
	else
	{ //NEIN/////////////
		tmp = UDR;
		if (byte_counter == real_adr) PORTD = tmp;	
	}
	byte_counter++;

}

int main (void)
{


USART_Init(MYUBRR);
DDRD = 0b11111110;
sei();
main2:

goto main2;
return 0;
}