I've set up a very basic program to experiment with interrupts on a 16F84 (ive basically just used the example interrupt code from the pbp manual)

This main program should loop forever until RB0/INT goes high (via a pushbutton), and the interrupt routine should trigger and turn on the LED, and then go back to the endless loop in the main program.

However, when I press the button, the LED comes on for about 2 seconds and then turns off again. So i checked to see if it was resetting by putting code at the beginning of the program that makes the LED flash on and off a few times.

Sure enough, when i pressed the button, the LED came on for 2 seconds and then flashed, so the program was reset for some reason. It even resets if i pull out the oscillator after pressing the button. Now this seems to point me towards thinking that the watchdog timer is going off, but i dont know why it would.

Code:
DEFINE  OSC     10              ' Oscillator = 10MHz
define  INTHAND int_handler     ' Define interrupt handler

INTEDG  VAR OPTION_REG.6        ' RB0 Interrupt edge select: 1=Rising Edge 0=Falling Edge
INTF    VAR INTCON.1            ' RB0 Interrupt flag
INTE    VAR INTCON.4            ' RB0 Interrupt enable
GIE     VAR INTCON.7            ' Global interrup enable

LED     var PORTB.1             ' LED on RB1

wsave   var byte $20 system     ' Variable for saving W Register on Interrupt
ssave   var byte bank0 system   ' Variable for saving STATUS Register on Interrupt
psave   var byte bank0 system   ' Variable for saving PCLATH Register on Interrupt
fsave   var byte bank0 system   ' Variable for saving FSR Register on Interrupt

HIGH LED                        ' Flash LED Twice
pause 50
low led
pause 50
high led
pause 50
low led

INTEDG=1                        ' RB0 Interrupt to Trigger on Rising Edge
INTF=0                          ' Enable RB0 Interrupt
INTE=1                          ' Enable RB0 Interrupt
GIE=1                           ' Global Interrupt Enable

loop: Goto loop                 ' Endless Loop


'-----------------------------------------------------------------------------'
' Interrupt Handler                                                           '
'-----------------------------------------------------------------------------'

asm
int_handler
    ; Save Resisters ;
    movwf   wsave               ; Save W Register into wsave
    swapf   STATUS,W            ; Save STATUS Register into ssave
    clrf    STATUS                  
    movwf   ssave              
    movf    PCLATH,W            ; Save PCLATH Register into psave
    movwf   psave
    movf    FSR,W               ; Save FSR Register into fsave
    movwf   fsave

    ; Interrupt Code ;
    bsf     _LED                ; Turn on LED

    ; Restore Resisters ;
    movf    fsave,W             ; Restore FSR Resister
    movwf   FSR                 
    movf    psave,W             ; Restore PCLATH Resister
    movwf   PCLATH
    swapf   ssave,W             ; Restore STATUS Resister
    movwf   STATUS
    swapf   wsave,F             ; Restore W Resister
    swapf   wsave,W
    retfie
endasm