日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
VB實現(xiàn)PC機(jī)的多單片機(jī)通訊
VB實現(xiàn)PC機(jī)的多單片機(jī)通訊
 更新時間:2008-7-26 21:05:36  點擊數(shù):4
【字體: 字體顏色

摘要:在Windows98下利用VB的串行通訊控件可實現(xiàn)PC機(jī)與多單片機(jī)之間的通訊。采用定時器控制大大加快了自動化進(jìn)程,克服了往多“握手”協(xié)議造成的通訊速度緩慢的缺點。本文以PS1016單片機(jī)為例,詳細(xì)介紹了PC機(jī)與單片機(jī)之間的串行通訊、數(shù)據(jù)的發(fā)送和接收。

    關(guān)鍵詞:通訊 屬性 事件

字串8

前言

字串1

在采用以PC機(jī)為控制中心的數(shù)據(jù)采集自動化控制系統(tǒng)中,通常需要單片機(jī)采集數(shù)據(jù),然后用異步串行通訊方式傳給PC機(jī),PC對單片機(jī)進(jìn)行定時控制,需要多個單片機(jī)協(xié)同工作。如果系統(tǒng)不很復(fù)雜,可通過定時器控件控制收發(fā)過程,在必要的地方自動接收裝置,使定時控制和通訊過程完美地結(jié)合起來。這樣,可以免去“握手”協(xié)議的繁瑣過程,簡化編程,提高速度。VB具有面向?qū)ο蟮脑O(shè)計方法,友好的用戶界面,簡單方便的串行通訊和實用性強(qiáng)等優(yōu)點,無論借用其他語言就可以開發(fā)出優(yōu)秀的控制系統(tǒng)通訊軟件。本文介紹在Windows 98環(huán)境下如何利用VB來實現(xiàn)PC機(jī)與多個PS1016單片機(jī)之間的串行通訊。

字串5

VB環(huán)境下通訊程序的設(shè)計 字串8

VB提供了串行端口控制Mscomm來為應(yīng)用程序提供串行通訊。該控件屏蔽了通信過程中的底層操作,程序員可以設(shè)置、監(jiān)視Mscomm控件的屬性和事件,結(jié)合Timer控件即可完成對串行口的初始化和數(shù)據(jù)的輸入輸出工作。Mscomm控件的主要屬性如下: 字串2

(1)Commport 設(shè)置并返回通訊端口號。端口號可以設(shè)置為1~16的任何數(shù),如Mscomm.Commport=2表示設(shè)置當(dāng)前通訊端口為COM2。 字串1

(2)Setting 設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位。格式為Mscomm.Setting=String。String是一個包含四部分的字符串:第一部分為波特率;第二部分為奇偶校驗,N表示不校驗,M表示符號校驗,E表示偶校驗,O表示奇校驗,S表示空格校驗;第三部分為數(shù)據(jù)位數(shù),其可選值為4,5,6,7,8;第四部分為停止位位數(shù),其可選值為1,1.5,2。Setting屬性的缺省值為“9600,N,8,1”。

字串6

(3)Portopen 設(shè)置并返回通訊端口的狀態(tài),也可以打開和關(guān)閉端口。

字串8

(4)Input 從接收緩沖區(qū)返回和刪除字符。該屬性在運行時為只讀。

字串8

(5)InputLen 設(shè)置并返回每次Input屬性從接收緩沖區(qū)中讀取的字符數(shù)。InputLen屬性的缺省值為0。設(shè)置InputLen為0時,Input將讀取接收緩沖區(qū)的全部字符。 字串7

(6)Output 向傳送緩沖區(qū)寫數(shù)據(jù)。要傳送的數(shù)據(jù)可是文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)。

字串3

(7)CommEvent 返回最近的通訊事件或錯誤。只要有通訊錯誤或事件發(fā)生錯誤時就會產(chǎn)生Oncomm事件。CommEvent屬性中存有該錯誤或事件的數(shù)值代碼。 字串7

