• Lunes 23 de Diciembre de 2024, 08:19

Autor Tema:  Duda Programapic16f873  (Leído 1583 veces)

cubillejo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Duda Programapic16f873
« en: Lunes 24 de Julio de 2006, 18:51 »
0
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.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Duda Programapic16f873
« Respuesta #1 en: Lunes 24 de Julio de 2006, 19:17 »
0
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.

cubillejo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Duda Programapic16f873
« Respuesta #2 en: Martes 25 de Julio de 2006, 11:22 »
0
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?

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Duda Programapic16f873
« Respuesta #3 en: Martes 25 de Julio de 2006, 21:23 »
0
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!

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Duda Programapic16f873
« Respuesta #4 en: Martes 25 de Julio de 2006, 23:48 »
0
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.