por finnnnnn. estaba ya que me tiraba de los pelos.valla paliza de asm.
ya estaba arto del mensage:
[PIC16 MEMORY]PC=0X00D0 Attemp to read unimplemented memory location 0x008F ignored. lo pongo asi para que se encuentre facil en el buscador.
aunque la localizacion de memoria 0x008F no era el unico mensage de error.tambien estaban 0x0090,0x0095,0x0096,0x0097,0x009A,etc.
se que estas direcciones daban error porque como dice el mensage,no estan implementadas en el pic.es decir que no se pueden usar.solo tenemos que ver el datasheet para entenderlo.
lo que no entiendo es el PC=0XD0 ya que en el programa esta linea era un NOP.y no habia ninguna instrucion que pudiera meter ningun dato en lor registros
que he mencionado anteriormente.
todo el problema estaba en que al regresar al programa principal despues de una interrupcion.habia un registro que no era actualizado al valor originario a la inerrupcion.
este registro es el PCL.
yo pensaba que el valor de este registro era guardado en el Stack Pointer.y que guardando tambien el valor del PCLATH ya tenia asegurado el retorno de la
interrupcion sin que hubiere problemas.
pero no se que sera.igual se me esta desbordando la pila.aunque me lo diria el ISIS creo.
he modificado los PUSH y POP para corregir el error.haber si esto rula ya de una vez.
PUSH MACRO ;macro para salvar registros antes de una llamada a interrupcion
BANK0
movwf W_TEMP
swapf STATUS,W
movwf STATUS_TEMP
clrf STATUS
movfw PCLATH
movwf PCLATH_TEMP
clrf PCLATH
swapf PCL,W
movwf PCL_REG
ENDM
POP MACRO ;macro para restaurar registros despues de una llamada a interrupcion
BANK0
movfw PCLATH_TEMP
movwf PCLATH
swapf STATUS_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
swapf PCL_REG,W
movwf PCL
ENDM