Timer控件的主要屬性如下:

字串8

(1)Enabled 返回或設(shè)置一個值,該值用來確定一個窗體或控件否能夠?qū)τ脩舢a(chǎn)生的事件作出反應(yīng)。通過把Enabled設(shè)置為“Galse”來使Timer控件成為無效,將取消由控件的Interval屬性所建立的倒計時數(shù)。

字串5

(2)Interval 返回或設(shè)置對Timer控件的計時事件調(diào)用間的毫秒數(shù)。Timer控件的Enabled屬性決定該控件是否對時間的推移作出響應(yīng)。將Enabled設(shè)置為“False”會關(guān)閉Timer控件,設(shè)置為“True”則打開Timer控件。當(dāng)Timer控件置為有效時,倒計時總是從其Interval屬性設(shè)置值開始。創(chuàng)建Timer事件程序?赏ㄖ猇B在每次Interval到時該做什么。Timer控件和Enabled屬性設(shè)置為“True”時,VB將在Interval時間到后自動訪問Timer_Timer過程。

字串5

為實現(xiàn)通訊程序,須在VB開發(fā)環(huán)境下設(shè)置一個用做控制通訊的窗體。窗體上主要有一個通訊控件Mscomml和兩個Timer控件。VB的特點是事件驅(qū)動,定時器控件會定時觸發(fā)相應(yīng)事件的驅(qū)動程序。 字串7

1.發(fā)送單片機(jī)命令 字串1

為了使主機(jī)能夠?qū)φ麄檢測過程進(jìn)行實時控制,須要在發(fā)送命令以后設(shè)定等待的時間,也可以通過條件判斷下一步是發(fā)達(dá)還是接收命令。對發(fā)送的命令,可能是文本方式或二進(jìn)制代碼。在發(fā)送二進(jìn)制代碼時,應(yīng)特別注意發(fā)送的格式。 字串4

發(fā)送命令過程是一個帶參過程,這樣可使發(fā)送命令簡便易行。具體程序如下:

字串7

Sub發(fā)送單片機(jī)命令過程(command As Byte)

字串5

Dim輸出命令(1 To 1)As Byte 字串7

DoEvents 字串1

輸出命令(1)=command 字串1

MSComm1.OutBufferCount=0 字串9

MSComm1.Output=輸出命令 字串2

MSComm1.InBufferCount=0 字串6

End Sub 字串4

2.接收數(shù)據(jù) 字串3

接收數(shù)據(jù)是一個被動的過程,可以通過函數(shù)來實現(xiàn),由定時器開啟。在接收過程中,多數(shù)用特征字符,如“OK”、“#”等。這些需要在通訊協(xié)議中約定。

字串4

Function接收數(shù)據(jù)()

字串1

Do

字串7

DoEvents 字串1

In_buffer $=In_buffer$&MSComm2.Input 字串5

Loop Until InStr(_buffer$,“OK”)'從串行端口讀“OK”響應(yīng)' 字串7

In_buffer=Left(In_buffer,len(In_buffer)-2) 字串6

接收數(shù)據(jù)=In_buffer$

字串8

End Function

字串6

3.Timer控件控制 字串4

通過Timer控件來控制通訊中的發(fā)送命令和接收數(shù)據(jù)過程,在通訊程序中設(shè)置兩個Timer控件分別控制發(fā)送單片機(jī)命令和接收單片機(jī)數(shù)據(jù)。為了實現(xiàn)一臺PC機(jī)和多單片機(jī)之間的通訊,可在一個Timer控件的過程中,在發(fā)送命令之前設(shè)定命令參數(shù)和要接收數(shù)據(jù)的單片機(jī)號,然后發(fā)送單片機(jī)命令;在另一個Timer控件的過程中,根據(jù)發(fā)送前設(shè)定的單片機(jī)號,接收不同單片機(jī)的數(shù)據(jù)。

字串8

Timer控件控制程序如下:

