你可以預先約定一個截止附,讀取的字節統統放到緩存區里,直到讀到截止附再處理、顯示。

創新互聯建站是專業的伽師網站建設公司,伽師接單;提供成都網站設計、成都做網站、外貿網站建設,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行伽師網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
不知道你是不是用51單片機往串口發數據,是的話那是因為51的sbuf最多存放8個字節,所以你發12個字節會分成兩次發完。還有在接收的時候最好定義好通信協議,比如加一個偵頭,一個偵尾,通過這兩個字節的內容來接收數據。
老兄,提問還是給點懸賞分嘛,不要吝嗇哪點分,知識是無價的,你給得越多,回答你的人才會越多。
串口通信最終都是用二進制傳輸的,你用代碼把二進制轉化成十六進制就可以了。不需要額外設置。
你可以這樣操作:
Form1.BeginInvoke(Sub()
'一些操作
End Sub)
這樣主線程就會放下手里的事情并執行Sub里的操作了
首先:
textbox里沒有顯示,是因為SerialPort1和TextBox2不是同一線程創建的,需要跨線程操作。需要用到委托,這樣才能顯示出來。
其次:
我覺得用串口的接收數據事件更好一些。
下面代碼供參考:
'----------------------
'串口接收數據事件,其實比用定時器更好,
'觸發事件的條件可以自己在form_load中設置ReceivedBytesThreshold屬性數值,默認為ReceivedBytesThreshold=1
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim strRecvData As String = ""
strRecvData = SerialPort1.ReadExisting
Call disPlayComData(strRecvData)
End Sub
Delegate Sub callback(ByVal strT As String) '定義委托
Sub showString(ByVal comdata As String) '顯示結果
Me.TextBox1.Text = "結果:" comdata
End Sub
Sub disPlayComData(ByVal strTmp As String) '判定是否為跨線程
If Me.TextBox1.InvokeRequired Then
Dim d As New callback(AddressOf showString)
Me.Invoke(d, New Object() {strTmp})
Else
Me.TextBox1.Text = strTmp
End If
End Sub
Imports System
Imports System.IO.Ports
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'獲取計算機有效串口
Dim ports As String() = SerialPort.GetPortNames() '必須用命名空間,用SerialPort,獲取計算機的有效串口
Dim port As String
For Each port In ports
portnamebox.Items.Add(port) '向combobox中添加項
Next port
'初始化界面
網頁標題:vb.net如何串口數據,vb 串口發送數據
文章網址:http://www.js-pz168.com/article14/hoghde.html
成都網站建設公司_創新互聯,為您提供網頁設計公司、云服務器、網站收錄、App設計、商城網站、品牌網站設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