山西國營大眾機械廠軍用加固外設研究所 張 巖
51單片機與上位PC機的串行通信技術
山西國營大眾機械廠軍用加固外設研究所 張 巖
近幾年來,單片機用它自身較高的性價比越來越多的在智能式儀表和工業過程控制中得到廣泛好評和應用。但是因為單片機本身的資源有限,其中一些復雜過程和功能中很多的控制就很難滿足要求,必須將單片機的數據上傳到上一級計算機進行處理。所以實現上位機(PC機)和下位機(單片機)之間的數據傳輸具有極其重要的意義。
上位機;單片機;串口通信;MAX232
串行通信是通過同一信號線將數據按照一定的順序傳送的方式。因為他的通路可以只有一條,發送和接收信息不可以同時進行,所以只恩呢該采用分時間段采用線路的方法,例如:A在發送信息,而B只能接收信息。這種串行通信的工作方式稱為半雙工通信方式。如果工作中有兩條通路,發送和接收信息遍可以同時進行了。例如:A發送信息的同時,B也可以同時發送信息。這種工作方式便可以稱作雙工通信方式。除了以上兩種還有一種單工通信,他只可以單方向的傳送信息。這種工作方式在實際工作中極為少見。
單片機的串行通信的工作方式有三種,單工、半雙工、雙工配置。單工是指數據傳輸每次只恩呢該按照一個方向傳輸。半雙工是數據可以按兩個方向傳輸,但是需要分時間進行。全雙工時指可以同時雙向傳輸數據。是兩個單向配置,要求兩端都具備獨立完成和發送接收能力的通信設備。
圖1為串行通信的數據傳送方式。

圖1 串行通信傳送方式
89C51單片機不僅具一個串行接口,同時還擁有4個8位并行接口。此串行接口屬于全雙工通信接口,它具有可以編程性。在使用過程中,該接口能夠同時發送和接收串行數據。它可以起到同步移位寄存器作用,同時也可以當作異步接收和發送器來進行異步通信。其幀格式有8位、10位、或11位,并能設置各種波特率,給使用帶來了很大的靈活性。
89C51單片機系統通過串口可以實現點對點的單機通信和89C51與多個系統主機之間的多機通信。
89C51的外部通信功能是通過RXD(P3.0,串行數據接收端)和TXD(P3.1,串行據發送端)口實現的。該單片機的內部結構如圖2所示。在該簡化示意圖中可以看出,89C51單片機中有兩個獨立的發送、接收緩沖寄存器——SBUF(Serial Data Buffer),99H地址可以被這兩個寄存器共同使用,接收和發送數據能同時進行。其中:接收緩沖器只能用于讀取數據,不能寫入數據;而發送寄存器只能用于寫入數據,不能讀取數據。