字串6

'發(fā)送命令主控程序

字串1

Privata Sub TimerSend_Timer()

字串7

TimerSend.Enabled=False 字串6

Select Case command

字串7

Case 1] 字串2

Call發(fā)送單片機(jī)命令過程(任務(wù)1)

字串1

TimerReceive.Enabled=False'啟動自動接收 字串4

Case2

字串3

Call發(fā)送單片機(jī)命令過程(任務(wù)2)

字串1

MSComm1.Rthreshold=0'關(guān)閉自動接收 字串1

TimerReceive.Interval=500 字串1

TimerReceive.Enabled=True'啟動定時器接收機(jī)號=1

字串3

Case 3

字串6

Call發(fā)送單片機(jī)命令過程(任務(wù)3)

字串6

MSComm1.Rthreshold=0'關(guān)閉自動接收

字串1

TimerReceive.lnterval=500 字串9

TimerReceive.Enabled=True'啟動定時器接收

字串8

機(jī)號=2 字串2

Case 4 字串7

字串7

Case n 字串1

字串4

End Select 字串8

End.Sub 字串9

'接收數(shù)據(jù)主控程序 字串9

Private Sub TimerReceive_Timer() 字串8

TimerReceive.Enabled=False

字串9

Select Case機(jī)號 字串6

Case 1 字串5

In_buffer$=接收數(shù)據(jù)(機(jī)號) 字串9

Call任務(wù)2 字串2

Case 2

字串7

In_buffer$=接收數(shù)據(jù)(機(jī)號)

字串6

Call任務(wù)3 字串6

Case 3 字串9

字串5

Case n 字串9

In_buffer$=接收數(shù)據(jù)(機(jī)號) 字串2

Call任務(wù)n 字串4

End Select

字串9

End Sub 字串2

4.自動接收、監(jiān)視總線狀態(tài)和通訊錯誤的處理 字串4

自動接收、監(jiān)視總線狀態(tài)和通訊錯誤的處理可以通過OnComm事件實現(xiàn)。VB程序運行過程中只要設(shè)置MSComm1.Rthreshold=1,在接收事件發(fā)生時程序就會自動訪問MSComm1.OnComm()過程。

字串9

由于外界干擾或電壓波動等原因,PC機(jī)和單片機(jī)之間的通訊可能會出現(xiàn)錯誤,如接收緩沖區(qū)溢出、網(wǎng)絡(luò)端口超速等。這些可能發(fā)生的事件都能在代碼中引起運行錯誤。為了處理這些錯誤,須要將錯誤處理代碼添加到程序中。通過控件中的OnComm事件可以捕捉和處理錯誤。在通訊過程中所發(fā)生的通訊錯誤是CommEvent屬性返回的。當(dāng)CommEvent屬性值發(fā)生改變時,表明有通訊錯誤,就會產(chǎn)生OnComm事件。同時,可以利用自動引發(fā)OnComm事件的特點在接收過程中加入狀態(tài)顯示碼。這樣可以監(jiān)視通訊線路狀態(tài),得到單片機(jī)和主機(jī)及單片機(jī)和單片機(jī)之間的通訊進(jìn)程。通訊錯誤的處理程序如下:

Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent

Case ComReceive 'Receive data '自動數(shù)據(jù)接收、監(jiān)視總線通信信息

Select Case In_buffer $

Call A

Label.Enabled=“正在執(zhí)行任務(wù)1”

Call B

End Select

Case comFrame 'Framing Error '通訊錯誤處理 字串8

X=MsgBox(“Framing Error!”,16)

…'錯誤處理

Case comEventOverrun '數(shù)據(jù)丟失

X=MsgBox(“數(shù)據(jù)丟失!”,16)

…'錯誤處理 字串4

End Select

End Sub

  • 上一篇: Atmega103的家庭信息終端的設(shè)計
  • 下一篇: 51單片機(jī)中斷優(yōu)先級的軟擴(kuò)展
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1