|
|
在單片機(jī)串口通信開(kāi)發(fā)中,使用上位機(jī)的人機(jī)交互界面豐富了用戶(hù)體驗(yàn),也能相應(yīng)的擴(kuò)展功能,彌補(bǔ)單片機(jī)單一的任務(wù)處理能力。使用單片機(jī)串口通信,接口簡(jiǎn)單,易于上位機(jī)編程的實(shí)現(xiàn)。如果在VisualBasic編寫(xiě)串口通信程序中,實(shí)現(xiàn)自動(dòng)調(diào)入計(jì)算機(jī)存在的串口的功能,能大大方便了用戶(hù)輕松的連接到想要的串口,這將是一個(gè)更好的用戶(hù)體驗(yàn)。目的是使得用戶(hù)不用大費(fèi)周章去尋找串口號(hào)。實(shí)現(xiàn)這一功能并不難實(shí)現(xiàn),下面阿浩介紹這一種方法。
1.JPG (43.88 KB, 下載次數(shù): 50)
下載附件
2013-7-13 00:21 上傳
VB與串口VisualBasic可以打開(kāi)16個(gè)串口,但是通常計(jì)算機(jī)只配置一個(gè)或者兩個(gè)串口,或者根本就沒(méi)有串口,這時(shí)就需要我們使用串口轉(zhuǎn)USB來(lái)支持。而且有時(shí)計(jì)算機(jī)的串口還可能被其他程序使用,因此,為了增強(qiáng)軟件使用的魯棒性,必須增加一段代碼,用語(yǔ)龐端本計(jì)算機(jī)可以利用的有效串口數(shù),如果串口在使用,也應(yīng)加入可使用的行列來(lái),只是在使用過(guò)程中要考慮其是否已經(jīng)被其他程序打開(kāi),為了用戶(hù)提示相應(yīng)的信息。
關(guān)于VB編寫(xiě)串口通信程序詳見(jiàn) 《PC機(jī)與單片機(jī)串行通信的實(shí)現(xiàn)》、《VB平臺(tái)下串口通信的實(shí)現(xiàn)》
程序調(diào)入串口的方法調(diào)入計(jì)算機(jī)可用的串口,簡(jiǎn)單的方法是嘗試去打開(kāi)那個(gè)串口。簡(jiǎn)單來(lái)說(shuō),我們只需要對(duì)16個(gè)串口號(hào)進(jìn)行逐個(gè)掃描。掃描的方法是:嘗試打開(kāi)該串口,串口可以打開(kāi),則加入列表中去,供用戶(hù)連接;否則計(jì)算機(jī)不存在那個(gè)串口或者被其他程序占用時(shí),VB將產(chǎn)生一個(gè)錯(cuò)誤。
調(diào)入串口時(shí)錯(cuò)誤的處理在調(diào)入串口的過(guò)程中,會(huì)產(chǎn)生一些錯(cuò)誤。這時(shí)我們必須捕獲錯(cuò)誤并解決掉,否則程序無(wú)法往下執(zhí)行。如果串口存在并被其他程序占用,如已處于打開(kāi)狀態(tài),也會(huì)發(fā)生錯(cuò)誤。我們需要編寫(xiě)一段錯(cuò)誤處理函數(shù),當(dāng)發(fā)生錯(cuò)誤的時(shí)候,進(jìn)入錯(cuò)誤處理函數(shù)。
程序代碼:
'--------------------------------------------------------------------------' 調(diào)入計(jì)算機(jī)存在的串口'版本:V1.0.2'程序設(shè)計(jì):JH單片機(jī)'--------------------------------------------------------------------------Private Sub CommLoad() On Error GoTo ErrLine '如果錯(cuò)誤,進(jìn)入錯(cuò)誤處理程序 Dim I As Integer '定義可訪問(wèn)的串口數(shù) Dim Counter As Integer '用于記錄經(jīng)檢查可以使用的串口號(hào) Counter = 0 '計(jì)數(shù)器清零 For I = 1 To 16 '循檢可能存在的16個(gè)串口 MSComm.CommPort = I '將每個(gè)串口依次打開(kāi) MSComm.PortOpen = True '打開(kāi)串口 If MSComm.PortOpen = True Then '如果打開(kāi)成功,說(shuō)明該串口可用 MSComm.PortOpen = False '檢查完畢,關(guān)閉串口 CboSerialPort.AddItem "COM" + CStr(I), Counter '將可用串口增加到組合框內(nèi) Counter = Counter + 1 '記數(shù)器加1 End If Next I CboSerialPort.ListIndex = 0 '將第一個(gè)可用串口設(shè)為默認(rèn)值 Exit Sub '跳出程序ErrLine: If Err.Number = 8005 Then '如果在處理過(guò)程中有串口被其它程序打開(kāi),則應(yīng)將其加入組合框內(nèi) CboSerialPort.AddItem "COM" + CStr(I), Count '將可用串口增加到組合框內(nèi) Counter = Counter + 1 '計(jì)數(shù)器加1 End If Resume Next '回到出錯(cuò)入口處,繼續(xù)執(zhí)行循檢串口程序!End Sub代碼簡(jiǎn)述上述代碼利用Err函數(shù)進(jìn)行串口檢查,首先對(duì)可能存在的16個(gè)串口進(jìn)行掃描,逐個(gè)打開(kāi),如果串口能打開(kāi),說(shuō)明其存在并且是空閑的,然后關(guān)閉該串口,將其加入端口號(hào)組合框內(nèi),并且計(jì)數(shù)器Counter加1,進(jìn)行下一個(gè)端口掃描。反之端口不能打開(kāi),則會(huì)出現(xiàn)錯(cuò)誤,轉(zhuǎn)入錯(cuò)誤處理函數(shù)進(jìn)行處理。
|
|