Esto es lo que uso y me va muy bien <img src="http://pics.miarroba.com/caretos/wink.gif" alt="Giño" title="Giño" />
<span class="texto_mini">Codigo:</span>
;VECTOR DE INTERRUPCIO
N
ORG 4
MOVWF W_TEMP ;SALVO EL REGISTRO W
SWAPF STATUS,W
MOVWF STATUS_TEMP ;SALVO EL REGISTRO STATUS
CLRF STATUS ;TRABAJO EN BANK 0
MOVFW PCLATH ;SALVO EL REGISTRO PCLATH
MOVWF PCLATH_TEMP
CLRF PCLATH
--------
--------
TRATAMIENTO DE INTERRUPCION
--------
--------
MOVFW PCLATH_TEMP
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
Saludos,
Mario
hola mario_pastor.creo que has cometido algunos errores ya que no me funciona el codigo que has realizado.
hay algunas cosas que no entiendo de las que has realizado,como:
porque seleccionas el banco 0 si los dos registros que se utiizan PCLATH y STATUS estan implementados en todos los bancos.
luego hay una instruccion que no existe MOVFW
y los dos ultimos SWAPF no se para que sirven.
lo digo para que otra gente no se equivoque como lo he hecho yo,pero me ha ayudado mucho lo que has puesto aqui.
y ahora a ver si alguien me puede corregir a mi lo que he modificado de tu codigo,ya que aunque me funciona no se si me puede dar algun problema.
saludos.
PUSH MACRO
movwf W_TEMP ;guarda W en el registro W_TEMP
swapf STATUS,W ;haz swapf con STATUS y lo guardas en W
movwf STATUS_TEMP ;carga W en el registro STATUS_TEMP
movf PCLATH,W ;guarda el registro PCLATH en W
movwf PCLATH_TEMP ;carga W en PCLATH_TEMP
ENDM
POP MACRO
movf PCLATH_TEMP,W ;restaura PCLATH_TEMP a W
movwf PCLATH ;carga W en el registro PCLATH
movf STATUS_TEMP,W ;restaura STATUS_TEMP en W
swapf W,W ;haz swapf con W y lo metes en W
movwf STATUS ;carga W en STATUS
movf W_TEMP,W ;restaura el W
ENDM