¿Cómo hacer Reset PIC16F887 por Software?

#1
Hola, tengo un problema necesito Resetear un PIC16F887 pero por software, como tengo que hacer tienen algunas lineas asi veo como es?

Lo que pasa es que entre a una subrutina en el pic y si hago break; parea salir vuelve al main, pero no desde el principio del main sino dentro del bucle While. y yo lo que necesito es que se ejecute desde el principio el main o sino hacer un reset por software por eso pregunto lo del reset, si tienen alguna manera que se ejecute el main desde el principio o hacer un reset cualquiera de las dos me sirve.

Muuchas gracias.
 
#3
Será mejor pongas tu código para dar una solución "más elegante", así como así un "semi-reset" para zafarte del lazo no parece muy bueno.
Saludos
 
#4
yo hacia con poner la instruccion goto 00 pero creo no es la mejor solucion pues cuando simulaba mi matriz de leds me aprarecian muchos warning pero en la realidad funcionaba muy bien
 
#5
Si es en C podrías emplear alguna bandera para romper el while donde entraste y salir a otra sección del programa, he usado eso en varias ocasiones. Para darte una buena solución hay que ver el código, quizás hasta reorganizar un poco tu lógica para que se pueda adaptar.
 
#6
Lo que pasa es que entre a una subrutina en el pic y si hago break; parea salir vuelve al main, pero no desde el principio del main sino dentro del bucle While. y yo lo que necesito es que se ejecute desde el principio el main o si no, hacer un reset por software, por eso pregunto lo del reset, si tienen alguna manera que se ejecute el main desde el principio o hacer un reset cualquiera de las dos me sirve.
Estaría bien ver tu código para saber que hacer, pero si necesitas regresar a la posición 0x00 (Vector de reset), lo puedes hacer de éstas maneras:

La forma sencilla que a muchos no les gusta:

  • Usar un GOTO
  • En PIC C Compiler existe la instrucción RESET_CPU() (En los PIC16 hace un goto a la posición 0x00)
La forma elegante:

  • Llevar el contador de programa (PCL) a 0 y establecer un RETURN
 
#7
ahi lo arregle de una manera sencilla cuando volvia de la subrutina, el paso siguiente escribi un goto a una llama afuera del while del programa main y listo. El Reset_CPU esta bueno lastima que solo lo tienen los serie 18 de los pic. Muchas gracias a todos es el foro que mas me ayuda siempre este. Saludos y Felices Fiestas
 
#9
Sí, y te funcionará correctamente. @dcsalg está equivocado, porque la instrucción reset_cpu(); es válida también en los PIC 16
De cualquier forma, siempre se puede realizar un reset por software en un PIC. (Cualquier tipo de familia)
 
#11
Claro, pero despertará cuando ocurra alguna interrupción y tras eso se vuelve a ejecutar Sleep.
Es una forma muy común de entrar en modo de bajo consumo.

Y decir "por completo", pues no, porque siempre queda en modo de espera. (Stand By)
 
Arriba