Autor Tema: Interrumpir un "getc()"  (Leído 4862 veces)

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

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Interrumpir un "getc()"
« 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 

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re:Interrumpir un "getc()"
« Respuesta #1 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:

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Interrumpir un "getc()"
« Respuesta #2 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.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Interrumpir un "getc()"
« Respuesta #3 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;
}

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re:Interrumpir un "getc()"
« Respuesta #4 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:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania