一、計算機(jī)串行通信基礎(chǔ)
計算機(jī)通信是指計算機(jī)與外部設(shè)備或計算機(jī)與計算機(jī)之間的信息交換。計算機(jī)通信是將計算機(jī)技術(shù)和通信技術(shù)的相結(jié)合,完成計算機(jī)與外部設(shè)備或計算機(jī)與計算機(jī)之間的信息交換。
通信有并行通信和串行通信兩種方式。在多微機(jī)系統(tǒng)以及現(xiàn)代測控系統(tǒng)中信息的交換多采用串行通信方式。
- 并行通信通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時進(jìn)行傳送,如下圖。并行通信控制簡單、傳輸速度快;但由于傳輸線較多,長距離傳送時成本高且接收方的各位同時接收存在困難。

- 串行通信是將數(shù)據(jù)字節(jié)分成一位一位的形式在一條傳輸線上逐個傳送,如下圖。串行通信的特點是傳輸線少,長距離傳送時成本低,并且可以利用電話網(wǎng)等現(xiàn)成的設(shè)備,但數(shù)據(jù)的傳送控制比并行通信復(fù)雜。

二、串行通信的基本概念
串行通信根據(jù)收發(fā)雙方是否使用同步時鐘分為兩種方式:同步串行通信與異步串行通信。
2.1、異步通信與同步通信
(1)異步通信
異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時鐘控制數(shù)據(jù)的發(fā)送和接收過程。為使雙方的收發(fā)協(xié)調(diào),要求發(fā)送和接收設(shè)備的時鐘盡可能一致。
異步通信是以字符(構(gòu)成的幀)為單位進(jìn)行傳輸,字符與字符之間的時間間隔(間隙)是任意的,但每個字符中的各位是以固定的時間傳送的,即字符之間不一定有位間隔的整數(shù)倍的關(guān)系,但同一字符內(nèi)的各位之間的距離均為位間隔的整數(shù)倍。

異步通信的數(shù)據(jù)格式如下,一個字符幀包括:1個起始位+8個數(shù)據(jù)位+1個校驗位+1個停止位=11個位。

異步通信的特點是:不要求收發(fā)雙方時鐘的嚴(yán)格一致,實現(xiàn)容易,設(shè)備開銷較小,但每個字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。
(2) 同步通信
同步通信時要建立發(fā)送方時鐘對接收方時鐘的直接控制,使雙方達(dá)到完全同步。此時,傳輸數(shù)據(jù)的位之間的距離均為位間隔的整數(shù)倍,同時傳送的字符間不留間隙,即保持位同步關(guān)系,也保持字符同步關(guān)系
發(fā)送方對接收方的同步可以通過兩種方法實現(xiàn):外同步和自同步,如下。

2.2、串行通信的傳輸方向
串行通信的傳輸方向有單工、半雙工、全雙工。
- 單工是指數(shù)據(jù)傳輸僅能沿一個方向,不能實現(xiàn)反向傳輸。
- 半雙工是指數(shù)據(jù)傳輸可以沿兩個方向,但需要分時進(jìn)行。
- 全雙工是指數(shù)據(jù)可以同時進(jìn)行雙向傳輸。
如下圖從左至右分別是單工、半雙工、全雙工通信。

