マイクロコントローラーをデスクトップ上のプログラムと通信させようとしています。両端で 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() 関数のように、連続して送受信する必要がある場合は機能しません。
助言がありますか?本当に感謝しています。