Autor Tema: Como puedo salir de la interrupción?????  (Leído 2254 veces)

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

Desconectado jaldales

  • PIC10
  • *
  • Mensajes: 6
Como puedo salir de la interrupción?????
« en: 28 de Octubre de 2003, 10:29:00 »
A ver. Tengo un programa que llama a una rutina que consiste en un bucle contador. Cuando interrupimos por el PORTB dejamos de contar. Yo quiero que al salirme de la interrupción no vuelva a ese bucle. Quiero que se salga del bucle y siga ejecutando la rutina.

¿COMO PUEDO HACER ESTO?


GRACIAS

Desconectado jorgeansuini

  • PIC18
  • ****
  • Mensajes: 340
RE: Como puedo salir de la interrupción?????
« Respuesta #1 en: 28 de Octubre de 2003, 10:36:00 »
Buenas:
Por lo que entiendo que queres hacer, me parece que dentro del bucle contador tendrias que incorporar la lectura de un bit de algun registro utilizado como flag. por ejemplo leer si un registro está en cero. En el caso de que se produzca la interrupción,dentro de la rutina de interupción tendrias que escribir este registro con 1 y retornar de la interrupción, vulviendo al bucle contador,cuando leas que el registro está en 1, no deberia incrementarse el contador.-
Espero que se entienda.-
Jorge

Desconectado jaldales

  • PIC10
  • *
  • Mensajes: 6
RE: Como puedo salir de la interrupción?????
« Respuesta #2 en: 28 de Octubre de 2003, 11:45:00 »
Gracias por el interes y me explico mejor.

     Estoy midiendo una distancia por ultrasonidos, para ello transmito un pulso y empiezo a contar el tiempo que tardo en recibir el pulso reflejado. En funcion del tiempo hayo la distancia.
     Pues yo tengo un bucle de empieza a contar hasta que se activa la interrupción por cambio en RB4. En este momento yo tengo en unas variables el tiempo que ha tardado en recibir el pulso transmitido.
     La Cuestion es que yo una vez que haya interrumpido y salga de la rutina de interrupción quiero que el programa continue fuera de ese bucle.
    En mi caso el bucle se invoca tras un "call MEDIR". Yo quiero que tras la interrupción yo retorne de la rutina MEDIR y para ello es necesario salir del bucle y volver con "retlw".
    El problema que tengo es que cuando pongo "retfie" al final de la rutina de interrupción vuelve al bucle
¿PODEIS AYUDARME?

GRACIAS

Desconectado gbene

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 35
RE: Como puedo salir de la interrupción?????
« Respuesta #3 en: 28 de Octubre de 2003, 17:06:00 »
Hola Jaldales:

Me sigue pareciendo valida la solucion de jorgeansuini. Otra alternativa que se me ocurre podria ser no tener rutina “MEDIR” y utilizar directamente el TMR0,1 o el que fuere. De la siguiente forma, cuando transmitis el pulso, pones a cero el TMRx y cuando se produce la interrupcion   en RB recuperas el valor que tiene el TMRx en ese momento y haces el calculo de la distancia.

Suerte.
Guillermo

Desconectado ZarruZ

  • PIC10
  • *
  • Mensajes: 22
RE: Como puedo salir de la interrupción?????
« Respuesta #4 en: 29 de Octubre de 2003, 08:38:00 »
jaldales, mi pregunta es, bajaste la bandera que te indica que existe una interrupcion, en el registro intcon ya sea tmr0if si es una int por timer cero o rbif si es por el puerto b, ojala esto te ayude, sino sigue dandonos datos

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: Como puedo salir de la interrupción?????
« Respuesta #5 en: 29 de Octubre de 2003, 09:50:00 »
Exacto, Zarruz ha dado en el claro. Tienes que volver a  configurar la máscara en el registro de interrupciones, con el bit de rbif (lo que propone Guille es más costoso, creo yo, para el algoritmo que quieres hacer es mejor usar la interrupción por cambio de estado en RB4)

Ya nos contarás!
saludos
Elena

Desconectado carmalcoz

  • PIC10
  • *
  • Mensajes: 29
RE: Como puedo salir de la interrupción?????
« Respuesta #6 en: 29 de Octubre de 2003, 21:55:00 »
Saludos, yo haria lo sgt:

> Pondría una bucla infinita o de espera de interrupción. Utilizaria como contador algun Timer, digamos el timer 0, configurado para interrumpir cada 200us, 500us o 1ms según lo requerido. Dentro de la rutina de atención del timer incrementaría dos registros contadores (H y L), primero L y cuando desborde entonces H.
Una vez fuera, esperaría por la otra interrupción, la externa por puerto B. Dentro de la rutina de atención de la interrupción  externa haría lo que tenga que hacer con el valor de los registros contadores (transmisión, eeprom, etc.), una vez hecho esto el programa debería retornar al punto donde se hace el envío del ultrasonido para empezar el ciclo, o simplemente acabar. Bueno espero haber ayudado…

Desconectado jaldales

  • PIC10
  • *
  • Mensajes: 6
RE: Como puedo salir de la interrupción?????
« Respuesta #7 en: 30 de Octubre de 2003, 13:37:00 »
GRACIAS A TODOS.
AL FINAL LO HE ARREGLADO PONIENDO DENTRO DEL BUCLE UNA CONDICIÓN QUE ME INDICASE SI HABÍA INTERRUMPIDO O NO

MUCHAS GRACIAS A TODOS DE CORAZÓN


 

anything