TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: groundman en 13 de Julio de 2012, 14:46:28
-
hola estoy realizando una simulacion con el PROTEUS-VSM.y tengo el problema de que hay una direccion de memoria que aparece un valor que no deberia estar ahi.
es posible que aparezca despues de una interrupcion.y en un determinado momento.me gustaria saber si hay alguna forma de parar el programa ante el evento
del cambio de este registro hubicado en la ram.
de esta forma lograre saber que es lo que esta ocasionando esta modificacion.
-
Hola amigo, si estás viendo la variable en un watch Window puedes configurarle un "Watchpoint condition" clic derecho sobre la variable, ahí le configuras que pare el programa cuando la variable cambia de valor.
Saludos.
-
muchas gracias por la informacion.no sabia que se pudiera añadir una direccion de la memoria al wach.pero no encuento lo que dices.
eso no sera para el mpsim?
-
Hola, cargas la variable en el watch y luego das click derecho y te aparece la opción
Saludos.
-
ya consegui hacer lo que decias.y funciona.el programa se para al modificarse el registro.
esta forma de simulacion directa con el proteus solo la utilize una vez.por eso no supe encontrar las opciones.yo suelo usar el MPLAB con el ISIS.
asi que aunque ha funcionado tu solucion.no he logrado encontrar el fallo.ya que el codigo no lo puedo ver en menotecnico.porque el hex lo tengo
cargado dentro del pic.
seria magnifico tener esta opcion en el proteus desde el MPLAB.
-
Porqué no cargas en el pic el archivo .cof ?, de esta forma se puede depurar
-
gracias .no sabia ni que era ese tipo de archivo.ya he logrado ver por donde va el fallo.resulta que cuando se
produce una interrupcion,guardo los registros para poder recuperarlos posteriormente.
pues hay algo que se me escapa a la comprension.yo guardo el registro BSR en un registro temporal.pero no se si esto
es recomendable.ya que depende del valor del BSR el registro temporal puede estar hubicado en cualquier banco de ram.
de ahi que me aparezca un valor en una posicion de memoria que no le pertenece.ya que cuando quiero guardar el valor
en un registro temporal del banco 7.en mi caso lo esta haciendo en el banco 1.
ejemplo:
movff BSR,TEMP_BSR
esto seria idoneo si BSR=7 ya que estaia guardando el valor 7 en un registro ubicado en el banco 7.
pero si el valor es diferente,ya no lo estaria guardando en el banco 7.
asi que solo se me ocurre reservar una posicion de memoria de cada banco para este registro.por ejemplo la xff
y asi no estare poniendo en conflicto otras direcciones compartidas por otros registros.
a no ser que haya una memoria que se acceda desde cualquier banco seleccionado.
asi que no se como salvar el contenido del BSR.sin modificar bancos no deseados.
-
bueno.por el momento he logrado que el programa me funcione.
tenia estas instrucciones para salvar algunos registros al entrar en una interrupcion.
movff BSR,HI_TEMP_BSR
movwf HI_W_TEMP
ahora he puesto estas:
movff BSR,HI_TEMP_BSR
movlb 0x07
movwf HI_W_TEMP
se ve que guardaba el contenido de W en el registro HI_TEMP_BSR.que esaba direccionado al banco 1 por el BSR.
ya me lo guarda en el banco 7.
pero todabia no me convence lo de guardar el conteido de BSR en un registro sin poder direccionar porque el que direcciona
es el propio registro direccionador.
no he hecho mas practicas para verificar el buen o mal funcionamiento de esto.tendre que probarlo.
-
ya encontre la opcion de utilizar la ventana watch del PROTEUS VSM-MPLAB
es un icono con la imagen de un ojo.hacemos clic y ya podemos configurar la forma en como pararse el programa ante la modificacion de un registro.
-
Me alegra, esta es una excelente herramienta.
Saludos.