Hallo Ronald,
ich würd Dir gerne helfen ,aber so wie Du Dein Code schreibst, bekommt das kein Mensch zu lesen(nicht böse sein...), ich bin mir auch sicher, daß Du selber in einem Monat nicht mehr weißt, was Du geproggt hast....

Hier ein paar Beispiele, wie Du es besser machen könntest:
1. die Bedeutung von .org .def .equ kennenlernen
Code:
.include "m8def.inc"

;UART Konstanten
.equ CLOCK = 10000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK / (BAUD*16)-1

;DataPort
.equ DataPort = PORTB
.equ DataDDR = DDRB
.equ DataPin = PINB

;RamRingPuffer Einstellungen 
.equ PUFFER = 0x0060
.equ PUFFER_END = PUFFER + 0x32

;Ringpufferinit
  ldi XH,HIGH(PUFFER)
  ldi XL,LOW(PUFFER)
  ldi YH,HIGH(PUFFER)
  ldi YL,LOW(PUFFER)

;Registerdefinieren
.def LCD_read = R1 ;Display Ausleseregister
.def Parameter_Counter = R2
.def Save_rueckspH = R3
.def Save_rueckspL = R4
.def Cursor_Status = R5
.def Zaehler1 = R6
.def tmp = R16  ;Arbeitsregister 1
.def tmp2 = R17 ;Arbeitsregister 2
.def tmp3 = R18 ;Arbeitsregister 3
.def Status = R19 ;Register fuer diverse Flags
.def DDRAM = R20 ;DDRAM Zaehler
So weißt man direkt, welcher Register für was ist, und welche Konstante was zu sagen hat.

2. Die Vektoren und die reset routine:
Code:
.org 0x0000
	rjmp reset
	
.org URXCaddr
	rjmp read
reset:
	
	ldi tmp,HIGH(RAMEND)
	out SPH,tmp
	ldi tmp,LOW(RAMEND)
	out SPL,tmp
        sbi EnableDDR,Enable
  sbi RSDDR,RS
  sbi RWDDR,RW
  sbi BacklightDDR,Backlight
  sbi KontrastDDR,Kontrast
  ldi tmp,0x0F
  out DataDDR,tmp
  ;UARTinit
  ldi tmp,HIGH(UBRRVAL)
  out UBRRH,tmp
  ldi tmp,LOW(UBRRVAL)
	out UBRRL,tmp
	ldi tmp,(1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0) 
	out UCSRC,tmp
	ldi tmp,(1<<RXEN) | (1<<TXEN) | (1<<RXCIE)	 
	out UCSRB,tmp
        sei
loop:
 rjmp loop
So, hier sieht man ja welche Bits bei welchen Registern gesetzt werden, auch nach Jahren gut zu lesen....

3. ISR:

Code:
read:
	
	push tmp
	in tmp,SREG
	push tmp
	in tmp,UDR
	st X+,tmp
	ldi tmp2,LOW(PUFFER_END)
	ldi tmp,HIGH(PUFFER_END)
	cp XL,tmp2
	cpc XH,tmp
	brlo read1
	ldi XH,HIGH(PUFFER)
	ldi XL,LOW(PUFFER)
read1:
	pop tmp
	out SREG,tmp
	pop tmp
	reti
Da brauchst Du kein cli mehr machen (sagte der Sprinter ja schon)

Diese Beispiele habe ich gerade per copy/paste eingefügt, es ist nicht vollständig, nur als Beispiel anzusehen, aber so werden die Interrupt auf jedem Fall ausgelöst

gute Nacht Sebastian