Я пытаюсь заставить микроконтроллер общаться с программой на моем рабочем столе. Я использую соединения последовательного порта с радио Xbee на обоих концах.
Связь работает нормально, когда я отправляю что-то с микроконтроллера на рабочий стол, а программа на рабочем столе затем отправляет что-то обратно на микроконтроллер.
Однако, когда я требую, чтобы информация непрерывно отправлялась с контроллера в настольную программу, пока настольная программа не отправит конкретный ответ, это не сработает.
Вот код того, о чем я говорю:
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];
}
}
Функция BuildString() просто создает строку на основе входных данных некоторых датчиков. Функции отправки и получения обычно работают нормально, но когда мне нужно, чтобы они непрерывно отправляли и получали, как в приведенной выше функции Configure(), это не работает.
Какие-либо предложения? Я был бы очень признателен им.