【文章內(nèi)容簡(jiǎn)介】
e 為字符串表達(dá)式,說(shuō)明通信端口的設(shè)置值。Value 由四個(gè)設(shè)置值組成,格式如下: “BBBB,P,D,S” BBBB為波特率,P為奇偶校檢,D為數(shù)據(jù)位數(shù),S為停止位數(shù)。Value默認(rèn)值為“9600,N,8,1”。 通常與下位機(jī)通信采用默認(rèn)值即可,因?yàn)閱纹瑱C(jī)有效處理的數(shù)據(jù)位也是8位,波特率也可以設(shè)置為9600。 在MSComm控件設(shè)置CommEvent屬性為EvReceive并產(chǎn)生OnComm之前,RThreshold屬性設(shè)置并返回的要接收的字符數(shù),即只有當(dāng)接收到了等于Rthreshold屬性值個(gè)數(shù)的字符才能產(chǎn)生OnComm事件。Rthreshold屬性值為0時(shí),不產(chǎn)生OnComm事件。因此需將Rthreshold屬性值設(shè)置為有效的整數(shù)值。本系統(tǒng)僅僅只接受單片機(jī)發(fā)送的兩位數(shù)據(jù)溫度值,所以Rthreshold屬性值設(shè)置為2。 計(jì)時(shí)器Timer控件計(jì)時(shí)器控件可以每隔一個(gè)時(shí)間間隔自動(dòng)觸發(fā)一個(gè)計(jì)時(shí)器事件,計(jì)時(shí)器控件在設(shè)計(jì)時(shí)顯示為一時(shí)鐘圖標(biāo),大小可變,運(yùn)行時(shí)不可見(jiàn)。由于本系統(tǒng)實(shí)現(xiàn)對(duì)空調(diào)的控制需發(fā)送一連串控制命令,故通過(guò)Timer控件定時(shí)發(fā)送,可以有效的提高數(shù)據(jù)發(fā)送的正確性,有利于和下位機(jī)接收速度相匹配。Timer控件有兩個(gè)重要屬性,分別為Enable屬性和interval屬性前者決定計(jì)時(shí)器是否開(kāi)始計(jì)時(shí),后者設(shè)置兩次計(jì)時(shí)器事件之間的時(shí)間間隔,以毫秒為單位,值的范圍是0~65536,當(dāng)internal屬性值為0時(shí),計(jì)時(shí)器無(wú)效,若把internal屬性值設(shè)置為1000,則表示每秒鐘觸發(fā)一次計(jì)時(shí)器事件。由此可得,若想在一秒鐘內(nèi)執(zhí)行n此計(jì)時(shí)器事件,則必須將internal屬性值設(shè)置為1000/n才可實(shí)現(xiàn)。本系統(tǒng)用到了兩個(gè)Timer控件,一個(gè)作為發(fā)送命令字符串所用,當(dāng)命令發(fā)送完后由軟件關(guān)閉計(jì)時(shí)器。另一個(gè)作為對(duì)所有空調(diào)定時(shí)監(jiān)控,設(shè)置計(jì)時(shí)間隔為1S, 每隔一秒換一臺(tái)空調(diào)進(jìn)行監(jiān)控,如此循環(huán)下去,直到用戶關(guān)閉監(jiān)控,即關(guān)閉計(jì)時(shí)器。兩個(gè)計(jì)時(shí)器運(yùn)行代碼如下:Private Sub Timer2_Timer()/*****發(fā)送命令字符串*****/ = Mid$(, i, 1)i = i + 1If i = j + 1 Then = FalseEnd IfEnd SubPrivate Sub Timer1_Timer()/*****對(duì)所有空調(diào)輪流監(jiān)控*****/ = CStr(addr)addr = addr + 1If addr 2 Then addr = 1 = SIf windtype2 = C Then If Val(temperature) = Val(temper) Then = K Else = R End IfElseIf windtype = C Then If Val(temperature) = Val() Then = K Else = R End IfElseIf windtype2 = H Then If Val(temperature) = Val(temper) Then = K Else = R End If Else If Val(temperature) = () Then = K Else = R End IfEnd IfEnd Sub CommandButton控件CommandButton控件在VB設(shè)計(jì)的人機(jī)交互界面中經(jīng)常用到,對(duì)于一些基本操作都必須通過(guò)CommandButton來(lái)完成。該控件最為重要的的一個(gè)事件就是Click事件,當(dāng)用戶按下Command就可以觸發(fā)該事件,完成相應(yīng)的操作。本設(shè)計(jì)用到了多個(gè)CommandButton控件,具體代碼如下:Private Sub Command1_Click()/***開(kāi)啟計(jì)時(shí)器1開(kāi)始對(duì)所有空調(diào)輪流監(jiān)控***/addr = 1 = TrueEnd SubPrivate Sub Command2_Click()/****關(guān)閉計(jì)時(shí)器1停止對(duì)對(duì)空調(diào)的監(jiān)控***/ = FalseEnd SubPrivate Sub Command3_Click()/***開(kāi)啟計(jì)時(shí)器2將控制命令字符串發(fā)送**/ = amp。 controlcode amp。 windtype amp。 i = 1j = Len() = TrueEnd SubPrivate Sub Command4_Click()/***開(kāi)啟所有空調(diào)使其正常工作***/ = 1 amp。 D amp。 windtype2 amp。 temperi = 1j = Len() = TrueEnd SubPrivate Sub Command5_Click()/***關(guān)閉所有空調(diào)停止工作***/ = 1 amp。 Gi = 1j = Len() = TrueEnd SubPrivate Sub Command6_Click()/***關(guān)閉通信串口退出控制界面***/ = FalseEndEnd Sub TextBox控件 TextBox控件用于顯示或者輸入文本信息,比如要輸入一串字符串就必須在TextBox文本框中輸入。VB串口通信的數(shù)據(jù)發(fā)送分為兩種,分別為文本數(shù)據(jù)發(fā)送和二進(jìn)制數(shù)據(jù)發(fā)送。若選擇文本數(shù)據(jù)發(fā)送,一般就要用到TextBox控件,將所發(fā)文本信息統(tǒng)一寫(xiě)到文本框中,通過(guò)計(jì)時(shí)器定時(shí)依次發(fā)送出去。當(dāng)打開(kāi)一個(gè)文本文件并需要顯示出來(lái)時(shí)就要用到TextBox控件。本系統(tǒng)用了兩個(gè)TextBox控件,一個(gè)為輸入溫度值文本框,另一個(gè)為存放控制命令字符串。具體代碼如下: = amp。 controlcode amp。 windtype amp。 = Mid$(, i, 1)/** **/ 單片機(jī)串口通信 AT89S51芯片內(nèi)部有一個(gè)全雙工的串行口,與外部數(shù)據(jù)交換僅需兩根口現(xiàn),分別為RXD和TXD。RXD為讀數(shù)據(jù)口,TXD為寫(xiě)數(shù)據(jù)口。串行通信一般分為同步和異步兩種方式,51單片機(jī)通常采用的是異步通信,它通常以字符或者字節(jié)為單位,組成字符幀來(lái)傳送,它不需要信號(hào)線來(lái)傳送數(shù)據(jù)的時(shí)鐘,通信雙方均使用自己的時(shí)鐘來(lái)控制數(shù)據(jù)的發(fā)送和接收,不是同步進(jìn)行的。換句話說(shuō),甲方開(kāi)始發(fā)送一位,乙方并不是開(kāi)始接受這一位,而是等甲方發(fā)送萬(wàn)一幀數(shù)據(jù)后,乙方才開(kāi)始接受。 51單片機(jī)串行口控制寄存器51單片機(jī)的串行口由串行口控制寄存器SCON,PCON。發(fā)送接收緩沖器SBUF。其中SUBF的功能是:當(dāng)發(fā)送數(shù)據(jù)時(shí),先將數(shù)據(jù)移到累加器ACC,然后在從ACC移到SBUF中,然后通過(guò)TXD腳一位位發(fā)送出去。當(dāng)接受數(shù)據(jù)時(shí),則在接收中斷程序中把SBUF的數(shù)據(jù)取出,若采用查詢中斷標(biāo)志法時(shí),則當(dāng)串口中斷標(biāo)志RI置位時(shí),把SBUF的數(shù)據(jù)取出。S BUF雖然只有一個(gè)入口地址(99H)但實(shí)際上對(duì)SBUF的讀寫(xiě)并不是一個(gè)寄存器,這樣才可以使單片機(jī)能夠同時(shí)進(jìn)行收發(fā)工作。PCON寄存器在串口通信中只用到了其最高位SMOD,它是數(shù)據(jù)傳輸率選擇位。在模式1,2,3中,串行通信數(shù)據(jù)傳輸率在SMOD為1時(shí)提高一倍。SCON寄存器是串口通信中最為重要的寄存器,其各個(gè)比特位的的定義如表2所示 表 2 SCON寄存器比特位定義 串口工作模式 51單片機(jī)串口有四種工作模式:模式0(SM0=0,SM1=0),表示為同步移位寄存器的工作方式;模式1(SM0=0,SM1=1)表示10位異步收發(fā)模式;模式2(SM0=1,SM1=0)表示11位異步收發(fā)模式;模式3(SM0=1,SM1=1)為11位異步收發(fā)模式。其中模式1常用于單機(jī)通信,即點(diǎn)對(duì)點(diǎn)通信。模式3用于多機(jī)通信,單片機(jī)多機(jī)通信或者PC機(jī)與單片機(jī)多機(jī)通信。本系統(tǒng)采用模式3,通過(guò)控制SM2來(lái)區(qū)別PC機(jī)發(fā)送的是地址還是數(shù)據(jù),以此來(lái)實(shí)現(xiàn)多機(jī)通信 串口通信數(shù)據(jù)傳輸率在模式0下,串口數(shù)據(jù)傳輸率是固定的,它的值為單片機(jī)晶振頻率的1/12。在模式2下,當(dāng)SMOD=0時(shí),串口數(shù)據(jù)傳輸率為經(jīng)晶振頻率的1/64;SMOD=1時(shí),數(shù)據(jù)傳輸率為晶振頻率的1/32。在模式1和模式3下,通信數(shù)據(jù)傳輸率是由定時(shí)器T1的溢出頻率來(lái)決定的,相應(yīng)的公式為:數(shù)據(jù)傳輸率=其中 定時(shí)器T1在模式2工作, X為定時(shí)器T1的初值。本系統(tǒng)為了和上位機(jī)波特率相匹配,選用波特率為9600bit/s 。此時(shí)X=250 fosc= 通信協(xié)議 通信雙方實(shí)現(xiàn)數(shù)據(jù)收發(fā),必須有統(tǒng)一規(guī)定的通信協(xié)議。本系統(tǒng)根據(jù)對(duì)空調(diào)的實(shí)際控制,規(guī)定的協(xié)議如下:1. 波特率上位機(jī)與下位機(jī)都設(shè)置為9600bit/s。2. 一幀有效數(shù)據(jù)傳輸位數(shù)為8位。3. 下位機(jī)地址編號(hào)為1,2(假設(shè)只對(duì)兩臺(tái)