TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: remi04 en 13 de Junio de 2017, 10:44:05

Título: Interrumpir un "getc()"
Publicado por: remi04 en 13 de Junio de 2017, 10:44:05
Hola a todos. Sabiendo que la funcion getchar();  deja el programa ahí  esperando un caracter, lo que quiero es que si en ese momento se pulsa un pulsador conectado a b.3 interrumpir la espera del caracter y hacer break; a la funcion.

  ¿Es posible? 

  Supongo que usando interrupciones por cambio en rb se podria pero no sé si la espera de un getchar(); se puede interrumpir sin que se reciba nada.

  Saludos 
Título: Re:Interrumpir un "getc()"
Publicado por: RedPic en 13 de Junio de 2017, 11:04:20
No se si una vez invocado un getc() puede salirse de él sin recibir nada como no sea con algún tipo de timeout, pero al menos en CCS C, no se si en otros compiladores, tenemos el kbhit() que te devuelve true si hay algún dato esperando ser recibido. Así puedes llamar a getc() sólo cuando realmente vas a recibir algo.

Código: CSS
  1. if(kbhit()){
  2.    c=getc();
  3. }

Este código que he puesto nunca se para a menos que reciba algo y tampoco se para realmente ya que el getc() sólo se ejecuta el tiempo suficiente como para leer el dato e inmediatamente continúa.

No se si te servirá de algo  :mrgreen:

Título: Re:Interrumpir un "getc()"
Publicado por: remi04 en 13 de Junio de 2017, 12:00:44
Pues me sirve bastante por que podría hacer entonces:

Código: [Seleccionar]

while (push == 1) {
        if(kbhit()) {
            c=getchar();
        }
break;
}

push es el pulsador, pullup a +vdd, si se pulsa (push == 0)
  Se supone que así solo se recibe el dato si no está pulsado el pulsador y si realmente hay un dato para recibir.  Luego lo pruebo en casa.
Título: Re:Interrumpir un "getc()"
Publicado por: remi04 en 13 de Junio de 2017, 12:19:32
Al final lo he hecho así. Funcionando.  Muchísimas gracias...   

Código: [Seleccionar]
while (kbhit() == 0) {
        if (push == 0) return;
}
Título: Re:Interrumpir un "getc()"
Publicado por: RedPic en 13 de Junio de 2017, 15:14:10
Al final lo he hecho así. Funcionando.  Muchísimas gracias...   

Código: [Seleccionar]
while (kbhit() == 0) {
        if (push == 0) return;
}

Me alegro un montón  :mrgreen: