劉 榮,田淑娟,燕 苗,韓琛曄
石家莊計算機職業學院,河北石家莊 050061
在工業生產實踐中,經常要對某些儀器儀表進行監測或是發送某些參數,串口編程就顯得相當重要。PC機以其高的性價比、較強的數據處理能力、較快處理速度、以及單片機體積小、低功耗、低成本、高性能、使用靈活的特點,利用PC機作為上位機,單片機作為下位機的主從工作方式在工業控制領域中被廣泛采用。
RS-232C是目前最常用的串行接口標準,RS-232C提供了單片機與單片機、單片機與PC機之間串行數據通信的標準接口。但RS一232C規定的邏輯電平與單片機的邏輯電平是不一致的。因此,在應用中必須把單片機的TTL電平和RS-232C電平進行相互轉換,這里選用專用電平轉換集成芯片MAX232來實現的。
用MAX232芯片實現PC機與AT89C51單片機串行通信的典型電路如圖1所示。圖中外接電解電容C1、C2、C3、C4用于電源電壓變換,可提高抗干擾能力,它們可取相同容量的電容,一般取1.0μF/16V。電容C5的作用是對+5V電源的噪聲干擾進行濾波,一般取0.1μF。選用兩組中的任意一組電平轉換電路實現串行通信,中選Tlin、Rlout分別與AT89C51的TXD、RXD相連,Tlout、Rlin分別與PC機中R232接口的RXD、TXD相連。這種發送與接收的對應關系不能接錯,否則將不能正常工作。

