SoloCodigo

Programación Específica => Microcontroladores => Mensaje iniciado por: cubillejo en Lunes 24 de Julio de 2006, 18:51

Título: Duda Programapic16f873
Publicado por: cubillejo en Lunes 24 de Julio de 2006, 18:51
tngo una duda acerca de como se comporta el PIC, si tngo una parte de programa dentro de un bucle que llama a subrutinas y luego una interrupcion aparte,yo creo que se debe ir ejecutando el programa principal y cada vez que se produzca la interrupcion atenderla y continuar posteriormente con el programa. el caso es que he hecho un programa con esas caracteristicas y no funciona como deberia, me gustaria saber si la idea que tengo es correcta, porque cuando pruebo partes separadas de subrutinas y de la propia interrupcion van pero al juntarlas no funciona bien.gracias.
Título: Re: Duda Programapic16f873
Publicado por: lalo_soft en Lunes 24 de Julio de 2006, 19:17
Tienes que fijarte de no sobrepasar en stack (que en el caso de ese pic es de 8 ) con llamados a muchas sub y no retornar de ninguna de ellas antes que aparesca la INT.
Título: Re: Duda Programapic16f873
Publicado por: cubillejo en Martes 25 de Julio de 2006, 11:22
Cita de: "lalo_soft"
Tienes que fijarte de no sobrepasar en stack (que en el caso de ese pic es de 8 ) con llamados a muchas sub y no retornar de ninguna de ellas antes que aparesca la INT.
hay 3 subrutinas y son cortas, mestas diciendo que si estoy en una subrutina no es capaz de ir a la interrupcion si se produce?
Título: Re: Duda Programapic16f873
Publicado por: Huguen_aus_Tirol en Martes 25 de Julio de 2006, 21:23
Hola!
No importa en que parte del programa se esté, al darse una interrupción ésta se atiende (siempre que esté habilitada).
Tu problema puede ser el siguiente: al atender la interrupción seguramente estás usando el registro W, y también se modifica el registro STATUS. Al retornar de la interrupción estos registros ya no tienen los valores que tenían antes, con lo que el programa no responde correctamente. No suele ser tan común, pero a veces hay que cuidar tambien por el registro PCLATH; todo depende de nuestro programa...
En cualquier hoja de datos de estos micros encontrarás la solución (la mejor!) a este problema, en el capitulo de interrupciones. Puedes descargar la hoja de datos de la página de Microchip.

Saludos!
Título: Re: Duda Programapic16f873
Publicado por: lalo_soft en Martes 25 de Julio de 2006, 23:48
Cita de: "cubillejo"
Cita de: "lalo_soft"
Tienes que fijarte de no sobrepasar en stack (que en el caso de ese pic es de 8 ) con llamados a muchas sub y no retornar de ninguna de ellas antes que aparesca la INT.
hay 3 subrutinas y son cortas, mestas diciendo que si estoy en una subrutina no es capaz de ir a la interrupcion si se produce?

El stack de ese Pic no permite entrar a mas de 3 subrutinas sin salir de ninguna de ellas y que ademas ingrese la int (se produce un stack overflow) con lo que se pierde toda referencia de retorno al intentar salir de la int.

Ej:

Sub1¬
         Sub2¬
                  Sub3¬
                           Int¬
                                 SubInt  ; Otra sub dentro de Int

Si no has retornado de ninguna SUB antes de la Int tendras Error de Stack overflow.