Hallo,

ich habe ein Problem mit einer Interruptroutine.
Diese wird nur einmalig ausgeführt (bei RB7 = low) und dann nie wieder.
Der PIC soll eigentlich immer schlafen, es sei denn RB6 oder RB7 wechseln von high zu low - dann soll er eine Routine abarbeiten und wieder einschlafen
Beim ersten Interrupt durch RB7 springt der PIC in das richtige Unterprogramm (im Bsp unten "UP1"), arbeitet es ab und stellt danach komplett seine Arbeit ein. Dann kann ich an RB6 / 7 soviel Pegelwechsel vornehmen wie ich will, es passiert nichts mehr.
Ich habe mal den Quelltext angehängt: Mache ich etwas falsch mit dem Setzen / Rücksetzen der Interruptbits?
Oder habe ich ein Problem mit dem "Einschlafen"?

Danke schonmal für alle Tipps im Voraus!

Code:
	org	0x0000	;Startadresse des Prozessors
	goto main		;springe in das Hauptprogramm




;**********************************************************************
;-----------Interrupt-Service-Routine---------------


	org		0x4					; Startadresse ISR


;Interruptroutine
	bcf		INTCON,GIE
	bcf		INTCON,RBIE			; PortB Interrupt verbieten
	bcf		INTCON,RBIF
	movwf	w_copy				; Arbeitsregister retten
	swapf	        STATUS,w			                ; Status retten
	movfw	s_copy				; statusregister retten


	btfss	PORTB,7			;Wenn Eingang AB=0 überspringe nächsten Befehl
	call	UP1			        ;Rufe UP AB_Setzen auf
	btfss	PORTB.6			;Wenn Eingang AB=0 überspringe nächsten Befehl
	call	UP2			        ;Rufe UP AB_Setzen auf


	swapf 	s_copy,w		; STATUS zurückholen 
	movwf	STATUS		; Status aus dem Arbeitsregister in die Speicherzelle schreiben
	swapf	w_copy,f			; w zurück mit flags  
	swapf	w_copy,w


    bsf     INTCON, RBIE                  ; RBIF kann wecken
    bcf     INTCON, RBIF
    bsf     INTCON, GIE


	retfie						; ISR verlassen




; Hauptprogramm


main:							;Initialisierung
				
	clrf	PORTA 				; PortA löschen
	clrf	PORTB				; PortB löschen 
	bsf		STATUS,RP0		; Umschalten auf Bank1
	movlw	B'00011111'			; 
	movwf	TRISA			; RA0-RA4 als Eingang definieren


	movlw	B'11000111'			; 
	movwf	TRISB				; RB0-2=Eingang; RB3-5= Ausgang; RB6&7=Eingang
        bcf     OPTION_REG, 7 
	bcf		STATUS,RP0		; Umschalteten auf Bank0 


        clrf    INTCON          ; GIE aus 


        bsf     INTCON, RBIE    ; RBIF kann wecken
        bcf     INTCON, RBIF
	bsf		INTCON, GIE


sleeploop
	sleep
	nop
	goto	sleeploop