elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Informática
| |-+  Electrónica
| | |-+  Interrupción externa ejecute función el tiempo que yo quiera
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Interrupción externa ejecute función el tiempo que yo quiera  (Leído 4,444 veces)
AjarDeNauer

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Interrupción externa ejecute función el tiempo que yo quiera
« en: 16 Marzo 2012, 19:04 pm »

Buenas tardes!

Para el código de mí reloj, uso el pic c compiler y uso el puerto B de mi pic como interrupción externa para unos pulsadores. Quiero conseguir que si pulso uno de los pulsadores y me salta a la función de interrupción que tendrá un switch case, no me vuelva automáticamente a la función principal cuando termina de ejecutarse la función de interrupción, quiero que se quede un tiempo mientras se está manipulando esa función...  es decir: mi función de interrupción recibe señales de los pulsadores para ir siendo modificada (tendrá un switch case también )y mientras se les dé a los pulsadores, el tiempo en la interrupción se vuelve a poner a 0... y cuando llevo un tiempo sin pulsar nada, quiero que salga de la función de interrupción automáticamente y me vuelva a la principal donde se había quedado.

La cuestión es que no sé que instrucción serviría para poder estar sin salir de esa función de interrupción al mismo tiempo que está el programa a la espera de recibir información de los pulsadores mientras dura un tiempo, un tiempo que he pensado con un delay pero tengo la duda de si con un delay, la función se queda ahí estancada simplemente... (kbhit(), getchar) ?? pero es para teclado no?)

Espero haber sido lo suficientemente explícito !

Gracias y saludos a todos.  :D


« Última modificación: 16 Marzo 2012, 19:19 pm por AjarDeNauer » En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: Interrupción externa ejecute función el tiempo que yo quiera
« Respuesta #1 en: 18 Marzo 2012, 04:56 am »

Tienes que hacer un ciclo dentro de la rutina de interrupción. Te pondré como ejemplo un pseudocódigo:

Código:
RB_isr() // Rutina de interrupción por el puerto B.
{
   conta_teclsinact=0;

   while(1) // Ciclo infinito.
   {
      tecla=leer_teclado(); // Lee el teclado.
      if(tecla) // Si hay tecla pulsada...
      {
         conta_teclsinact=0;

         // Aquí se procesa la tecla pulsada.
         switch(tecla)
         {
            case 'A': ...
            case 'B': ...
         }
         esperar_se_libere_teclado();
      }
      else // Si no hay tecla pulsada...
      {
         conta_teclsinact++;
         if(conta_teclsinact>=valor_maximo) break; // Si ya ha pasado un determinado tiempo sin pulsarse tecla, sale del ciclo.
      }
      delay_elquequieras(); // Retardo para examinar las teclas.
   }
} //Termina la rutina de interrupción.

La variable conta_teclsinact se utiliza para contar las veces consecutivas que no se detecta tecla pulsada. Esta cantidad está determinada por un valor máximo. Cuando la variable conta_teclsinact llega al valor máximo, se rompe el ciclo infinito y se termina la interrupción.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines