国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

利用VB實現(xiàn)PC機與多單片機通訊

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

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

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

(1)Commport 設置并返回通訊端口號。端口號可以設置為1~16的任何數(shù),如Mscomm.Commport=2表示設置當前通訊端口為COM2。  
(2)Setting 設置并返回波特率、奇偶校驗、數(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”。  
(3)Portopen 設置并返回通訊端口的狀態(tài),也可以打開和關閉端口。  
(4)Input 從接收緩沖區(qū)返回和刪除字符。該屬性在運行時為只讀。  
(5)InputLen 設置并返回每次Input屬性從接收緩沖區(qū)中讀取的字符數(shù)。InputLen屬性的缺省值為0。設置InputLen為0時,Input將讀取接收緩沖區(qū)的全部字符。  
(6)Output 向傳送緩沖區(qū)寫數(shù)據(jù)。要傳送的數(shù)據(jù)可是文本數(shù)據(jù)或二進制數(shù)據(jù)。  
(7)CommEvent 返回最近的通訊事件或錯誤。只要有通訊錯誤或事件發(fā)生錯誤時就會產(chǎn)生Oncomm事件。CommEvent屬性中存有該錯誤或事件的數(shù)值代碼。  

Timer控件的主要屬性如下:  

(1)Enabled 返回或設置一個值,該值用來確定一個窗體或控件否能夠對用戶產(chǎn)生的事件作出反應。通過把Enabled設置為“Galse”來使Timer控件成為無效,將取消由控件的Interval屬性所建立的倒計時數(shù)。  
(2)Interval 返回或設置對Timer控件的計時事件調(diào)用間的毫秒數(shù)。Timer控件的Enabled屬性決定該控件是否對時間的推移作出響應。將Enabled設置為“False”會關閉Timer控件,設置為“True”則打開Timer控件。當Timer控件置為有效時,倒計時總是從其Interval屬性設置值開始。創(chuàng)建Timer事件程序。可通知VB在每次Interval到時該做什么。Timer控件和Enabled屬性設置為“True”時,VB將在Interval時間到后自動訪問Timer_Timer過程。  

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

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

為了使主機能夠對整個檢測過程進行實時控制,須要在發(fā)送命令以后設定等待的時間,也可以通過條件判斷下一步是發(fā)達還是接收命令。對發(fā)送的命令,可能是文本方式或二進制代碼。在發(fā)送二進制代碼時,應特別注意發(fā)送的格式。  

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

Sub發(fā)送單片機命令過程(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ù)是一個被動的過程,可以通過函數(shù)來實現(xiàn),由定時器開啟。在接收過程中,多數(shù)用特征字符,如“OK”、“#”等。這些需要在通訊協(xié)議中約定。  

Function接收數(shù)據(jù)()  
Do  
DoEvents  
In_buffer $=In_buffer$%26;amp;MSComm2.Input  
Loop Until InStr(_buffer$,“OK”)"從串行端口讀“OK”響應"  
In_buffer=Left(In_buffer,len(In_buffer)-2)  
接收數(shù)據(jù)=In_buffer$  
End Function  

3.Timer控件控制  

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

Timer控件控制程序如下:  

"發(fā)送命令主控程序  
Privata Sub TimerSend_Timer()  
TimerSend.Enabled=False  
Select Case command  
Case 1]  
Call發(fā)送單片機命令過程(任務1)  
TimerReceive.Enabled=False"啟動自動接收  
Case2  
Call發(fā)送單片機命令過程(任務2)  
MSComm1.Rthreshold=0"關閉自動接收  
TimerReceive.Interval=500  
TimerReceive.Enabled=True"啟動定時器接收機號=1  
Case 3  
Call發(fā)送單片機命令過程(任務3)  
MSComm1.Rthreshold=0"關閉自動接收  
TimerReceive.lnterval=500  
TimerReceive.Enabled=True"啟動定時器接收  
機號=2  
Case 4  
┆  
Case n  
…  
End Select  
End.Sub  

"接收數(shù)據(jù)主控程序  
Private Sub TimerReceive_Timer()  
TimerReceive.Enabled=False  
Select Case機號  
Case 1  
In_buffer$=接收數(shù)據(jù)(機號)  
Call任務2  
Case 2  
In_buffer$=接收數(shù)據(jù)(機號)  
Call任務3  
Case 3  
┆  
Case n  
In_buffer$=接收數(shù)據(jù)(機號)  
Call任務n  
End Select  
End Sub  

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

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

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

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í)行任務1”  
Call B  
…  
End Select  
Case comFrame "Framing Error "通訊錯誤處理  
X=MsgBox(“Framing Error!”,16)  
…"錯誤處理  
Case comEventOverrun "數(shù)據(jù)丟失  
X=MsgBox(“數(shù)據(jù)丟失!”,16)  
…"錯誤處理  
End Select  
End Sub
本文地址:http://m.qingdxww.cn/thread-36008-1-1.html     【打印本頁】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內(nèi)容、版權和其它問題,我們將根據(jù)著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發(fā)培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线视频欧美精品 | 亚洲精品午夜国产va久久 | 欧美草逼视频 | 亚洲国产最大av | 欧美整片完整片视频在线 | 人人九九精 | 青青操手机看 | 91久久精一区二区三区大全 | 欧美日韩中文一区 | 成年女人看片免费视频播放人 | 99在线在线视频免费视频观看 | 久久99国产精品久久99无号码 | 国产91久久精品 | 91色视| 青草午夜精品视频在线观看 | 欧美日韩在线网站 | 国产日韩精品欧美一区色 | 青青操久久| 国产国语对白精品视频 | 久草视频这里只有精品 | 免费福利在线观看 | 五月婷婷激情四射 | 成人午夜在线观看国产 | 国产精品一区在线播放 | 伊人久久综合热青草 | 四虎成人免费网址在线 | 国产尤物二区三区在线观看 | 91精品天美精东蜜桃传媒入口 | 免费在线看黄色的网站 | 精品免费久久久久久久 | 2019偷偷狠狠的日日 | 四虎免费永久观看 | 国产porn在线| 四虎影院官网 | 久久精品免费i 国产 | 日韩欧美在线观看一区 | 久久久全国免费视频 | 欧美日韩精品一区二区在线播放 | 国产青青在线 | 奇米影视7777久久精品 | 成人情趣片免费看 |