Hallo liebe Assembler-Gemeinde,

ich habe da ein Problem mit dem INT0 des Attiny13. Wenn ich folgendes Programm im Simulator durchlaufen lasse:

Code:
.include "tn13def.inc"

.def temp = r16

;Reset- und Interruptvektoren
;
.CSEG 	;Assembliere in den Programm-Flash-Speicher
.org $0000	;beginne mit Adresse 0
;
;Sprungvektoren fuer Reset und Interrupt
;
	
	rjmp main		;Reset vector
	rjmp intpc0 			;int0 interrupt vector
	reti; intpcint	;PCINT0 vector
	reti 			;TC0 overflow vector
	reti 			;Eeprom ready vector
	reti 			;Anaog comperator int vector
	reti			;TC0 CompA vector
	reti 			;TC0 CompB vector
	reti 			;WDT vector
	reti 			;ADC conversion complete vector
	
;Programmbeginn
;internen Prozessortakt durch 32 teilen
;Takt = 9,6MHz / 32 = 300kHz

      ldi temp,(1<<CLKPCE)
      out CLKPR,temp
      ldi temp, (1<<CLKPS2)|(1<<CLKPS0)
      out CLKPR,temp

main:
;
; Stapelzeiger setzen fuer Rueckkehr-Adressen vom Interrupt
;
	ldi temp,LOW(RAMEND)	;Stapelzeiger am Ende vom SRAM
	out SPL,temp

      ldi temp,(1<<PB1)
      out DDRB,temp
      ldi temp,(0<<PB1)|(1<<PB4)
      out PORTB,temp          ;LED ausschalten und internen Pull UP von PB4 ein

	ldi temp, 0b00000010  ; INT0 konfigurieren
    out MCUCR, temp
 
    ldi temp, 0b01000000  ; INT0  aktivieren
    out GIMSK, temp
 
         sei           
	
loop:   nop rjmp loop             ; eine leere Endlosschleife

intpc0:
		 
         
		 sbis PORTB, 1
		 rjmp intpc1
		 cbi PORTB,1
		 reti
 
intpc1:
         sbi PORTB, 1
         
		 reti
und ich einen Interrupt auslöse läuft das Prog ohne Probleme durch und setzt mir die Bits von Portb4. Löse ich dann noch einmal einen Interrupt aus läuft die Interrupt-Anweisung wieder durch und die Bits von Portb4 werden auch wieder gelöscht. Nur wenn jetzt die Interrupt-Anweisung wieder verlassen wird wird sofort wieder zum Interrupt-Handler gesprungen und wieder ein Interrupt ausgelöst, so dass die Bits wieder gesetzt werden. Kann mir das einer erklären?


Mfg André