我必須從計算機(VB.NET)逐個字節地發送文件到串行連接的AT89s52。
每個發送字節都需要一些時間在微控制器上做一些工作。
這裏是一個接收的字節我的C代碼相關部分:8051 UART,串行接收字節
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
問題是,三菱商事有一些工作之後都要做收到的字節和VB.NET不知道這一點,併發送字節太快,所以在mC完成了所有字節的一部分(約10%)。 我可以合併「睡眠(20)」在VB循環螞蟻然後事情會工作,但我有很多浪費時間,因爲每個字節需要不同的時間來處理,這將是不可接受的慢速通信。
現在,我的問題是,如果8051可以設置一些繁忙狀態的UART,VB可以讀取之前發送決定發送字節或不。 或者如何以其他方式設置所述的通信? 我也嘗試接收具有相同結果的mC端串行中斷字節。
硬件肯定是好的,因爲我可以很好地發送數據到計算機(如預期)。
降低波特率。 – 2012-08-10 12:05:28
爲什麼在通信正常工作時降低波特率? – 2012-08-10 12:54:38
當你失去了90%的數據,因爲微控制器無法跟上,那麼你通常不會說「通信工作正常」。 – 2012-08-10 12:59:01