簡體   English   中英

在c#中從串口讀取字符

[英]Read characters from serial port in c#

您好,我正在使用 Read() 方法從串行端口讀取 10 個字符,例如 0123456789。 實際上,這些字符是由 PIC 微控制器發送的。

這是我的代碼:

serialPort1.PortName = "com4";
serialPort1.BaudRate = 9600;
serialPort1.Open();
char[] result = new char[10];
serialPort1.Read(result, 0, result.Length);
string s = new string(result);
MessageBox.Show(s);
serialPort1.Close();

當我運行代碼時,會出現一個消息框並只顯示第一個字符。 消息框中僅顯示“0”。

我哪里錯了??

你做錯的是沒有注意 Read() 的返回值。 這告訴您讀取了多少字節。

串行端口是非常慢的設備,在典型的 9600 波特率設置下,傳輸一個字節需要一毫秒。 對於現代處理器來說,這是一個巨大的時間,它可以在一毫秒內輕松執行幾百萬條指令。 Read() 方法會在某些字節可用時立即返回,如果您人為地使程序變慢以便驅動程序有足夠的時間來接收所有字節,則只能獲得全部 10 個字節。

一個簡單的解決方法是繼續調用 Read() 直到你得到它們:

char[] result = new char[10];
for (int len = 0; len < result.Length; ) {
   len += serialPort1.Read(result, len, result.Length - len);
}

另一種常見的解決方案是發送一個唯一的字符來指示數據的結尾。 換行符 ('\\n') 是一個很好的選擇。 現在它變得簡單多了:

string result = serialPort.ReadLine();

現在還支持任意響應長度。 只需確保數據不包含換行符即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM