TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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
-
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.
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:
-
Pues me sirve bastante por que podría hacer entonces:
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.
-
Al final lo he hecho así. Funcionando. Muchísimas gracias...
while (kbhit() == 0) {
if (push == 0) return;
}
-
Al final lo he hecho así. Funcionando. Muchísimas gracias...
while (kbhit() == 0) {
if (push == 0) return;
}
Me alegro un montón :mrgreen: