<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 溫控系統(tǒng)中VB實(shí)現(xiàn)的PC機(jī)與單片機(jī)串行通迅

          溫控系統(tǒng)中VB實(shí)現(xiàn)的PC機(jī)與單片機(jī)串行通迅

          作者: 時(shí)間:2012-03-19 來源:網(wǎng)絡(luò) 收藏

          引言

          本文引用地址:http://www.ex-cimer.com/article/171848.htm

          現(xiàn)代的測(cè)控中通常以機(jī)作為控制中心,將采集到的數(shù)據(jù)通過串口送給機(jī)進(jìn)行各種處理,為保證數(shù)據(jù)傳送的及時(shí)性和正確性,就必須建立可靠的通訊。我們?cè)陂_發(fā)全自動(dòng)生化分析儀溫度控制時(shí),溫度信號(hào)的測(cè)控及采集均由自行完成,然后通過異步通信口將溫度信號(hào)實(shí)時(shí)地傳送給 機(jī)進(jìn)行處理。上位PC機(jī)使用進(jìn)行串口通信的編程,下位單片機(jī)使用C51進(jìn)行編程。

          1 串口通信的方法

          1.1 通信控件MSComm簡介

          下的端口通信是通過其提供的控件Microsoft Comm control(簡稱MSComm)的。該控件屏蔽了通信過程中的底層操作,程序員只需設(shè)置并監(jiān)視MSComm控件的屬性和事件,結(jié)合其它VB提供的控件就可完成對(duì)串口的初始化和數(shù)據(jù)的發(fā)送接收。本系統(tǒng)中用到的主要MSComm控件屬性如下:

          ①、Commport:設(shè)置并返回通信端口代碼。默認(rèn)值為1,最大值為16,需要使用超過16個(gè)通信端口時(shí),要采用其他方式操控通信端口(如PcommPro軟件)。例如將串口2設(shè)為通信端口:MsComm1.CommPort=2。

          ②、Setting:設(shè)置初始化參數(shù)。其格式為“****,P,D,S”,其中****為波特率(baud),P為校驗(yàn)方式,D為數(shù)據(jù)位數(shù),S為停止位。默認(rèn)值為“9600,N,8,1”,意為“串口通信速度為9600Baud,無校驗(yàn),每次數(shù)據(jù)為8個(gè)Bit,停止位為1個(gè)Bit”。波特率可為 110,300,600,1200,2400,9600,14400,19200,28800,38400(保留)等等。校驗(yàn)位默認(rèn)為None(無校驗(yàn)),若傳輸距離長,可增加校驗(yàn)位,可選M為符號(hào)校驗(yàn),E為偶校驗(yàn),O為奇校驗(yàn),S為空白校驗(yàn)。停止位的設(shè)定值可為:1(默認(rèn)值),1.5,2。

          此處的設(shè)置要和單片機(jī)側(cè)的設(shè)置保持一致,否則不能正常的通信。例如我們采用的初始化參數(shù)為“2400,N,8,1”,則單片機(jī)側(cè)的設(shè)置相應(yīng)項(xiàng)為:定時(shí)器1的初值為E6并且SMOD(口波特率加倍位)為1(對(duì)應(yīng)2400Bit),串口控制寄存器SCON為40(10位異步收發(fā),對(duì)應(yīng)8Bit數(shù)據(jù)位,1Bit停止位)。

          ③、PortOpen:設(shè)置或返回通信端口狀態(tài)。

          ④、Input:從緩沖區(qū)返回并刪除字符。將串行輸入寄存器的數(shù)據(jù)讀出,并清除寄存器中已讀取的數(shù)據(jù)。寄存器的特性是FIFO(First In First Out,先進(jìn)先出)。例如:BufIn$=MSComm1.Input,是將輸入寄存器中的字符讀入BufIn字符變量中。

          ⑤、InputLen:設(shè)置并返回Input屬性每次從接收緩沖區(qū)讀取的字符數(shù)。默認(rèn)值為0,表示讀取全部字符。本系統(tǒng)InputLen=2,即一次讀取兩個(gè)字節(jié)。

          ⑥、Rthreshold:設(shè)置或返回引發(fā)接收事件的字節(jié)數(shù)。當(dāng)接收寄存器達(dá)到設(shè)置的字節(jié)數(shù)時(shí),將引發(fā)OnComm事件中的接收事件。

          ⑦、CommEvent:返回最近的通信事件或錯(cuò)誤。只要有通信事件或錯(cuò)誤發(fā)生就會(huì)產(chǎn)生OnComm事件。CommEvent屬性中存有該事件或錯(cuò)誤的數(shù)值代碼。程序員可通過檢測(cè)數(shù)值代碼來進(jìn)行相應(yīng)的處理。

          ⑧、InputMode:設(shè)置或返回Input屬性取回的數(shù)據(jù)的類型。有兩個(gè)形式,設(shè)為ComInputModeText(默認(rèn)值)時(shí),按字符串形式接收;設(shè)為ComInputModeBinary時(shí),當(dāng)作字節(jié)數(shù)組中的二進(jìn)制數(shù)據(jù)來接收。單片機(jī)和PC機(jī)的通信一般使用 ComInputModeBinary形式,本系統(tǒng)采用字節(jié)接收方式。

          1.2 串行通信實(shí)現(xiàn)的兩種基本方法

          有兩種方法可實(shí)現(xiàn)VB下串行通信的控制,一是查詢法(Polling),二是事件驅(qū)動(dòng)法(Event-driven)。

          ①、查詢法(Polling)

          這種方法是在每個(gè)重要的程序之后查詢MSComm控件的某些屬性值(如CommEvent屬性和InBufferCount屬性)來檢測(cè)事件和通信狀態(tài)。適用于小程序。查詢可使用定時(shí)器或DO...LOOP實(shí)現(xiàn)。

          ②、事件驅(qū)動(dòng)法(Event-driven)

          這是處理串口通信的一種有效方法。當(dāng)串口接收或發(fā)送指定數(shù)量的數(shù)據(jù),或當(dāng)串口通信狀態(tài)發(fā)生改變時(shí),MSComm控件觸發(fā)OnComm事件。在OnComm 事件中,可通過檢測(cè)MSComm.CommEvent屬性值獲知串口的各種狀態(tài),從而進(jìn)行相應(yīng)的處理。這種方法程序響應(yīng)及時(shí),可靠性高。本系統(tǒng)采用了此法來實(shí)現(xiàn)串口的通信。

          34.gif


          上一頁 1 2 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();