張杰
【摘 要】本文介紹了利用Visual Basic 6.0開發(fā)工具和Atmle89S52單片機(jī)進(jìn)行通信,探討在VB環(huán)境下來實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的數(shù)據(jù)傳輸方式,著重介紹通過max485芯片實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的通信以及單片機(jī)串口通信的實(shí)現(xiàn)方法。
【關(guān)鍵詞】單片機(jī);485通訊;MSComm控件
1.引言
隨著計(jì)算機(jī)技術(shù)特別是單片機(jī)技術(shù)的發(fā)展,在各種單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)中,常常遇到計(jì)算機(jī)與外界的信息交換問題。目前,許多檢測儀表、在線分析儀、工控機(jī)等均采用RS485方式通過串口與上位機(jī)進(jìn)行通信,用戶通過串行通信可以實(shí)現(xiàn)實(shí)時(shí)監(jiān)控遠(yuǎn)程設(shè)備的工作情況,對設(shè)備運(yùn)行參數(shù)進(jìn)行優(yōu)化,通過指令反饋控制儀器的運(yùn)行情況,從而實(shí)現(xiàn)生產(chǎn)節(jié)能與質(zhì)量控制。鑒于PC機(jī)具有強(qiáng)大的監(jiān)控和管理功能,單片機(jī)則具有快速以及容易控制的特點(diǎn),在數(shù)據(jù)量不大、傳輸要求不高的情況下。在本文中采用的是MAX485芯片實(shí)現(xiàn)RS485方式通信。PC機(jī)與單片機(jī)一般采用應(yīng)答方式,當(dāng)PC機(jī)控制多個(gè)單片機(jī)終端時(shí),PC機(jī)發(fā)送一個(gè)地址幀選中一個(gè)終端,再對選中的終端進(jìn)行一對一的通信,實(shí)現(xiàn)這種通信方式需要對發(fā)送幀的格式和單片機(jī)端的相應(yīng)寄存器進(jìn)行設(shè)置。
2.系統(tǒng)組成介紹
本系統(tǒng)由1臺PC機(jī)作為上位機(jī),多個(gè)89S52單片機(jī)為核心作為系統(tǒng)終端,通過RS485總線結(jié)構(gòu)將PC機(jī)和各個(gè)終端機(jī)連接起來。PC機(jī)通過RS232/485轉(zhuǎn)換器連接到485總線,單片機(jī)通過MAX485芯片模塊連接到485總線上,實(shí)現(xiàn)與PC機(jī)的通信,PC機(jī)通過查詢方式與各個(gè)終端通信,完成監(jiān)測、控制等功能。各個(gè)終端接受主控機(jī)指令,完成就地調(diào)整、控制、測量以及信息回傳等工作。
3.通信過程與通信協(xié)議
由于MAX485通訊是一種半雙工通訊,發(fā)送和接收共用同一物理信道。在任意時(shí)刻只允許一臺單機(jī)處于發(fā)送狀態(tài)。因此要求應(yīng)答的單機(jī)必須在偵聽到總線上呼叫信號已經(jīng)發(fā)送完畢,并且沒有其它單機(jī)發(fā)出應(yīng)答信號的情況下,才能應(yīng)答。半雙工通訊對主機(jī)和從機(jī)的發(fā)送和接收時(shí)序有嚴(yán)格的要求。如果在時(shí)序上配合不好,就會發(fā)生總線沖突,使整個(gè)系統(tǒng)的通訊癱瘓,無法正常工作。
為了防止沖突的發(fā)生每個(gè)終端機(jī)有一個(gè)地址編號,各個(gè)終端通過寄存器設(shè)置成接收地址。通信時(shí)主控PC機(jī)首先發(fā)送地址幀,數(shù)據(jù)是所要操控的終端機(jī)的編號,標(biāo)志位是1,這時(shí)各個(gè)終端都接收這個(gè)地址幀;各終端接收到地址幀后,把收到的地址數(shù)據(jù)與本身的地址編號進(jìn)行比較,如果不相等,則設(shè)置成地址接收方式,繼續(xù)等待接收地址;如果收到的地址數(shù)據(jù)與本機(jī)的地址編號相同,則該終端單片機(jī)設(shè)置成數(shù)據(jù)接收方式,并返回該機(jī)地址,等待接收數(shù)據(jù);主控PC機(jī)在規(guī)定的時(shí)間內(nèi)接收到終端機(jī)返回的地址后,發(fā)送數(shù)據(jù)幀;終端機(jī)接收到主控機(jī)的數(shù)據(jù)后,完成主機(jī)要求的任務(wù),并回傳主控機(jī)要求的數(shù)據(jù),通信結(jié)束后終端機(jī)重新設(shè)置成地址接收方式。
4.通信的具體實(shí)現(xiàn)
采用Visual Basic是實(shí)現(xiàn)PC機(jī)的串口通信。串口通信控件MSComm,全稱為Microsoft Communications Control,是Microsoft公司提供的ActiveX控件,目的是為了簡化Windows下串行通信編程,它既可以用來提供簡單的串口端口通信功能,也可以用來創(chuàng)建功能完備的、事件驅(qū)動的高級通信工具。
4.1 MSComm控件處理通信的方式
4.1.1事件驅(qū)動方式
事件驅(qū)動通信是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時(shí)程序得到通知,例如,在串口接收緩沖區(qū)中有一個(gè)字符到達(dá)或一個(gè)變化發(fā)生時(shí),程序都可以利用MSComm控件的OnComm事件捕獲并處理這些通信事件,OnComm事件還可以檢查和處理通信錯(cuò)誤。在程序設(shè)計(jì)中,可以在OnComm事件處理函數(shù)中加入自己的處理代碼,一旦事件發(fā)生即可自動執(zhí)行該段程序。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。
4.1.2查詢方式
在程序的每個(gè)關(guān)鍵功能完成之后,可以通過檢查CommEvent屬性的值來查詢事件和錯(cuò)誤。適用于自保持的應(yīng)用程序較小的編程。查詢方式的編程可用計(jì)時(shí)器或Do…Loop程序?qū)崿F(xiàn)。
4.2 MSComm控件的常用屬性
對控件編程首先需要了解它的屬性和事件。下面介紹MSComm控件的一些主要屬性。Commport 設(shè)置并返回通信串口號
Settings 以字符串的形式設(shè)置并返回串口波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。格式為:MSComm1.Settings=”BBBB,P,D,S”
Portopen 設(shè)置并返回串口狀態(tài),也可以打開和關(guān)閉串口
Input 從接收緩沖區(qū)中讀取數(shù)據(jù)并清空緩沖區(qū)
Inputlen 設(shè)置并返回一次從接收緩沖區(qū)中讀取字節(jié)數(shù)
InBufferSize 設(shè)置并返回接收緩沖區(qū)的大小,缺省值為1024字節(jié)
InBufferCount 設(shè)置并返回接收緩沖區(qū)中等待接收的字符數(shù)
InputMode 設(shè)置并返回接收數(shù)據(jù)的類型。其值為0和1時(shí),分別表示通過Input屬性以文本方式和二進(jìn)制方式取回?cái)?shù)據(jù)
OutBufferSize 設(shè)置并返回發(fā)送緩沖區(qū)的大小,缺省值為512字節(jié)
OutBufferCount 設(shè)置并返回發(fā)送緩沖區(qū)中等待計(jì)算機(jī)發(fā)送的字符數(shù)
Output 向發(fā)送緩沖區(qū)發(fā)送數(shù)據(jù),該屬性設(shè)計(jì)時(shí)無效,運(yùn)行時(shí)只讀
Rthreshold 在MSComm控件設(shè)置ConunEvent屬性為comEvReceive并產(chǎn)生OnComm之前,設(shè)置并返回要接收的字符數(shù)
其中CommEvent屬性是一個(gè)非常重要的屬性。一旦串口發(fā)生通信事件或產(chǎn)生錯(cuò)誤,依據(jù)產(chǎn)生的事件和錯(cuò)誤,MSComm控件為CommEvent屬性賦以不同的代碼,同時(shí)產(chǎn)生OnComm事件。用戶程序就可在OnComm事件處理程序中針對不同的代碼,進(jìn)行相應(yīng)的處理。
MAX485接口芯片是Maxim公司的一種RS-485芯片。采用單一電源+5 V工作,額定電流為300μA,采用半雙工通訊方式。它完成將TTL電平與RS-485電平轉(zhuǎn)換的功能。MAX485芯片的結(jié)構(gòu)和引腳都非常簡單,內(nèi)部含有一個(gè)驅(qū)動器和接收器。RO和DI端分別為接收器的輸出和驅(qū)動器的輸入端,與單片機(jī)連接時(shí)只需分別與單片機(jī)的RXD和TXD相連即可;/RE和DE端分別為接收和發(fā)送的使能端,當(dāng)/RE為邏輯0時(shí),器件處于接收狀態(tài);當(dāng)DE為邏輯1時(shí),器件處于發(fā)送狀態(tài),因?yàn)镸AX485工作在半雙工狀態(tài),所以只需用單片機(jī)的一個(gè)管腳控制這兩個(gè)引腳即可;A端和B端分別為接收和發(fā)送的差分信號端,當(dāng)A引腳的電平高于B時(shí),代表發(fā)送的數(shù)據(jù)為1;當(dāng)A的電平低于B端時(shí),代表發(fā)送的數(shù)據(jù)為0。在與單片機(jī)連接時(shí)接線非常簡單。只需要一個(gè)信號控制MAX485的接收和發(fā)送即可。
從通信協(xié)議及數(shù)據(jù)傳輸過程可知,單片機(jī)在初始化后要保持接收地址狀態(tài),當(dāng)接收到本機(jī)地址后回送地址并設(shè)置本機(jī)為接收數(shù)據(jù)狀態(tài),接收完數(shù)據(jù)后作出相應(yīng)的反應(yīng),最后回到接收地址的狀態(tài)。
6.結(jié)束語
本文介紹了一個(gè)以PC機(jī)為上位機(jī),以單片機(jī)為終端機(jī),通過RS485網(wǎng)絡(luò)把它們連接起來的計(jì)算機(jī)監(jiān)控系統(tǒng)的實(shí)現(xiàn)方法,重點(diǎn)介紹了利用Visual Basic6.0控件訪問串口實(shí)現(xiàn)串行通信、利用RS485接口實(shí)現(xiàn)單片機(jī)串口通信。具有開發(fā)簡單、成本低的優(yōu)點(diǎn),性能穩(wěn)定、運(yùn)行可靠、抗干擾能力強(qiáng)可以進(jìn)行半雙工通信組成多機(jī)通信網(wǎng)絡(luò)。
參考文獻(xiàn):
[1]張輝.Visual Basic 串口通信及編程實(shí)例.化學(xué)工業(yè)出版社,2013.11.
[2]李江全.Visual Basic數(shù)據(jù)采集與串口通信測控應(yīng)用實(shí)戰(zhàn).人民郵電出版社,2012.1.
[3]孫育才.ATMEL 新型AT89S52系列單片機(jī)及其應(yīng)用.清華大學(xué)出版社,2005.1.
[4]張萌.單片機(jī)應(yīng)用系統(tǒng)開發(fā)綜合實(shí)例.清華大學(xué)出版社,2007.1.
[5]鮑安平.單片機(jī)應(yīng)用技術(shù).西安安電子科技大學(xué)出版社,2013.1.