Autor Tema: ayuda con interrupciones  (Leído 1282 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado israel_32

  • PIC10
  • *
  • Mensajes: 6
ayuda con interrupciones
« en: 09 de Junio de 2010, 14:18:21 »
hola, tengo una duda con un pic16f877, lo que pasa esque estoy usando una interrupcion por usart, pero lo que no se por un lado es que banderas me respalda la entrada a interrupcion, y si hay algun tipo de error que pueda hacer que se salga de la interrupcion, al momento de entrar a la interrupcion mando llamar a subrutinas, y para evitar conflictos apago la usart para que no me genere errores mientras proceso los datos entrantes, en total la interrupcion me quedo muuy larga y tampoco se si sea por ello por lo que me genera el error, lo que pasa es lo siguiente, recibo un dato, lo procesa, apaga la usart, dependiendo del dato recibido manda llamar a alguna subrutina, pero el problema este precisamente en esa llamada a subrutina dentro de ella mando a encender una matris de leds, esto llamando a otra subrutina, lo hace perfectamente, pero despues de ese llamado a subrutina mando llamar otra secuencia lo unico que los diferencia es que esta enciende otro color de leds, y ahi es donde esta lo raro, mientras solo llame una subrutina no hay problema, pero al momento de que regresa de la primera y manda llmar la segunda se sale de la subrutina, sospechaba por algun desbordamiento de pila pero en el debug del mplab estube checando los niveles y todavia me quedan 3 niveles de pila libresno se si alguien pueda darme algun consejo o alguna idea de por que se pueda estar saliendo de la interrupcion, ya si se requiere pego el codigo, aunq ues ies un buen tramo en ensamblador  :(

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: ayuda con interrupciones
« Respuesta #1 en: 09 de Junio de 2010, 15:49:05 »
hola, pues el tema de interrupciones no es algo complicado, solo debes tener cierta regla para poder manejarlas sin problemas.
Para esto te diría que veas algun tutorial, este parece bien completito con algunos ejemplos básicos.
http://www.alos.5u.com/pic16f877/Modulo5.html
Tambien seria bueno que dispongas del datasheet del 16f877 para ver cuales son los registros que manejan las interrupciones.
INTCON, PIE1, PIE2, PIR1 y PIR2, en algunos PIC algunos mas pero estos casi todos los tienen.

Con respecto a tu programa, creo que estas haciendo muchas tareas dentro del manejo de la interrupción, en donde deberias hacer lo menos posible, como setear bits de banderas, incrementar algun contador, o cosas por el estilo.
Todo lo que sea manejo de puertos debes hacerlo en el programa principal.

Saludos, Willy
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.


 

anything