TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: DarkVect en 26 de Enero de 2010, 20:41:44
-
Hola,
Tengo un pequeño problemilla con la temporización en una comunicación PIC - PC por RS-232. Cuando en el PC envío un comando al PIC (1 único byte) el PIC responde perfectamente pero cuando quiero confirmar si el PIC está listo para recibir un comando y luego enviarlo no me funiona el invento. Sería algo así:
PIC PC
------------
¿Estás listo? (1 byte)
ACK
Te envío el comando (1 byte)
ACK
Vosotros dejáis un tiempo entre el getc y el putc(ACK) y el nuevo getc y el putc(ACK)? Cuánto?
En el programa del PC (Visual basic) también lo ponéis?
Gracias!!
-
SOLUCIÓN:
Usar un timer como timeout:
set_timer0(0);
f_com_tout = 0;
while(!f_com_tout) //TIMEOUT
{
restart_wdt();
if(kbhit())
{
alr_test = getc();
putc(ACK);
return;
}
}
putc(NAK);
-
SOLUCIÓN:
Usar un timer como timeout:
set_timer0(0);
f_com_tout = 0;
while(!f_com_tout) //TIMEOUT
{
restart_wdt();
if(kbhit())
{
alr_test = getc();
putc(ACK);
return;
}
}
putc(NAK);
No entendí nada! para que configuras el timer0 si no lo utilizas?
f_com_tout = 0;
while(!f_com_tout) //TIMEOUT
condición siempre verdadera coloca un
while(true)
me imagino que estas utilizando el wdt en caso que el PIC se pierda o quede esperando un bit perdido.
-
¿Cómo? Claro que utilizo el timer0. Dentro de la ISR del timer0 es donde se coloca f_com_tout a 1 al pasar el tiempo programado como timeout.
Si pones un while(TRUE) y no te mandan ningún caracter te quedas dentro del bucle para siempre.
El restart_wdt() es porque el periodo del watchdog es menor que el timeout de recepción.
-
Una consulta Dark en la función putc() el micro se queda esperando en esa linea hasta que se termine de transmitir el byte?
o solo deja el dato en el buffer de transmisión y sale de inmediato.
saludos.
-
Una consulta Dark en la función putc() el micro se queda esperando en esa linea hasta que se termine de transmitir el byte?
o solo deja el dato en el buffer de transmisión y sale de inmediato.
saludos.
La funcion putc() escribe un byte por el PIN indicado. Es decir, hasta que no está transmitido no termina esa función.
-
¿Cómo? Claro que utilizo el timer0. Dentro de la ISR del timer0 es donde se coloca f_com_tout a 1 al pasar el tiempo programado como timeout.
Si pones un while(TRUE) y no te mandan ningún caracter te quedas dentro del bucle para siempre.
El restart_wdt() es porque el periodo del watchdog es menor que el timeout de recepción.
JAJAJA ok entonces coloca el código completo, porque no se entiende nada..
-
Una pregunta. Para que vas a utilizar un retardo si para eso son los ACK, con los ACK aseguras que los dispositivos no se envien datos hasta cuando reciban los ACK. Si quieres puedes esculcar dentro del archivo y sacar las lineas que te interesen. Exitos