TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: antoniojdobarro en 12 de Febrero de 2011, 10:48:35

Título: Mientras no suelte tecla
Publicado por: antoniojdobarro en 12 de Febrero de 2011, 10:48:35
El código comprueba si hay un caracter a la entrada del pic a través del RS232, luego comprueba cual es y realiza una determinada acción.

¿Cómo puedo hace en caso de que pulse la tecla "a" que avance y generar un bucle para que no salga de él hasta que levante la tecla?


do{
if(bit_test(PIR,5)){
switch(getchar()){

case 'd':
avance();
break;

case 'a':
retroceso();
break;
}
}
else detencion();

}

while (x<10);
}

Título: Re: Mientras no suelte tecla
Publicado por: antoniojdobarro en 12 de Febrero de 2011, 11:24:07
O alguna idea para que realice alguna acción mientras pulso alguna tecla?
Título: Re: Mientras no suelte tecla
Publicado por: korpaztk en 12 de Febrero de 2011, 13:43:23
yo pondria por ej:

do
{
key = getc();
}while(key == 'a')

y ahi quedaria retenido en ese bucle mientras tengas presionada la tecla a (minuscula)

capaz q t es una pequeña ayuda, o capaz q mal entendi tu pregunta... si no es asi, sigue preguntando jeje capaz q t puedo dar una mano d vuelta


Título: Re: Mientras no suelte tecla
Publicado por: Nocturno en 13 de Febrero de 2011, 02:40:42
Creo que ese bucle no finalizará hasta que llegue otra tecla diferente a la "a", pero si dejan de llegar caracteres se quedará esperándolos en el getc.

A mi juicio, lo que necesitas saber es con qué frecuencia llegan las letras si se deja pulsada la tecla. Durante el tiempo entre una letra y la siguiente no puedes chequear la entrada porque no vas a encontrar nada, pero debes permanecer a la espera.
Una vez que hayas hecho la espera miras si ha llegado algo, y si es una "a", vuelta a empezar. En caso contrario sales del bucle.
Título: Re: Mientras no suelte tecla
Publicado por: pocher en 13 de Febrero de 2011, 07:08:45
Si, lo de korpatztk no funcionaria.

Mira a ver si te sirve esto:

Código: [Seleccionar]
#include <16F876.h>
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)

#define LCD_DATA_PORT getenv("SFR:PORTB")
#include <lcd.c>

char ch;
int bandera;

#int_rda
void serial_isr()
{
    ch=getchar();
    bandera=1;
}

void main()
{
lcd_init();
   enable_interrupts(global);
   enable_interrupts(int_rda);
while(1) 
{
if(bandera)
{
if (ch=='a')
{
lcd_gotoxy(1,1);
    printf(lcd_putc, "Valor %c",ch);
    }
    else
{
lcd_gotoxy(1,2);
    printf(lcd_putc, "Valor %c",ch);
    }   
    bandera=0;
    }
   }
}

Título: Re: Mientras no suelte tecla
Publicado por: antoniojdobarro en 13 de Febrero de 2011, 10:42:24
Solucionado, muchas gracias
Título: Re: Mientras no suelte tecla
Publicado por: korpaztk en 13 de Febrero de 2011, 11:58:13
tienen razon , despues me di cuenta del error :?, y bueno hay tiempo de aprender siempre jeje
Saludos.