Fallo con un 16F628

#1
Cual es el error: Lo poco que se ve no ayuda a descartar posibles origenes. El pic se queda inactivo, ni siquiera tiene un funcionamiento aleatorio. Simplemente no se inicia.

Cual es la proyecto donde me aparece el problema: Estoy metiendo un programa relativamente sencillo en un 16F628. Sin temporizadores, ni interrupciones. He configurado los puertos A y B como 3 entradas y 13 salidas, para controlar 9 displays 7seg con tres pulsadores.

Estoy seguro (realmente no, si no no estaría escribiendo este mensaje:LOL:) que todo está escrito bien, todo el programa está probado por partes, y he mezclado las partes para estar seguro de que no se me escapase algún salto o llamada rara... pero nada.

Al final, probando probando, he llegado a reducir el fallo, al número de líneas de código que escribo... ¿como? poniendo ordenes "nop".

Primera pista (y realmente la única:confused:), el error aparece solo si los nop están en medio (incluso al inicio) del programa, si los pongo al final, no hay problema.

Segunda, los "goto $+n" no son el error, solo se me ocurre que el fallo esté en la linea "addwf PCL,1", tal vez se cargue en PCL algún dato incorrecto... pero creo que todas las variables que voy cargando están limpiadas en el encendido. Además como ya he dicho, todo está probado por partes y esa línea está siempre.

Alguna sugerencia? No tengo problemas en meter el código, pero es un tostón. Si alguien se interesa lo pongo, a ver que saca.

:D:DGRACIAS:D:D
 
#2
:LOL:

Solucionado... no se el porqué, pero está solucionado.

El problema me lo mete el comando "addwf PCL,1", cuando está despues de mucho codigo (antes estaba como subrutina 15, casi al final) :eek:.

Solución: Poner la tabla con la dichosa linea, como primera de las subrutinas... ¿por qué me funciona así? no lo se, suponía y supongo que el vector apuntaría a una dirección erronea, pero en el fondo, ahora tambien debería hacerlo... pero no lo hace.

SI ALGUIEN ENTIENDE EL PORQUE DE TODO ESTO, AQUI ESPERO. GRACIAS

:D:D:D pero ya puedo seguir :D:D:D
 
#3
Muestranos el código...
Si usas el MPLAB entonces ese no tiene errores en ASM, al menos nunca me ha sucedido y el 99% de los problemas es causado por el mismo usuario por falta de información; por eso publica parte o todo tu código para verlo...
 
#4
Esto se debe a que el (nro de linea donde esta el comando addwf PCL,1 sumado al valor que tengas en el registro W) es > 255

Resumiendo: (nro linea instruccion + W) < 255 = funciona, en otro caso el micro salta a cualquier lado.

Asumo que no estas usando watchdog. Te lo recomiendo.

Esa es la razon por la cual el programa funciona si pones dicha tabla al principio de todo. Su nro de linea es mucho menor. Se que hay tecnicas para trabajar con esto de una forma mejor pero no las recuerdo ni tengo idea donde podrias buscarlas.
 

Temas similares

Arriba