Estoy haciendo que un microcontrolador 8051 se comunique de forma inalámbrica con una computadora. El microcontrolador enviará una cadena a su puerto serie (DB9) y la computadora recibirá esta cadena y la manipulará.¿Cómo puedo enviar una cadena en serie desde un 8051 solo UNA VEZ?
Mi problema es que no sé cómo hacer que el 8051 transmita la cadena solo una vez. Como necesito manipular la cadena en el extremo de la PC, debe ser recibida solo una vez. Actualmente, aunque en el código C estoy enviando la cadena una vez, en mi computadora estoy recibiendo la misma cadena continuamente. Supongo que esto se debe a que todo lo que está en el SBUF se transmite continuamente. ¿Hay alguna manera de que pueda enviar mi cadena solo una vez? ¿Hay alguna manera de vaciar el SBUF?
Intenté usar el pin RTS (Request to Send) (7º pin) en el DB9 porque leí en alguna parte que si negaba el voltaje en ese pin, detendría el flujo de datos al puerto serie. Entonces, lo que hice fue programar mi microcontrolador para enviar la cadena y luego enviar el nivel lógico 0 a un pin de salida que estaba conectado a mi pin DB9 RTS. Sin embargo, eso no funcionó.
¿Alguien tiene alguna sugerencia? Realmente los apreciaría.
EDITAR
El software que estoy usando en el PC es X-CTU para los módulos Xbee. Este es el código en mi microcontrolador:
include reg51.h
void SerTx(unsigned char);
void main(void)
{
TMOD = 0x20;
TH1 = 0xFD;
SCON = 0x50;
TR1 = 1;
SerTx('O');
SerTx('N');
SerTx('L');
SerTx('Y');
}
void SerTx(unsigned char x)
{
SBUF = x;
while(TI==0);
TI = 0;
}
Podría alguien por favor compruebe que es en realidad sólo una vez que el envío de la cadena?
EDITAR
Parece que Steve, brookesmoses y Neil dio en el clavo en la cabeza cuando me dijeron que era lo que ocurría después de mi función principal que estaba causando el problema. Acabo de probar el código sugerido por Steve (más específicamente el for (;;) y la definición de serTX fuera de main) y funcionó perfectamente. Es probable que el controlador se haya reiniciado y, por lo tanto, el mismo código sigue repitiéndose.
¡Muchas gracias por la ayuda! :)
El software que estoy usando en la PC es X-CTU para módulos Xbee. Este es el código en mi microcontrolador: #include void SerTx (unsigned char); void main (void) { \t TMOD = 0x20; \t TH1 = 0xFD; \t SCON = 0x50; \t TR1 = 1; \t \t \t SerTx ('O'); \t SerTx ('N'); \t SerTx ('L'); \t SerTx ('Y'); \t void SerTx (unsigned char x) { \t SBUF = x; \t while (TI == 0); \t TI = 0; } } ¿Alguien podría verificar que de hecho solo está enviando la cadena una vez? –
CodeConfused
Edite su pregunta e inserte el código, formateado como código, para que sea más fácil de leer. –
@CodeConfused: ¡Me alegra que todos hayamos encontrado una solución! Tengo dos solicitudes más para ti. (1) Para esta pregunta, y todas sus otras preguntas sobre Stack Overflow, marque una respuesta como "aceptada" haciendo clic en la marca grande por la que cree que proporciona la mejor respuesta a su pregunta. Esto es útil para otras personas que pueden tener la misma pregunta en el futuro, ya que de inmediato pueden ver la mejor respuesta. (2) En esta pregunta, formatee el código como código. Para hacerlo, edite la pregunta, seleccione el código y presione el botón de código (es el botón con 1s y 0s en él). Gracias. –