Autor Tema: Tiempo espera  (Leído 3524 veces)

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

Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Tiempo espera
« en: 10 de Febrero de 2011, 08:14:25 »
Bien, supongamos que tengo el siguiente desarrollo ne el pic, a la espera de un caracter por el puerto rs232:

switch (getchar()){
   case '2':
   retroceso();
   break;
   
   case '5':
   avance();
   break;
   
   case '3':
   detencion();
   break;
}

Lo que quiero hacer es que solamente espere durante un tiempo si llega un caracter, de lo contrario que continue, ¿Cómo puedo hacer ese temporizador?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Tiempo espera
« Respuesta #1 en: 10 de Febrero de 2011, 09:34:08 »
  Todo depende de como funcione getchar(). Si dicha función se queda a la espera de que llegue un caracter si o si, no te va a servir.
  Si estás usando el RS232 por hard, ¿Por qué no buscas la manera de leer el bit RCIF manualmente? Algo similar a los siguiente

Código: C
  1. if (bit_test(PIR1,RCIF) == 1) // si hay caracter....
  2. {
  3. .........
  4. }
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Re: Tiempo espera
« Respuesta #2 en: 10 de Febrero de 2011, 09:45:11 »
Bien, esa es la idea y la solución, el problema es que el compilador CCS no reconoce PIR1,RCIF.

Alguna idea de como leer ese bit?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Tiempo espera
« Respuesta #3 en: 10 de Febrero de 2011, 10:23:45 »
Bien, esa es la idea y la solución, el problema es que el compilador CCS no reconoce PIR1,RCIF.

Alguna idea de como leer ese bit?

Revisa la ayuda (F12) y busca RS232 o kbhit()


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Tiempo espera
« Respuesta #4 en: 10 de Febrero de 2011, 10:40:55 »
Bien, esa es la idea y la solución, el problema es que el compilador CCS no reconoce PIR1,RCIF.

Alguna idea de como leer ese bit?

  Podrías revisar el archivo .H del pic que estés usando y ver como llama tanto a ese registro como al bit. También consultar el datasheet del PIC en cuestión.

  Por ejemplo yo se que en un PIC16F877 el registro PIR1 tiene la dirección 0x0c y que el bit RCIF es el 5. Entonces en CCS podría intentar algo similar a esto

Código: C
  1. #byte PIR1 0x0c // creo que se usaba asi, corregirlo si es necesario
  2.  
  3. .....
  4.  
  5. if (bit_test (PIR1,5) == 1)
  6.  
  7. // o directamente
  8.  
  9. if (bit_test (0x0c,5) == 1)
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Tiempo espera
« Respuesta #5 en: 10 de Febrero de 2011, 13:51:01 »
Bien, esa es la idea y la solución, el problema es que el compilador CCS no reconoce PIR1,RCIF.

Alguna idea de como leer ese bit?

  Podrías revisar el archivo .H del pic que estés usando y ver como llama tanto a ese registro como al bit. También consultar el datasheet del PIC en cuestión.

  Por ejemplo yo se que en un PIC16F877 el registro PIR1 tiene la dirección 0x0c y que el bit RCIF es el 5. Entonces en CCS podría intentar algo similar a esto

Código: C
  1. #byte PIR1 0x0c // creo que se usaba asi, corregirlo si es necesario
  2.  
  3. .....
  4.  
  5. if (bit_test (PIR1,5) == 1)
  6.  
  7. // o directamente
  8.  
  9. if (bit_test (0x0c,5) == 1)

Si puede ser así, pero ya que usa CCS, para que re-inventar la rueda  :rolleyes: Hay funciones dedicadas.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Tiempo espera
« Respuesta #6 en: 10 de Febrero de 2011, 23:24:37 »
  Sí, lo sé Suky y tenés razón. Pero como antoniojdobarro comenta que tiene problemas con la función kbhit() le sugerí esta forma para ver si le funcionaba.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
Re: Tiempo espera
« Respuesta #7 en: 11 de Febrero de 2011, 10:47:33 »
Para realizar esa espera de una caracter y continuar utilizo :
Código: [Seleccionar]
#use rs232(force_sw,baud=57600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=modem,TIMEOUT=100,ERRORS)
De el manual de CCS
Citar
TIMEOUT=X
 To set the time getc() waits for a byte in milliseconds.  If no character comes in within this time the RS232_ERRORS is set to 0 as well as the return value form getc().  This works for both UART and non-UART ports.

 
No me funciono en todas las versiones de el compilador, con la que trabajo y funciona es con la version 4.093
Con la anterior declaracion espera 100 milisegundos y si no llega RS232_ERRORS es cargado con 0, y el valor que retorna getc() tambien es 0.


 

anything