vb串口通信編程_第1頁
vb串口通信編程_第2頁
vb串口通信編程_第3頁
vb串口通信編程_第4頁
vb串口通信編程_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、vb 串口通信編程一、概述串口通訊作為一種古老而又靈活的通訊方式,被廣泛地應用于PC間的通訊以及 PC和單片機之間的通訊之中。提到串口通訊的編程,人們往往立刻想到C匯編等對系統(tǒng)底層操作支持較好的編程語言以及大串繁瑣的代碼。實際上, 只要我們借助相關 ActiveX 控件的幫助, 即使是在底層操作一向不被人看好的 VB 中,一樣能夠實現串口通訊,甚至其實現方法和 C匯編相比,要更加快捷方便。下面,筆者就介紹一下在 VB 中實現串口通訊的方法。在 Visual Basic 中有一個名為 Microsoft Communication Control (簡稱 MSCon)m的通訊控 件。我們只要通

2、過對此控件的屬性和事件進行相應編程操作, 就可以輕松地實現串口通訊。 下面,筆者就簡要地介紹一下MSComm 控件的使用方法。二、MSComm控件的主要屬性、事件1、 MSComm 的屬性由于 MSComm 控件屬性很多,在此筆者僅介紹與實現串口通訊密切相關的核心屬性。Commport設置通訊所占用的串口號。如設成 1 (默認值),表示對 Com1進行操作。Setting :對串口通訊的相關參數。包括串口通訊的比特率,奇偶校驗,數據位長度、停止 位等。其默認值 是“9600,N,8,1 ”,表示串口比特率是9600bit/s,不作奇偶校驗,8位數據 位,1個停止位。Portopen :設置串口

3、狀態(tài),值為 True時打開串口,值為 False時關閉串口。Input :從輸入寄存器讀取數據,返回值為從串口讀取的數據內容,同時輸入寄存器將被 清空。Ouput:發(fā)送數據到輸出寄存器。InBufferCount :設置輸入寄存器所存儲的字符數,當將其值設為 0 時,則輸入寄存器將被 清空。In putMode :設置從輸入寄存器中讀取數據的形式。若值為0,則表示以文本形式讀??;值為 1,則表示以 二進制形式讀取。OutBufferCount :設置輸出寄存器所存儲的字符數,當將其值設為 0時,則輸出寄存器將 被清空。RThreshold :設置在 MSComm 控件設置 CommEve nt

4、 屬性為 comEvReceive 并產生 On Comm 事件之前要接受的字符 數。CommEve nt屬性:返回最近的通訊事件或錯誤。通過對它具體屬性值的查詢,我們就可 以獲得通訊事件和通訊錯誤的完整信息。當其值是comEvReceive時表示接收到數據。2、MSComm 的事件除了公共事件之外, MSComm只有一個On Comm事件。當CommEve nt屬性值變化時將發(fā) 生On Comm事件,指示發(fā)生 一個通訊事件或錯誤。當我們設置Rtheshold屬性值為0時,將使得捕獲comEvReceive事件無效。三、串口通訊編程實例在完成了對MSComm控件的簡要介紹之后,筆者就以實際程序

5、為例,介紹一下串口通訊 的具體實現方法。1、PC機間的串口通訊(1)、實現方法:A、新建一個窗體,在上面放兩個Text控件、兩個 CommandButton控件和兩個Label控件(如圖 1.bmp 所示)。具體見下表:End Sub輸入所要發(fā)送的信息顯示接收到的信息送 出 提示提示在彈出的菜單中選擇“部件”, 在彈出的窗,將其選中, 在點擊“應用”、“關閉”,Com1 對 Com1 的對應連接,也可以使用Text Text1 Text Text2 CommandButtonCommand1發(fā)CommandButtonCommand2退LabelLabel1發(fā)送的數據LabelLabel2接收