2.3、串行通信常見的錯誤校驗
- 奇偶校驗
在發(fā)送數(shù)據(jù)時,數(shù)據(jù)位尾隨的1位為奇偶校驗位(1或0)。
奇校驗時,數(shù)據(jù)中”1“的個數(shù)與校驗位“1”的個數(shù)之和應(yīng)為奇數(shù);
偶校驗時,數(shù)據(jù)中“1”的個數(shù)與校驗位“1”的個數(shù)之和應(yīng)為偶數(shù)。
接收字符時,對“1”的個數(shù)進(jìn)行校驗,如果發(fā)現(xiàn)不一致,說明傳輸數(shù)據(jù)過程中出現(xiàn)了差錯。
比如對于發(fā)送的數(shù)據(jù)11000110,該數(shù)據(jù)中1的個數(shù)有4個。如果采用奇校驗,那么校驗位應(yīng)該為1;如果采用偶校驗,那么校驗位應(yīng)該為0。
- 代碼和校驗
代碼和校驗是發(fā)送方將所發(fā)數(shù)據(jù)塊求和(或各字節(jié)異或),產(chǎn)生一個字節(jié)的校驗字符(校驗和)附加到數(shù)據(jù)塊末尾。
接收方接收數(shù)據(jù)同時對數(shù)據(jù)塊(除校驗字節(jié)外)求和(或各字節(jié)異或),將得到的結(jié)果與發(fā)送方的校驗和進(jìn)行比較,相符則無差錯,否則認(rèn)為傳送過程中出現(xiàn)了差錯。
- 循環(huán)冗余校驗
循環(huán)冗余校驗是通過某種數(shù)學(xué)運(yùn)算實現(xiàn)有效信息與校驗位之間的循環(huán)校驗,常用于對磁盤信息的傳輸、存儲區(qū)的完整性校驗等。這種校驗方法糾錯能力強(qiáng),廣泛用于同步通信中。
2.4、傳輸速率
串行通信的傳輸速率以比特率(也稱為波特率)為單位,比特率是每秒鐘傳輸二進(jìn)制的位數(shù),單位是位/秒(bps)。如果每秒鐘傳送240個字符,每個字符格式包含10位(1個起始位、1個停止位、8個數(shù)據(jù)位),那么此時的比特率為:10位x240個/秒=2400bps。
串行接口或終端直接傳送串行信息位流的最大距離與傳輸速率及傳輸線的電氣特性有關(guān)。
當(dāng)傳輸線使用每0.3m有50pF電容的非平衡屏蔽雙絞線時,傳輸距離隨傳輸速率的增加而減小。
當(dāng)比特率超過1000bps時,最大傳輸距離迅速下降,如9600bps時最大距離下降到只有76m。
三、串行通信接口標(biāo)準(zhǔn)
3.1、RS-232C接口
RS-232C是EIA(美國電子工業(yè)協(xié)會)1969年修訂的RS-232C標(biāo)準(zhǔn),該標(biāo)準(zhǔn)定義了數(shù)據(jù)終端設(shè)備(DTE)與數(shù)據(jù)通信設(shè)備(DCE)之間的物理接口標(biāo)準(zhǔn)。
- RS-232C的機(jī)械特性
RS-232C接口規(guī)定了使用25針連接器,連接器的尺寸及每個插針的排列位置都有明確定義。(陽頭)
下圖是RS-232C接口示意圖,左圖是標(biāo)準(zhǔn)的25針連接器,由圖是9針非標(biāo)準(zhǔn)連接器。

RS-232C接口的功能特性如下,序號內(nèi)是9針非標(biāo)準(zhǔn)連接器的引腳號。
| 插針序號 | 接口名稱 | 功能 | 信號方向 |
|---|---|---|---|
| 1 | PGND | 保護(hù)接地 | |
| 2(3) | TXD | 發(fā)送數(shù)據(jù)(串行輸出) | DTE→DCE |
| 3(2) | RXD | 接收數(shù)據(jù)(串行輸入) | DTE←DCE |
| 4(7) | RTS | 請求發(fā)送 | DTE→DCE |
| 5(8) | CTS | 允許發(fā)送 | DTE←DCE |
| 6(6) | DSR | DCE就緒,數(shù)據(jù)建立就緒 | DTE←DCE |
| 7(5) | SGND | 信號接地 | |
| 8(1) | DCD | 載波檢測 | DTE←DCE |
| 20(4) | DTR | DTE就緒,數(shù)據(jù)終端準(zhǔn)備就緒 | DTE→DCE |
| 22(9) | RI | 振鈴指示 | DTE←DCE |
RS-232C的過程特性規(guī)定了信號之間的時序關(guān)系,以便正確地接收和發(fā)送數(shù)據(jù)。


RS232C電平與TTL電平轉(zhuǎn)換驅(qū)動電路如下所示:

