Estoy tratando de hacer que un microcontrolador se comunique con un programa en mi escritorio. Estoy usando conexiones de puerto serie con radios Xbee en ambos extremos.¿Cómo envío y recibo continuamente con puerto serie inalámbrico en 8051?
La comunicación funciona bien cuando envío algo desde el microcontrolador al escritorio y luego el programa en el escritorio envía algo al microcontrolador.
Sin embargo, cuando requiero que la información se envíe continuamente desde el controlador al programa de escritorio hasta que el programa de escritorio envía una respuesta en particular, no funciona.
Aquí está el código para lo que estoy hablando:
unsigned char ans = 'N';
unsigned int count = 0;
void main(void)
{
while(1)
{
if(count == 0)
{
Configure();
count = 1;
}
//there is some more code here but is irrelevant to the serial communication
}
}
void Configure()
{
//Repeat this until the user accepts the sent string as correct
while(ans == 'N')
{
BuildString();
Send();
Receive();
}
}
void Send()
{
unsigned int i;
TMOD = 0x20;
TH1 = 0xFD;
SCON = 0x50;
TR1 = 1;
for(i=0; i<4; i++)
{
SBUF = toSend[i];
while(TI == 0);
TI = 0;
}
}
void Receive()
{
unsigned int j;
TMOD = 0x20;
TH1 = 0xFD;
SCON = 0x50;
TR1 = 1;
for(j=0; j<2; j++)
{
while(RI == 0);
Received[j] = SBUF;
RI = 0;
}
if(count == 0)
ans = Received[1];
else
{
RunType = Received[0];
Move = Received[1];
}
}
La función BuildString() simplemente construye una cadena sobre la base de algunas entradas de sensor. Las funciones de enviar y recibir funcionan bien, pero cuando las necesito para enviar y recibir continuamente, como en la función Configurar() anterior, no funciona.
¿Alguna sugerencia? Realmente los apreciaría.
Un hack rápido y sucio que hará que su código sea más confiable es limitar la cantidad de tiempo que esperará a que RI se establezca en verdadero. Establezca una variable a 65535 y decremente. Si llega a 0 antes de obtener un byte, abandone e intente enviar de nuevo. Si realmente necesitas una versión basada en interrupciones de tu código, puedo llamarte; en general, estos son mucho más confiables. –