當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]在Windows98下利用VB的串行通訊控件可實(shí)現(xiàn)PC機(jī)與多單片機(jī)之間的通訊。

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

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

前言

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

VB環(huán)境下通訊程序的設(shè)計(jì)

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

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

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

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

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

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

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

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

Timer控件的主要屬性如下:

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

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

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

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

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

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

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

Dim輸出命令(1 To 1)As Byte

DoEvents

輸出命令(1)=command

MSComm1.OutBufferCount=0

MSComm1.Output=輸出命令

MSComm1.InBufferCount=0

End Sub

2.接收數(shù)據(jù)

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

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

Do

DoEvents

In_buffer $=In_buffer$&MSComm2.Input

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

In_buffer=Left(In_buffer,len(In_buffer)-2)

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

End Function

3.Timer控件控制

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

Timer控件控制程序如下:

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

Privata Sub TimerSend_Timer()

TimerSend.Enabled=False

Select Case command

Case 1]

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

TimerReceive.Enabled=False'啟動(dòng)自動(dòng)接收

Case2

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

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

TimerReceive.Interval=500

TimerReceive.Enabled=True'啟動(dòng)定時(shí)器接收機(jī)號(hào)=1

Case 3

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

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

TimerReceive.lnterval=500

TimerReceive.Enabled=True'啟動(dòng)定時(shí)器接收

機(jī)號(hào)=2

Case 4

Case n

End Select

End.Sub

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

Private Sub TimerReceive_Timer()

TimerReceive.Enabled=False

Select Case機(jī)號(hào)

Case 1

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

Call任務(wù)2

Case 2

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

Call任務(wù)3

Case 3

Case n

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

Call任務(wù)n

End Select

End Sub

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

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

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

Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent

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

Select Case In_buffer $

Call A

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

Call B

End Select

Case comFrame 'Framing Error '通訊錯(cuò)誤處理

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

…'錯(cuò)誤處理

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

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

…'錯(cuò)誤處理

End Select

End Sub

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