RS-232C接口存在如下問題:
- 傳輸距離短,傳輸速率低
RS-232C總線標(biāo)準(zhǔn)受電容允許值的約束,使用時傳輸距離一般不要超過15米(線路條件好時也不要超過幾十米)。最高傳輸速率為20Kbps。
- 有電平偏移
RS-232C總線標(biāo)準(zhǔn)要求收發(fā)雙方共地。通信距離較大時,收發(fā)雙方的地電位差別較大,在信號地上將有比較大的地電流并產(chǎn)生壓降。
- 抗干擾能力差
RS-232C在電平轉(zhuǎn)換時采用單端輸入輸出,在傳輸過程中干擾和噪聲會混在正常的信號中。為了提高信噪比,RS-232C總線標(biāo)準(zhǔn)不得不采用比較大的電壓擺幅。
3.2、RS-422A
RS-422A輸出驅(qū)動器為雙端平衡驅(qū)動器。如果其中一條線為邏輯“1”狀態(tài),另一條線就位邏輯“0”,比采用單端不平衡驅(qū)動對電壓的放大倍數(shù)大一倍。
差分電路能從地線干擾中拾取有效信號,差分接收器可以分辨200mV以上的電位差。
如果傳輸過程中混入了干擾和噪聲,由于差分放大器的作用,可以使干擾和噪聲相互抵消。因此可以避免或大大減弱地線干擾和電磁干擾的影響。
RS-422A傳輸速率為90Kbps時,傳輸距離可達(dá)1200米。

3.3、RS-485接口
RS-485是RS-422A的變型:RS-422A用于全雙工,RS-485用于半雙工。
RS-485是一種多發(fā)送器標(biāo)準(zhǔn),在通信線路商最多可以使用32對差分驅(qū)動器/接收器。如果在一個網(wǎng)絡(luò)中連接的設(shè)備超過32個,還可以使用中繼器。

RS-485的信號傳輸采用兩線間的電壓來表示邏輯1和邏輯0,。由于發(fā)送當(dāng)需要兩根傳輸線,接收方也需要兩根傳輸線。
傳輸線采用差動信道,所以它的干擾抑制性極好,又因為它的阻抗低,無接地問題,所以傳輸距離可達(dá)1200米,傳輸速率可達(dá)1Mbps。
RS-485是一點對多點的通信接口,一般采用雙絞線的結(jié)構(gòu)。普通的PC機(jī)一般不帶RS485接口,因此要使用RS-232C/RS-485轉(zhuǎn)換器。對于單片機(jī)可以通過芯片MAX485來完成TTL/RS-485的電平轉(zhuǎn)換。
在計算機(jī)和單片機(jī)組成的RS-485通信系統(tǒng)中,下位機(jī)由單片機(jī)系統(tǒng)組成,上位機(jī)為普通的PC機(jī),負(fù)責(zé)監(jiān)視下位機(jī)的運(yùn)行狀態(tài),并對其狀態(tài)信息進(jìn)行集中處理,以圖文方式顯示下位機(jī)的工作狀態(tài)以及工業(yè)現(xiàn)場被控設(shè)備的工作狀況。系統(tǒng)中各節(jié)點的識別是通過設(shè)置不同的站地址來實線的。
四、80C51的串行口
80C51串行口的結(jié)構(gòu)如下圖所示,TXD(P3.1)和RXD(P3.0)用來實現(xiàn)串口通信;有兩個物理上獨(dú)立的接收、發(fā)送緩沖器SBUF,它們占用同一地址99H;要實現(xiàn)串口通信,用到了定時器T1。接收器是雙緩沖結(jié)構(gòu),發(fā)送緩沖器因為發(fā)送時CPU是主動的,因此不會產(chǎn)生重疊錯誤。

