コンピューター(VB.NET)からシリアル接続されたAT89s52にファイルをバイト単位で送信する必要があります。
送信されたすべてのバイトには、マイクロコントローラーで実行する必要のある作業があります。
これが私のCコードのバイトの受信に関連する部分です:
SCON = 0x50;
TMOD = 0x20; // timer 1, mode 2, 8-bit reload
TH1 = 0xFD; // reload value for 9600 baud
TR1 = 1;
TI = 1;
again:
while(RI!=0)
{
P1=SBUF; // show data on led's
RI=0;
receivedBytes++;
}
if (key1==0)
{
goto exitreceive; // break receiving
}
show_lcd_received_bytes(receivedBytes);
// here is one more loop
// with different duration for every byte
goto again;
そして、バイトを送信するためのVB.NETコードは次のとおりです。
For a As Integer = 1 To 10
For t As Integer = 0 To 255
SerialPort1.Write(Chr(t))
Next t
Next a
問題は、mCには受信したすべてのバイトの後に実行する作業があり、VB.NETはそれを認識せず、バイトの送信が速すぎるため、mCではすべてのバイトの一部(約10%)が終了することです。「Sleep(20)」をVBループに組み込むことができます。そうすれば動作しますが、バイトごとに処理に異なる時間が必要であり、通信が遅くなることは許容できないため、多くの無駄な時間があります。
さて、私の質問は、8051がUARTにビジー状態を設定できるかどうかです。これは、送信前にVBが読み取って、バイトを送信するかどうかを決定することができます。または、他の方法で説明されているような通信を設定するにはどうすればよいですか?また、mC側でシリアル割り込みのあるバイトを受信しようとすると、同じ結果になります。
(予想通り)コンピュータにデータをうまく送ることができるので、ハードウェアは確かに大丈夫です。