6、的數據B在控件工具箱中的空白處點擊鼠標右鍵,口中的控件列表中 找到“ Microsoft Comm Control 在控件工具欄中就會出現一個電 話的小圖標。C用串口線將兩臺電腦連接起來。您可以使用Com1和Com2的交叉連接。本程序使用的是 Com1 對 Com1 的連接。D輸入以下代碼:Private Sub Command1_Click()'. 發(fā)送數據MSComm1.OutBufferCount = 0 '. 清空輸出寄存器MSCo m m 1 .Output = Text1 .Text '. 發(fā)送數據Private Sub Command2_Click() &

7、#39;. 退出Unload MeEnd SubPrivate Sub Form_Load()'. 初始化MSComm1.CommPort= 1'.使 用Com1 口MSComm1.Settings= "9600,n,8, 1 " ' . . . 設置通訊參數MSComm1.PortOpen= True '. 打開串口End SubPrivateSubMscomm1_Oncomm()'. 通訊事件發(fā)生Select Case M S C o m m 1 . C o m m EventCaseco mEvReceive ' . .

8、 . 有接受事件發(fā)生Text2.Text = MSComm1.Input'. 接受顯示數據MSComm1.InBufferCount=0'. 清空輸入寄存器End SelectEnd Sub2、PC 機與單片機之間的通訊PC 機與單片機之間的通訊被廣泛的用于工業(yè)、醫(yī)療測控等領域之中。 在應用中,我們通 常將單片機作為“感 受器”和“效應器”,負責數據采集、響應計算機發(fā)出的指令對電路 進行控制,有時也進行一些簡單的運算, 最后再將執(zhí)行數據反饋給計算機處理。本程序將 實現在PC機上輸入一個0-255之間的整數,將此數據發(fā)送到單片機,單片機接收到數據后,將數據在顯示管上顯示,再將此數

9、除以2,將得數返回給 PC機。(運行效果如圖 3.BMP所示)其實現方法如下:A、同PC機間通訊的實現方法 A-B。B連接電腦和單片機。 注意!由于PC機端的RS232電平與單片機端 TTL的并不不匹配, 故應注意電平轉換。C在VB中輸入以下代碼:Private Sub Mscomm1_Oncomm()'. 通訊事件發(fā)生Dim indata As VariantDim bte(0)As ByteSelectCaseMSComm1.CommEventCasecomEvReceive'. 有接受事件發(fā)生indata = MSComm1.Input' 注意!要通過MSComm

10、控件發(fā)送或接收二進制數據必須用Variant類型的變量對二進'制yte類型的變量進行轉換!bte(0)= AscB(indata)Text2.Text = bte(0)MSComm1.InBufferCount = 0 '. 清空輸入寄存器End SelectEnd SubPrivate Sub Command1_Click()'. 發(fā)送數據Dim Num As IntegerDim outbte(0) As ByteNum = Val(Text1.Text)outbte(0) = CByte(Num)MSComm1.OutBufferCount = 0 '.

11、清空輸出寄存器MSComm1.Output = outbte(0) '. 發(fā)送數據End SubPrivate Sub Command2_Click()'. 退出Unload MeEnd SubPrivate Sub Form_Load()初始化MSComm1.CommPort= 1'.使 用Com1 口MSComm1.Settings= "9600,n,8, 1 " ' . . . 設置通訊參數MSComm1.PortOpen= True '. 打開串口End SubD單片機工作方式置于1,比特率設為9600bit/s。在單片機上,

12、我們只得使用匯編語言編寫,并且調用中 斷實現對串口數據的收發(fā)工作。源代碼如下:PUSHPSW;將程序狀態(tài)字壓入堆棧PUSHACC;將累加器壓入堆棧CLR EA;關閉系統(tǒng)中斷CLR RI;清除中斷標志位MOV A,SBUF;從接收寄存器中讀取數據MOV 70H,A;分解數據百、十、個位并顯示MOV B,#100DIV ABMOV 52H,A;分解百位,送入存儲器 52HMOV A,BMOV B,#10DIV ABMOV 51H,A;分解十位,送入存儲器 51HMOV 50H,B;分解個位,送入存儲器 50HMOV A,70HMOV B,#2DIV AB; 將接受的數據除以 2MOV SBUF,A;將得數發(fā)送到輸出寄存器ACALL DL1;延時保證數據完整發(fā)送ACALL DL1CLR RI;清

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論