4.1、80C51串行口的控制寄存器
(1)SCON特殊功能寄存器
SCON是一個特殊功能寄存器,用來設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志。
SCON寄存器各位表示如下:
| 位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
|---|---|---|---|---|---|---|---|---|---|
| 字節(jié)地址:98H | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI | SCON |
- 其中SM0和SM1為工作方式選擇位,可選擇四種工作方式:
| SM0SM1 | 方式 | 說明 | 波特率 |
|---|---|---|---|
| 00 | 0 | 移位寄存器 | |
| 01 | 1 | 10位異步收發(fā)器(8位數(shù)據(jù)) | 可變 |
| 10 | 2 | 11位異步收發(fā)器(9位數(shù)據(jù)) |
|
| 11 | 3 | 11位異步收發(fā)器(9位數(shù)據(jù)) | 可變 |
-
SM2:多機(jī)通信控制位,主要用于方式2和方式3。
- 當(dāng)接收機(jī)的SM2=1時可以利用收到的RB8位來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI,進(jìn)而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。
- 當(dāng)SM2=0時,不論收到的RB8為0或1,均可以使收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI(即此時RB8不具有控制RI激活的功能)。通過控制SM2可以實現(xiàn)多機(jī)通信。
- 在方式0時,SM2必須是0;在方式1時,如果SM2=1,則只有接收到有效停止位時,RI才置1。
REN:允許串行接收位。由軟件置REN=1,則啟動串行口接收數(shù)據(jù);若軟件置REN=0,則禁止接收。
TB8:在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,可以用軟件規(guī)定其作用,可以用作數(shù)據(jù)的奇偶校驗位,或在多機(jī)通信中,作為地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式0或方式1中,該位未用。
RB8:在方式2或方式3中,是接收到數(shù)據(jù)的第九位,作為奇偶校驗位或地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式1時,如果SM2=0,則RB8是接收到的停止位。
TI:發(fā)送中斷標(biāo)志位。在方式0時,當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行發(fā)送停止位的開始時,由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請。在中斷服務(wù)程序中,必須用軟件將其清0,取消此中斷申請。
RI:接收中斷標(biāo)志位。在方式0時,當(dāng)串行接收第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行接收停止位的中間時,由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請。也必須在中斷服務(wù)程序中,用軟件將其清0,取消此中斷申請。
(2)PCON特殊功能寄存器
PCON中只有一位SMOD與串行口工作有關(guān)。
| 位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
|---|---|---|---|---|---|---|---|---|---|
| 字節(jié)地址:97H | SMOD | PCON |
- SMOD:波特率倍增位。在串行口方式1、方式2、方式3時,波特率與SMOD有關(guān)。
- 當(dāng)SMOD=1時,波特率提高一倍。
- 復(fù)位時,SMOD=0。
4.2、80C51串行口的工作方式
TCON的SM0SM1指定了四種工作方式。
(1) 方式0
在方式0時,串行口為同步移位寄存器的輸入/輸出方式,主要用于擴(kuò)展并行輸入或輸出口。
數(shù)據(jù)由RXD(P3.0)引腳輸入或輸出,同步移位脈沖由TXD(P3.1)引腳輸出。發(fā)送和接收均為8位數(shù)據(jù),低位在先,高位在后。波特率固定為。
如下為方式0輸出時序圖,從時序圖可以看到,當(dāng)發(fā)送完數(shù)據(jù)后,會產(chǎn)生中斷(TI置為高電平);TXD為高電平,RXD由高電平到低電平時,開始發(fā)送數(shù)據(jù)。當(dāng)TXD為低電平時,RXD保持電平不變;當(dāng)TXD為高電平時,RXD可以更改電平。

如下為方式0輸入時序圖,REN置位1,啟動串行口接收數(shù)據(jù);TXD為低電平時接收RXD的數(shù)據(jù)輸入。

(2)方式1
方式1是10位數(shù)據(jù)的異步通信口。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳,傳送一幀數(shù)據(jù)的格式如下圖所示。其中10位數(shù)據(jù)包括:1位起始位+8位數(shù)據(jù)位+1位停止位。

方式1輸出時序圖如下,TXD由高電平變?yōu)榈碗娖綍r開始發(fā)送起始位,當(dāng)發(fā)送停止位(高電平)時,TI置高電平發(fā)送中斷請求。

方式1輸入時序圖如下,RXD由高電平變?yōu)榈碗娖介_始接收起始位,當(dāng)收到停止位(高電平)時,置RI為高電平,發(fā)送中斷請求。

用軟件置REN為1時,接收器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測到RXD引腳輸入電平發(fā)生負(fù)跳變時,則說明起始位有效,將其移入輸入移位寄存器,并開始接收這一幀信息的其余位。
接收過程中,數(shù)據(jù)從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進(jìn)行最后一次移位。當(dāng)RI=0,且SM2=0(或接收到的停止位為1)時,將接收到9位數(shù)據(jù)的前8位數(shù)據(jù)裝入接收SBUF,第9位進(jìn)入RB8,并置RI=1,向CPU請求中斷。
(2)方式2和方式3
方式2或方式3時為11位數(shù)據(jù)的異步通信口。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳。

