El tema esta en que es muy rapido. No se cual es tu objetivo, en una interrupcion no es bueno poner retardos/delays.
En tu interrupcion estas haciendo lo mismo que al comienzo, poniendo un 1 en PORTB,1 :
bsf PORTB,1
Por lo cual siempre va a estar en 1 eso. Y PORTB,0 quedo en 1 desde antes de entrar al loop infinito.
Tal ves buscas algo asi..mm suena bien buscare en el datasheet el codigo restante y pondre los registros del delay :) intentare haber que sale ,si queda lo pondre aquiCódigo: ASM
BSF PORTB, 0 ;Enciendo Led Sleep BCF PORTB, 1 ;Apago Led Escritura fin NOP SLEEP NOP CALL Delay500ms BCF PORTB, 1 ; Apago led Escritura GOTO fin Delay500ms ;499994 cycles movlw 0x03 movwf d1 movlw 0x18 movwf d2 movlw 0x02 movwf d3 Delay500ms_0 decfsz d1, f goto $+2 decfsz d2, f goto $+2 decfsz d3, f goto Delay500ms_0 ;2 cycles goto $+1 ;4 cycles (including call) return
Te faltaria definir los 3 registros d1,d2 y d3 nomas
PD: Al codigo de interrupcion le faltan instrucciones, te recomiendo buscar en el datasheet W_TEMP, ahi tenes el codigo que le falta, Pero que por ahora no vas a tener problema.
PD2: Mientras este en el delay no vas a tener bajo consumo, si queres BAJO consumo, deberias usar otro sistema por ejemplo usar el WDT, que si esta en SLEEP no te resetea el micro sino que continua. Por lo que solo se despertaria en ese momento y luego volveria a dormir. Podes usar un contador y cuando lo realize X veces procedes a cambiar el estado del pin. En ves de usar el delay.