深圳市研越科技有限公司
硬件接口設(shè)計(jì)本文所述控制系統(tǒng)由工控機(jī)和多臺(tái)AT89C2051單片機(jī)組成,主從機(jī)之間數(shù)據(jù)傳輸采用異步串行通訊方式。由于工控機(jī)的串行通訊口是RS―232C接口,其邏輯電平對(duì)地是對(duì)稱的,與AT89C2051單片機(jī)串行口輸出的TTL電平不同,因此要保證兩者之間可靠地進(jìn)行數(shù)據(jù)傳輸,應(yīng)在通訊線路中接電平轉(zhuǎn)換器,常用的電平轉(zhuǎn)換芯片有ICL232、MAX232芯片等。本文采用MAX232電平轉(zhuǎn)換芯片。
多個(gè)單片機(jī)pc機(jī)通信電路2軟件設(shè)計(jì)2.1AT89C2051單片機(jī)多機(jī)通訊功能AT89C2051單片機(jī)串行口具有:串行發(fā)送緩沖器/接收緩沖器(SBUF),串行口控制寄存器(SCON),特殊功能寄存器(PCON)。通過(guò)設(shè)置SCON可以有4種工作方式,其中工作方式2、3適用于多機(jī)通訊。AT89C2051單片機(jī)的串行通信方式3是波特率可變的9位為數(shù)據(jù)異步通信方式,也是目前多機(jī)通訊中應(yīng)用最多的方式。在此方,AT89C2051傳送一巾貞信息共11位:1位起始位,8位數(shù)據(jù)位,1位可程序控制為“1”或“0”的第9位數(shù)據(jù)和1位停止位,其中的第9位數(shù)據(jù)可作奇偶校驗(yàn)位,也可作“地址幀”和“數(shù)據(jù)幀”的識(shí)別標(biāo)志位。
工控機(jī)通訊功能工控機(jī)配有串行異步通訊端口(COM1端口地址為3f8H,CM2端口地址為2f8H),接口板上的通用異步接收/發(fā)送器(UART),是一片8250或一片結(jié)構(gòu)、編程方法與8250相同的芯片,內(nèi)部有10個(gè)寄存器。PC機(jī)串行通訊程序設(shè)計(jì),程序員只要應(yīng)用輸入/輸出命令對(duì)UART內(nèi)的寄存器進(jìn)行輸入/輸出操作,從而設(shè)定串行通訊的波特率、數(shù)據(jù)傳送格式、是否允許中斷、發(fā)送或接收數(shù)據(jù)等。
種新的多機(jī)通訊方法在常規(guī)的多機(jī)通訊方法中,奇偶校驗(yàn)位已用作發(fā)送地址碼(通道號(hào))或數(shù)據(jù)的特征位,而數(shù)據(jù)通信的校核則采用累加和校驗(yàn)方法。采用這種方法不但軟件開(kāi)銷和進(jìn)行通信的數(shù)據(jù)量增加了,而且實(shí)時(shí)性也受到影2.3.1通信的基本原理上位機(jī)發(fā)送數(shù)據(jù)給下位機(jī),下位機(jī)要產(chǎn)生接收中斷必須同時(shí)符合兩個(gè)條件。
數(shù)據(jù)為5 2―直置為“0”,并使+,清零,則不論第9位數(shù)據(jù)(+9 8)為何值,下位機(jī)均可產(chǎn)生串行接收中斷,這樣第9位就可作為差錯(cuò)檢測(cè)的奇偶校驗(yàn)位了。如上位機(jī)與某下位機(jī)通信時(shí),先發(fā)送地址碼,待握手成功后再發(fā)送數(shù)據(jù)命令,此時(shí)該下位機(jī)的FLAG被置為“1”,相當(dāng)于該機(jī)的“口袋”已打開(kāi),上位機(jī)不斷從該下位機(jī)中取數(shù)據(jù),取完無(wú)誤后發(fā)出一命令使該下位機(jī)中的FLAG復(fù)原為“0”,實(shí)現(xiàn)“關(guān)口袋”。
下位機(jī)向上位機(jī)發(fā)送數(shù)據(jù)時(shí),先發(fā)送要傳送數(shù)據(jù)的長(zhǎng)度,然后才開(kāi)始發(fā)送有效數(shù)據(jù)。
約定00H為取數(shù)命令,0FFH為復(fù)位命令,通信采用偶校驗(yàn),波特率設(shè)為2400b/s.上面給出PC機(jī)主函數(shù)的流程圖,如所示。PC機(jī)通信程序采用VC++6.0語(yǔ)言編寫。下位單片機(jī)的通信模塊,包括主程序和中斷服務(wù)程序,其程序流程圖分別如和所示。何實(shí)現(xiàn)上位機(jī)與相應(yīng)發(fā)送地址相符的下位機(jī)之間一對(duì)一通信呢,可采用軟件方法。具體方法如下:在下位機(jī)程序中設(shè)立一個(gè)標(biāo)志變量FLAG,初始化時(shí)FLAG置為“0”,當(dāng)上位機(jī)發(fā)送數(shù)據(jù)時(shí),各下位機(jī)均會(huì)產(chǎn)生接收中斷,中斷服務(wù)程序先判斷本機(jī)FLAG的值。若FLAG為“0”,則把接收的數(shù)據(jù)與本機(jī)地址比較,如果一致,則置FLAG為6“,并發(fā)回本機(jī)地址碼作為應(yīng)答,否則馬上跳出中斷服務(wù)程序;如果FLAG是”1“,說(shuō)明上位機(jī)發(fā)送來(lái)的是控制命令,則轉(zhuǎn)相應(yīng)命令處理程序,最后才跳出中斷服務(wù)程序,返回主程序。上位機(jī)與該下位機(jī)通信完畢后,再令該下位機(jī)的FLAG為”0“。如果握手失敗,則上位機(jī)發(fā)送復(fù)位命令給下位機(jī),然后重新開(kāi)始握手,三次都不成功則轉(zhuǎn)出錯(cuò)處理。
工控機(jī)軟件實(shí)現(xiàn)方法及可靠性措施①對(duì)各下位機(jī)進(jìn)行編號(hào),并將其作為該機(jī)地址碼。
結(jié)束語(yǔ)本文只概述了一種分布式控制系統(tǒng)串行接口方法,但各機(jī)之間的通訊接口方法較多,如:串口的直接連接(距離較近時(shí))、通過(guò)調(diào)制解調(diào)器連接等。在軟件編程方面,從機(jī)直接用單片機(jī)的匯編語(yǔ)言編寫;而工控機(jī)的通訊子程序模塊,同樣可以采用多種語(yǔ)言實(shí)現(xiàn)。因此,在具體的系統(tǒng)設(shè)計(jì)時(shí),可根據(jù)實(shí)際情況,選擇其中的一種方法,并在編程時(shí)考慮錯(cuò)誤檢測(cè)和糾錯(cuò)技術(shù),就能完成可靠的通訊。