方式2和方式3起始位1位,數(shù)據(jù)9位(含1位附加的第9位,發(fā)送時為SCON中的TB8,接收時為RB8),停止位1位,一幀數(shù)據(jù)為11位。方式2的波特率固定為晶振頻率的1/64或1/32,方式3的波特率由定時器TI的溢出率決定。
方式2和方式3輸出時序圖:

發(fā)送開始時,先把起始位0輸出到TXD引腳,然后發(fā)送移位寄存器的輸出位D0到TXD引腳。每一個移位脈沖都使輸出移位寄存器的各位右移一位,并由TXD引腳輸出。
第一次移位時,停止位1移入輸出移位寄存器的第9位上,以后每次移位,左邊都移入0。當(dāng)停止位移至輸出位時,左邊其余位全為0,檢測電路檢測到這一條件時,使控制電路進(jìn)行最后一次移位,并置TI=1,向CPU請求中斷。
方式2和方式3輸入時序圖:

接收時,數(shù)據(jù)從右邊移入輸入移位寄存器,在起始位0移到最左邊時,控制電路進(jìn)行最后一次移位。當(dāng)RI=0,且SM2=0(或接收到的第9位數(shù)據(jù)為1)時,接收到的數(shù)據(jù)裝入接收緩沖器SBUF和RB8(接收數(shù)據(jù)的第9位),置TI=1,向CPU請求中斷。如果條件不滿足,則數(shù)據(jù)丟失,且不置位RI,繼續(xù)搜索RXD引腳的負(fù)跳變。
4.3、波特率的計算
在串行通信中,收發(fā)雙方對發(fā)送或接收數(shù)據(jù)的速率要有約定。通過軟件可對單片機(jī)串行口編程為四種工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可變的,由定時器TI的溢出率來決定。
串行口的四種工作方式對應(yīng)三種波特率。由于輸入的移位時鐘的來源不同,所以各種方式的波特率的計算公式也不相同。
方式0的波特率=
方式2的波特率=
方式1的波特率=
方式3的波特率=
當(dāng)T1作為波特率發(fā)生器時,最典型的用法是使T1工作在自動裝載的8位定時器方式(即方式2,且TCON的TR1=1,以啟動定時器)。這時溢出率取決于TH1中的計數(shù)值。
在單片機(jī)的應(yīng)用中,常用的晶振頻率為12MHz和11.0592MHz。所以選用的波特率也相對固定。常用的串行口波特率以及各參數(shù)的關(guān)系如下表所示:

4.4、串口如何使用
串行口工作之前,應(yīng)對其進(jìn)行初始化,主要是設(shè)置產(chǎn)生波特率的定時器1、串行口控制和中斷控制。
具體步驟如下:
- 確定T1的工作方式(編程TMOD寄存器);
- 計算T1的初值,裝載TH1、TL1;
- 啟動T1(編程TCON中的TR1位);
- 確定串行口控制(編程SCON寄存器);
- 串行口在中斷方式工作時,要進(jìn)行終端設(shè)置(編程IE、IP寄存器)。
五、單片機(jī)與單片機(jī)的通信
5.1、點對點的通信
(1) 硬件連接
如下實現(xiàn)系統(tǒng)1和系統(tǒng)2的通信,通過MAX232A芯片,每一個系統(tǒng)的發(fā)送管腳對應(yīng)其系統(tǒng)內(nèi)MAX232A的發(fā)送管腳;系統(tǒng)1中的MAX232A的接收引腳與系統(tǒng)2中的MAX232A的發(fā)送引腳連接。

5.2、多機(jī)通信
(1)硬件連接
單片機(jī)構(gòu)成的多機(jī)系統(tǒng)常采用總線型主從式結(jié)構(gòu)。所謂主從式,即在數(shù)個單片機(jī)中,有一個是主機(jī),其余的是從機(jī),從機(jī)要服從主機(jī)的調(diào)度、支配。
80C51單片機(jī)的串行口方式2和方式3適用于這種主從式的通信結(jié)。采用不同的通信標(biāo)準(zhǔn)時,還需要進(jìn)行相應(yīng)的電平轉(zhuǎn)換,有時還需要對信號進(jìn)行光電隔離。
在實際的多機(jī)應(yīng)用系統(tǒng)中,常采用RS-485串行標(biāo)準(zhǔn)總線進(jìn)行數(shù)據(jù)傳輸。
