劉 榮,田淑娟,燕 苗,韓琛曄
石家莊計算機職業(yè)學(xué)院,河北石家莊 050061
在工業(yè)生產(chǎn)實踐中,經(jīng)常要對某些儀器儀表進(jìn)行監(jiān)測或是發(fā)送某些參數(shù),串口編程就顯得相當(dāng)重要。PC機以其高的性價比、較強的數(shù)據(jù)處理能力、較快處理速度、以及單片機體積小、低功耗、低成本、高性能、使用靈活的特點,利用PC機作為上位機,單片機作為下位機的主從工作方式在工業(yè)控制領(lǐng)域中被廣泛采用。
RS-232C是目前最常用的串行接口標(biāo)準(zhǔn),RS-232C提供了單片機與單片機、單片機與PC機之間串行數(shù)據(jù)通信的標(biāo)準(zhǔn)接口。但RS一232C規(guī)定的邏輯電平與單片機的邏輯電平是不一致的。因此,在應(yīng)用中必須把單片機的TTL電平和RS-232C電平進(jìn)行相互轉(zhuǎn)換,這里選用專用電平轉(zhuǎn)換集成芯片MAX232來實現(xiàn)的。
用MAX232芯片實現(xiàn)PC機與AT89C51單片機串行通信的典型電路如圖1所示。圖中外接電解電容C1、C2、C3、C4用于電源電壓變換,可提高抗干擾能力,它們可取相同容量的電容,一般取1.0μF/16V。電容C5的作用是對+5V電源的噪聲干擾進(jìn)行濾波,一般取0.1μF。選用兩組中的任意一組電平轉(zhuǎn)換電路實現(xiàn)串行通信,中選Tlin、Rlout分別與AT89C51的TXD、RXD相連,Tlout、Rlin分別與PC機中R232接口的RXD、TXD相連。這種發(fā)送與接收的對應(yīng)關(guān)系不能接錯,否則將不能正常工作。
圖1 MAX232芯片實現(xiàn)PC機與AT89C51單片機串行通信的典型電路
1.3.1 通信方式選擇
通信方式上,采用異步方式,微處理器對PC機的通信采用串口中斷方式。
AT89C51有一個標(biāo)準(zhǔn)的串行口,有4種工作方式,其中方式1是標(biāo)準(zhǔn)的10位異步通信方式,1O位數(shù)據(jù)和PC機的標(biāo)準(zhǔn)串口相對應(yīng),由串口控制寄存器SCON設(shè)置狀態(tài),設(shè)置SCON=0X50H。
1.3.2 89C51通信波特率設(shè)置
在串行通信中,一個重要的指標(biāo)是波特率,它反映了串行通信的速率,也反映了對傳輸通道的要求。波特率越高,要求傳輸通道的頻帶越寬。由于異步通信雙方各自用自己的時鐘源,要保證捕捉到的信號正確,最好采用較高的時鐘。一般選擇時鐘頻率比波特率高16倍或64倍。如果時鐘頻率等于波特率,則頻率稍有偏差便會產(chǎn)生接收錯誤。這里選用l1.059MHz晶振。
89c51的串行通信的波特率由定時器T1的溢出率獲得,當(dāng)串口工作于方式1時,波特率為:波特率=(2SMOD*TD)/32,其中SMOD為波特率加倍。取值為0或1。定時器工作于方式2時,波特率為 9 600bit/s,令 SMOD=0, THl=TL1=0Xfd。
傳送方式:PC機采用查詢方式接收數(shù)據(jù),單片機采用中斷方式接收、發(fā)送;校驗方式:奇偶校驗。
單片機通信程序分為接收中斷處理程序、發(fā)送中斷處理程序和通信處理程序3部分,構(gòu)成整個單片機的通信程序。
接收中斷處理程序主要負(fù)責(zé)接收微機發(fā)送到單片機接收緩沖區(qū)的數(shù)據(jù),接收數(shù)據(jù)時,串行數(shù)據(jù)的接收受到串行控制器SCON中的允許接收位REN控制。當(dāng)REN為1時,接收控制器開始工作,對接收數(shù)據(jù)進(jìn)行采樣。當(dāng)接收到規(guī)定的字符數(shù)之后,置接收中斷位RI為1,以表明接收緩沖區(qū)中有待處理的數(shù)據(jù)并請求通信處理程序?qū)ζ溥M(jìn)行處理。
發(fā)送中斷處理程序主要負(fù)責(zé)向微機發(fā)送數(shù)據(jù),發(fā)送數(shù)據(jù)時,通信處理程序?qū)⑿枰l(fā)送的數(shù)據(jù)寫入單片機的發(fā)送緩沖區(qū)SBUF,啟動了發(fā)送工作,并將緩沖區(qū)數(shù)據(jù)逐一發(fā)送給微機。當(dāng)發(fā)送完指定長度的數(shù)據(jù)后(發(fā)送緩沖區(qū)為空),發(fā)送中斷處理程序?qū)l(fā)送中斷標(biāo)志位TI置位為1,直到通信處理程序再一次發(fā)送數(shù)據(jù)。
只有在接收到上位機送來的一串?dāng)?shù)據(jù),且接收完畢標(biāo)志為“1”時,才能真正進(jìn)行處理。首先對接收緩沖區(qū)SBUF中的內(nèi)容進(jìn)行校驗,完全無誤后再根據(jù)通信要求對緩沖區(qū)的內(nèi)容進(jìn)行相應(yīng)處理,同時判斷是否還需將發(fā)送緩沖區(qū)SBUF中的數(shù)據(jù)發(fā)送到微機,最后退出通信處理程序,執(zhí)行其它程序。當(dāng)接收中斷程序再次接收到數(shù)據(jù)并將接收完標(biāo)志置為“1”后,可再次進(jìn)入通信處理程序進(jìn)行相應(yīng)的處理。
Borland公司推出的Delphi以其強大的功能并且友好的、有可視化用戶界面,特別適合Windows平臺下的圖形界面和用戶程序的編制從而得到廣大用戶的認(rèn)可;同時采用第三方控件Spcomm的屬性和方法及事件來實現(xiàn)系統(tǒng)監(jiān)測控制和信息處理是工業(yè)企業(yè)通常采用的實現(xiàn)方法。
1)屬性
CommName:計算機串口端口號的名字,COM1、COM2;Parity:校驗位的設(shè)置。BaudRate:串口通信波特率;ByteSize:一個字節(jié)中,收發(fā)數(shù)據(jù)數(shù)據(jù)位數(shù);StopBits:一個字節(jié)中,使用停止位的位數(shù);SendDataEmpty:發(fā)送緩沖區(qū)是否為空。
2)方法
StartComm方法:用來打開通信串口,開始通信。
StopComm方法:用來停止通信串行口的所有進(jìn)程,關(guān)閉串口。
WriteCommData(pDataToWriteChar;dwSizeofDataToWrite:Word)方法是帶有布爾型返回值的函數(shù),其中pDataToWrite是要寫入串行口的字符串,DwSizeaofDataToWrite是要寫入的字符串的長度。該函數(shù)通過一個寫線程向串行口輸出緩沖區(qū)發(fā)送數(shù)據(jù)。
3)事件
ata(Buffer:inter;BufferLength:Word),其中Buffer是指向輸入緩沖區(qū)的指針。BufferLength是從緩沖區(qū)收到的數(shù)據(jù)長度。當(dāng)輸入緩沖區(qū)收到數(shù)據(jù)時,該事件被觸發(fā)。當(dāng)輸入緩存有數(shù)據(jù)時將觸發(fā)該事件,對從串口收到的數(shù)據(jù)進(jìn)行處理。
Spcomm串口通信的實現(xiàn)
實現(xiàn)PC機與單片機之間的數(shù)據(jù)發(fā)送及接收需要以下步驟:
1)串口初始化,通過設(shè)置如下屬性完成。即分別設(shè)置屬性 Comm1.CommName:=com1;Comm1.BaudRate:=9600;Comm1.Parity:=None;Comm1.ByteSize:=8; Comm1.StopBits:=1; Comm1.StartComm。
要實現(xiàn)PC機與單片機之間的通信,首先要建立它們之間的握手信號,握手信號為約定的特定字符, 當(dāng)PC發(fā)出一幀數(shù)據(jù)后,如果在接收事件能收到單片機返回的規(guī)定字符來判斷表示握手成功,系統(tǒng)通信正常。
2)發(fā)送數(shù)據(jù)。在編寫基于串口的監(jiān)測控制程序時,需要由PC機向單片機發(fā)送控制指令從而控制下位機的行為,同時向下位機發(fā)送相應(yīng)數(shù)據(jù),調(diào)用相應(yīng)的發(fā)送程序。
3)接收數(shù)據(jù)。在控制中,常常需要實時接收下位機傳上來的數(shù)據(jù),但用SPCOMM時會出現(xiàn)必需緩存滿或者每幀之間的間隔大于ReadIntervalTimeout時才會觸發(fā)OnReceivedata,ReadIntervalTimeout屬性默認(rèn)值是100ms,即在100ms內(nèi),屬于同一幀數(shù)據(jù)。編寫串口的監(jiān)控程序時,通常需要由下位機向PC機發(fā)送數(shù)據(jù)以使PC機了解系統(tǒng)的測試數(shù)據(jù)或下位機的運行狀態(tài),并進(jìn)而控制下位機的行為。
4)關(guān)閉串口。在系統(tǒng)開發(fā)中,應(yīng)注意在不使用串口時應(yīng)及時關(guān)閉串口,釋放系統(tǒng)資源,否則可能會影響系統(tǒng)的其它應(yīng)用。即調(diào)用comml.StopComm。
在采用以PC機為控制中心的數(shù)據(jù)采集自動化控制系統(tǒng)中,通常需要單片機采集數(shù)據(jù),然后用異步串行通訊方式傳給PC機,在PC機上進(jìn)行數(shù)據(jù)處理再傳送到單片機,是很有應(yīng)用價值的。
[1]求是科技.elphi串口通信工程開發(fā)實例導(dǎo)航[M].人民郵電出版社,2003.
[2]張曉鄉(xiāng).89C51單片機實用教程[M].電子工業(yè)出版社,2010.
[3]黃軍,熊勇,劉艷,劉曉梅.delphi串口通信編程[M].人民郵電出版社,2010.
[4]李朝青.PC機及單片機通訊技術(shù)[M].北京航空航天大學(xué)出版社,2000.