J'essaie de faire communiquer un microcontrôleur avec un programme sur mon bureau. J'utilise des connexions de port série avec les radios Xbee aux deux extrémités.Comment envoyer et recevoir en continu avec le port série sans fil 8051?
La communication fonctionne correctement lorsque j'envoie quelque chose du microcontrôleur au bureau et que le programme sur le bureau envoie ensuite quelque chose au microcontrôleur.
Cependant, lorsque j'exige que les informations soient envoyées du contrôleur au programme de bureau en continu jusqu'à ce que le programme de bureau envoie une réponse particulière, cela ne fonctionne pas.
Voici le code pour ce dont je parle:
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 fonction BuildString() construit simplement une chaîne sur la base de certaines entrées de capteurs. Les fonctions d'envoi et de réception fonctionnent normalement, mais lorsque j'en ai besoin pour envoyer et recevoir en continu, comme dans la fonction Configure() ci-dessus, cela ne fonctionne pas.
Des suggestions? Je les apprécierais vraiment.
Un hack rapide et sale qui rendra votre code plus fiable est de limiter le temps que vous attendez que RI soit défini sur true. Définissez une variable sur 65535 et décrémentez. Si elle atteint 0 avant d'avoir un octet, abandonnez et essayez d'envoyer à nouveau. Si vous avez vraiment besoin d'une version basée sur l'interruption de votre code, je peux vous convaincre - en général, ces versions sont beaucoup plus fiables. –