圖1 MAX232芯片實現PC機與AT89C51單片機串行通信的典型電路
1.3.1 通信方式選擇
通信方式上,采用異步方式,微處理器對PC機的通信采用串口中斷方式。
AT89C51有一個標準的串行口,有4種工作方式,其中方式1是標準的10位異步通信方式,1O位數據和PC機的標準串口相對應,由串口控制寄存器SCON設置狀態,設置SCON=0X50H。
1.3.2 89C51通信波特率設置
在串行通信中,一個重要的指標是波特率,它反映了串行通信的速率,也反映了對傳輸通道的要求。波特率越高,要求傳輸通道的頻帶越寬。由于異步通信雙方各自用自己的時鐘源,要保證捕捉到的信號正確,最好采用較高的時鐘。一般選擇時鐘頻率比波特率高16倍或64倍。如果時鐘頻率等于波特率,則頻率稍有偏差便會產生接收錯誤。這里選用l1.059MHz晶振。
89c51的串行通信的波特率由定時器T1的溢出率獲得,當串口工作于方式1時,波特率為:波特率=(2SMOD*TD)/32,其中SMOD為波特率加倍。取值為0或1。定時器工作于方式2時,波特率為 9 600bit/s,令 SMOD=0, THl=TL1=0Xfd。
傳送方式:PC機采用查詢方式接收數據,單片機采用中斷方式接收、發送;校驗方式:奇偶校驗。
單片機通信程序分為接收中斷處理程序、發送中斷處理程序和通信處理程序3部分,構成整個單片機的通信程序。
接收中斷處理程序主要負責接收微機發送到單片機接收緩沖區的數據,接收數據時,串行數據的接收受到串行控制器SCON中的允許接收位REN控制。當REN為1時,接收控制器開始工作,對接收數據進行采樣。當接收到規定的字符數之后,置接收中斷位RI為1,以表明接收緩沖區中有待處理的數據并請求通信處理程序對其進行處理。
發送中斷處理程序主要負責向微機發送數據,發送數據時,通信處理程序將需要發送的數據寫入單片機的發送緩沖區SBUF,啟動了發送工作,并將緩沖區數據逐一發送給微機。當發送完指定長度的數據后(發送緩沖區為空),發送中斷處理程序將發送中斷標志位TI置位為1,直到通信處理程序再一次發送數據。
只有在接收到上位機送來的一串數據,且接收完畢標志為“1”時,才能真正進行處理。首先對接收緩沖區SBUF中的內容進行校驗,完全無誤后再根據通信要求對緩沖區的內容進行相應處理,同時判斷是否還需將發送緩沖區SBUF中的數據發送到微機,最后退出通信處理程序,執行其它程序。當接收中斷程序再次接收到數據并將接收完標志置為“1”后,可再次進入通信處理程序進行相應的處理。
Borland公司推出的Delphi以其強大的功能并且友好的、有可視化用戶界面,特別適合Windows平臺下的圖形界面和用戶程序的編制從而得到廣大用戶的認可;同時采用第三方控件Spcomm的屬性和方法及事件來實現系統監測控制和信息處理是工業企業通常采用的實現方法。
1)屬性
CommName:計算機串口端口號的名字,COM1、COM2;Parity:校驗位的設置。BaudRate:串口通信波特率;ByteSize:一個字節中,收發數據數據位數;StopBits:一個字節中,使用停止位的位數;SendDataEmpty:發送緩沖區是否為空。
2)方法
StartComm方法:用來打開通信串口,開始通信。
StopComm方法:用來停止通信串行口的所有進程,關閉串口。
WriteCommData(pDataToWriteChar;dwSizeofDataToWrite:Word)方法是帶有布爾型返回值的函數,其中pDataToWrite是要寫入串行口的字符串,DwSizeaofDataToWrite是要寫入的字符串的長度。該函數通過一個寫線程向串行口輸出緩沖區發送數據。
3)事件
ata(Buffer:inter;BufferLength:Word),其中Buffer是指向輸入緩沖區的指針。BufferLength是從緩沖區收到的數據長度。當輸入緩沖區收到數據時,該事件被觸發。當輸入緩存有數據時將觸發該事件,對從串口收到的數據進行處理。
Spcomm串口通信的實現
實現PC機與單片機之間的數據發送及接收需要以下步驟:
1)串口初始化,通過設置如下屬性完成。即分別設置屬性 Comm1.CommName:=com1;Comm1.BaudRate:=9600;Comm1.Parity:=None;Comm1.ByteSize:=8; Comm1.StopBits:=1; Comm1.StartComm。
要實現PC機與單片機之間的通信,首先要建立它們之間的握手信號,握手信號為約定的特定字符, 當PC發出一幀數據后,如果在接收事件能收到單片機返回的規定字符來判斷表示握手成功,系統通信正常。
2)發送數據。在編寫基于串口的監測控制程序時,需要由PC機向單片機發送控制指令從而控制下位機的行為,同時向下位機發送相應數據,調用相應的發送程序。
3)接收數據。在控制中,常常需要實時接收下位機傳上來的數據,但用SPCOMM時會出現必需緩存滿或者每幀之間的間隔大于ReadIntervalTimeout時才會觸發OnReceivedata,ReadIntervalTimeout屬性默認值是100ms,即在100ms內,屬于同一幀數據。編寫串口的監控程序時,通常需要由下位機向PC機發送數據以使PC機了解系統的測試數據或下位機的運行狀態,并進而控制下位機的行為。
4)關閉串口。在系統開發中,應注意在不使用串口時應及時關閉串口,釋放系統資源,否則可能會影響系統的其它應用。即調用comml.StopComm。
在采用以PC機為控制中心的數據采集自動化控制系統中,通常需要單片機采集數據,然后用異步串行通訊方式傳給PC機,在PC機上進行數據處理再傳送到單片機,是很有應用價值的。
[1]求是科技.elphi串口通信工程開發實例導航[M].人民郵電出版社,2003.
[2]張曉鄉.89C51單片機實用教程[M].電子工業出版社,2010.
[3]黃軍,熊勇,劉艷,劉曉梅.delphi串口通信編程[M].人民郵電出版社,2010.
[4]李朝青.PC機及單片機通訊技術[M].北京航空航天大學出版社,2000.