圖2 單片機串口的內部結構
CPU主動發送的特性可以保證串行數據接收與發送的同步性。用定時器T1作為89C51串行通信的波特率發生器,串行接受或發送的一位脈沖是由T1溢出率2分頻或不分頻后又經16分頻所得,其移位的速率即是波特率。
從圖中可以看出:第一個字節的內容在被接收緩沖寄存器SBUF讀出之前,第二個字節即開始被接收新的內容(將串行數據輸入至移位寄存器)這就形成了接收器的雙緩沖結構。然而,如果出現前一個字節尚未被讀取時第二個字節已經接收完畢的狀況,則前一個字節的內容會被丟棄。
寄存器即可以讀寫串行口的發送,又可以讀寫接收。緩沖寄存器SBUF裝載并由TXD引腳向外發送一幀數據的過程,即是發寫命令,當發送結束后,這時會發送中斷標志位TI被置為1。
接收位REN置為1的前提是,滿足串行口接收終端標志位RI被置為0,此時將會有數據以一幀的形式被移位寄存器接收,并將這一幀數據裝載到接收SBUF中,此時接收終端標志位將會把RI置為1。當發送SBUF命令時,接收緩沖器(SBUF)將會取出信息,89C51會通過內部總線將該數據發送至CPU。一般情況不用雙緩沖器結構來保持最大傳送速率。
根據實際需要,89C51串行口通常有4種不同的工作方式可以設置,其中幀格式有8位、10位和11位。這四種不同的工作方式為:
3.2.1 工作方式0
方式0時,同步移位寄存器的輸入與輸出均是通過串行口來實現的,方便并行輸入或輸出口的擴展。外接部件的同步數據信號是由RXD(P3.0)引腳來進行輸入或輸出,并通過TXD(P3.1)引腳輸出同步移位脈沖。工作時無起始位,奇偶校驗位既停止位,接收和發送均占用8位數據位,通常情況下為低位排在前面,高位排在后面。一般用于擴展I/O口,該方式的波特率為固定值fosc/12。
3.2.2 工作方式1
方式1是波特率可調的10位數據的異步通信方式。引腳TXD是用來發送數據,數據的接收引腳是RXD,其中1位起始位,1位停止位,8位數據位。在接收時,停止位進入SCON的RB8,該方式的傳送波特率可以調節。
當REN被設置成1,允許接收數據,RXD引腳脈沖會被接收器進行采樣。RXD的電平會發生跳變,當RXD電平為負時起始位有效。此時移位寄存器開始裝載數據,剩余的幀信息將按順序被接受。由于數據是從最右一位一位開始移入,控制電路最后移位的條件是,最先接收的數據位移至寄存器的最里邊時,即左邊。當RI被置為0,且接收到的停止位為1時,這時一幀數據會被SBUF接受寄存器完全裝載,第9位停止位由進入RB8,RI的值變為1,同時向CPU發送中斷命令信號。
3.2.3 工作方式2和方式3
方式2和方式3的功能相同,區別在于方式3的波特率可調。方式2串口工作方式波特率是固定的11位數據的異步通信方式。同樣引腳TXD是用來發送數據,數據的接收引腳是RXD。11位數據中有1位起始位,1位停止位,9位數據位。方式2有其特定的波特率,其頻率通常被固定在晶振的1/32或1/64。方式3的波特率可根據定時器的溢出率來調整。
(1)方式2和方式3輸入
在接收數據時,輸入移位寄存器從右邊開始逐個讀取數據,控制電路最后移位的條件是,最左邊的數據變為起始位的0時。當RI被置為0,且接收到的停止位為1時,接收緩沖器SBUF,RB8將存儲接收到的數據,隨后RI置為1,通過內部總線將中斷信號發送至CPU。反之,如果完成該步驟,則會丟失信息,且RI依舊為0,繼續查找RXD端的負電平。
(2)方式2和方式3輸出
當輸出開始時,TXD端會接收到來自起始位的0。接著,該引腳會接收到移位寄存器的輸出位(D0)。每接收到一個移位電平,就會使輸出移位寄存器內的全部信息右移一位,并由TXD端輸出。
在第一次移位時,輸出移位寄存器的第9位上則會被裝載為停止位“1”,之后的所有移位,每次會在左邊添加一個0。因輸出與輸入正好相反,從左向右移,當停止位被1輸出時,會檢測到左側的位都是0,電路發覺到這一狀態后,控制電路則最后一次移位,并將TI修改為1,向CPU發出中斷命令信號。
單片機與上位機的串行通信在現場控制中有著很多的應用,單片機作為數據采集端,將采集到的數據傳給上位機,由上位機進行處理。本系統利用了AT89C51和MAX232芯片,可以實現的功能如下:
(1)通過鍵盤輸入數據;
(2)在四位數碼管上顯示要求顯示的數據;
(3)單片機和上位機實現串行通信。
[1]郭天祥.單片機,十天征服你[M/CD].哈爾濱:哈爾濱工程大學,2007,7.
[2]張振榮,晉明武,王毅平.MCS-51單片機原理及實用技術[M].北京:人民郵電出版社,2000,8.
[3]張迎新,雷道振,陳勝,等.單片微型計算機原理.應用接口技術[M].北京:國防工業出版社,2004.1.