Se me olvidó.
Este es para un 16F84, no un 84A pero funciona igual.
Otra cosa:
Está para interrupción en flaco negativo, para positivo solo cambia el
BCF OPTION_INTEDG
por
BSF OPTION_INTEDG.
Otra situación:
Los de la serie 16FXX y X no son capaces de almacenar los registros STATUS y W, tu debes hacerlo. Esto lo haces para que después de la interrupción regreses a las mismas condiciones que tenías antes de la misma (alo mejor ya lo sabías, si no, ya lo sabes).
El programa que viene en la página no trae esta parte pero aqui te la pongo:
MOVWF W_TEMP ;copy W to temp register,
;could be in either bank
SWAPF STATUS,W ;swap status to be saved into W
BCF STATUS,RP0 ;change to bank 0 regardless
;of current bank
MOVWF STATUS_TEMP ;save status to bank 0
;register
: aqui va la rutina de interrupción.
: (ISR)
: En el programa dice ISR también, coloca tu rutina en medio de esto.
SWAPF STATUS_TEMP,W ;swap STATUS_TEMP register
;into W, sets bank to original
;state
MOVWF STATUS ;move W into STATUS register
SWAPF W_TEMP,F ;swap W_TEMP
SWAPF W_TEMP,W ;swap W_TEMP into W
Sigue con lo demás desde aqui (Labl en el caso del programa de la página que te mencioné).
Una cosa mas:
Tu debes nombrar esas variables STATUS_TEMP y W_TEMP en tu programa como cualquier otra variable para que funcione (las primeras veces no recordaba eso y me daba de golpes porque siempre se me olvidaba
)
Suerte.