MCS-51單片機的串行口具有兩條獨立的數據線——發送端TXD和接收端RXD,它允許數據同時往兩個相反的方向傳輸。一般通信時發送數據由TXD端輸出,接收數據由RXD端輸入。MCS-51單片機的串行口既可以用于網絡通信,亦可實現串行異步通信,還可以用作同步移位寄存器。如果在串行口的輸入輸出引腳上加上電平轉換器,就可方便地構成標準的RS-232接口。MCS-51單片機的串行接口是一個全雙工通信接口,它有兩個物理上獨立的接收、發送緩沖器SBUF,可以同時發送和接收數據。但是發送緩沖器只能寫入,不能讀出;接收緩沖器只能讀出,不能寫入。兩個緩沖器共用一個地址(99H)。
數據通信的基本概念
常用于數據通信的傳輸方式有單工、半雙工、全雙工和多工方式。
單工方式:數據僅按一個固定方向傳送。因而這種傳輸方式的用途有限,常用于串行口的打印數據傳輸與簡單系統間的數據采集。
半雙工方式:數據可實現雙向傳送,但不能同時進行,實際的應用采用某種協議實現收/發開關轉換。
全雙工方式:允許雙方同時進行數據雙向傳送,但一般全雙工傳輸方式的線路和設備較復雜。
多工方式:以上三種傳輸方式都是用同一線路傳輸一種頻率信號,為了充分地利用線路資源,可通過使用多路復用器或多路集線器,采用頻分、時分或碼分復用技術,即可實現在同一線路上資源共享功能。
根據同步方式,串行數據通信有兩種形式,如圖5-5所示。
異步通信。在這種通信方式中,接收器和發送器有各自的時鐘,它們的工作是非同步的。異步通信用一幀來表示一個字符,其內容是一個起始位,緊接著是若干個數據位。
同步通信。同步通信格式中,發送器和接收器由同一個時鐘源控制,在異步通信中,每傳輸一幀字符都必須加上起始位和停止位,占用了傳輸時間,若要求傳送數據量較大,速度就會慢得多。同步傳輸方式去掉了這些起始位和停止位,只在傳輸數據塊時先送出一個同步頭(字符)標志即可。
同步傳輸方式比異步傳輸方式速度快,這是它的優勢。但同步傳輸方式也有其缺點,即它必須要用一個時鐘來協調收發器的工作,所以它的設備也較復雜。
MCS-51的串行口控制寄存器
在完成串行口初始化后,發送數據時,采用MOV SBUF,A指令,將要發送的數據寫入SBUF,則CPU自動啟動和完成串行數據的輸出;接收數據時,采用MOV A,SBUF指令,CPU就自動將接收到的數據從SBUF中讀出。
控制MCS-51單片機串行接口的控制寄存器有兩個——特殊功能寄存器SCON和PCON,用以設置串行端口的工作方式、接收/發送的運行狀態、接收/發送數據的特征、數據傳輸率的大小,以及作為運行的中斷標志等,其格式如下:
① 串行口控制寄存器SCON。SCON的字節地址是98H,位地址(由低位到高位)分別是98H一9FH。SCON的格式如下:
SM0、SMl:串行口工作方式控制位。
00——方式0;01——方式1;
10——方式2;11——方式3。
SM2:僅用于方式2和方式3的多機通信控制位。
發送機SM2=1(要求程控設置)。
當為方式2或方式3時:
接收機 SM2=1時,若RB8=1,可引起串行接收中斷;若RB8=0,不引起串行接收中斷。SM2=0時,若RB8 =1,可引起串行接收中斷;若RB8=0,亦可引起串行接收中斷。
REN串行接收允許位:0——禁止接收;1——允許接收。
TB8:在方式2、3中,TB8是發送機要發送的第9位數據。
RB8:在方式2、3中,RB8是接收機接收到的第9位數據,該數據正好來自發送機的TB8。
TI:發送中斷標志位。發送前必須用軟件清零,發送過程中TI保持零電平,發送完一幀數據后,由硬件自動置1。如要再發送,必須用軟件再清零。
RI:接收中斷標志位。接收前,必須用軟件清零,接收過程中RI保持零電平,接收完一幀數據后,由片內硬件自動置1。如要再接收,必須用軟件再清零。
② 電源控制寄存器PCON。PCON的字節地址為87H,無位地址,其格式如下:
PCON是為在CMOS結構的MCS-51單片機上實現電源控制而附加的,對于HMOS結構的MCS-51系列單片機,除了第7位外,其余都是虛設的。與串行通信有關的也就是第7位,稱作SMOD,它的用處是使數據傳輸率加倍。
SMOD:數據傳輸率加倍位。在計算串行方式1,2,3的數據傳輸率時;0表示不加倍;1表示加倍。
其余有效位說明如下。
GF1、GF2:通用標志位。
PD:掉電控制位,0表示正常方式,1表示掉電方式。
IDL:空閑控制位,0表示正常方式,1表示空閑方式。
除了以上兩個控制寄存器外,中斷允許寄存器IE中的ES位也用來作為串行I/O中斷允許位。當ES=1,允許串行I/O中斷;當ES=0,禁止串行I/O中斷。中斷優先級寄存器IP的PS位則用作串行I/O中斷優先級控制位。當PS=1,設定為高優先級;當PS =0,設定為低優先級。
工作方式
MCS-51 單片機可以通過軟件設置串行口控制寄存器SCON中SM0(SCON.7)和SMl(SCON.6)來指定串行口的4種工作方式。串行口操作模式選擇如表5-2所示。
表5-2 串行口操作模式選擇表
SM0 SM1
|
模 式
|
功 能
|
波 特 率
|
0 0
|
0
|
同步移位寄存器
|
fOSC/12
|
0 1
|
1
|
8位UART
|
可變(T1溢出率)
|
1 0
|
0
|
9位UART
|
fOSC/64或fOSC/32
|
1 1
|
1
|
9位UART
|
可變(T1溢出率)
|
其中,fosc是振蕩器的頻率,UART為通用異步接收和發送器的英文縮寫。下面對這4種工作模式作進一步介紹。
1.方式0
當設定SM1、SM0為00時,串行口工作于方式0,它又叫同步移位寄存器輸出方式。在方式0下,數據從 RXD(P3.0)端串行輸出或輸入,同步信號從TXD(P3.1)端輸出,發送或接收的數據為8位,低位在前,高位在后,沒有起始位和停止位。數據傳輸率固定為振蕩器的頻率1/12,也就是每一機器周期傳送一位數據。方式0可以外接移位寄存器,將串行口擴展為并行口,也可以外接同步輸入/輸出設備。
執行任何一條以SBUF為目的的寄存器指令,就開始發送。
2.方式1
當設定SM1、SM0為01時,串行口工作于方式1。方式1為數據傳輸率可變的8位異步通信方式,由TXD發送,RXD接收,一幀數據為10位,1位起始位(低電平),8位數據位(低位在前)和1位停止位(高電平)。數據傳輸率取決于定時器1或2的溢出速率(1/溢出周期)和數據傳輸率是否加倍的選擇位SMOD。
對于有定時器/計數器2的單片機,當T2CON寄存器中RCLK和TCLK置位時,用定時器2作為接收和發送的數據傳輸率發生器,而RCLK=TCLK=0時,用定時器1作為接收和發送的數據傳輸率發生器。兩者還可以交叉使用,即發送和接收采用不同的數據傳輸率。
類似于模式0,發送過程是由執行任何一條以SBUF為目的的寄存器指令引起的。
3.方式2
當設定SM0、SM1二位為10時,串行口工作于方式2,此時串行口被定義為9位異步通信接口。采用這種方式可接收或發送 11 位數據,以 11 位為一幀,比方式 1 增加了一個數據位,其余相同。第 9 個數據即 D8 位用作奇偶校驗或地址/數據選擇,可以通過軟件來控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 單片機串行口適用于多機通信。發送時,第9位數據為TB8,接收時,第9位數據送入RB8。方式 2 的數據傳輸率固定,只有兩種選擇,為振蕩率的 1/64 或 1/32 ,可由 PCON 的最高位選擇。
4.方式3
當設定SM0、SM1二位為11時,串行口工作于方式3。方式3與方式2類似,唯一的區別是方式3的數據傳輸率是可變的。而幀格式與方式2一樣為11位一幀。所以方式3也適合于多機通信。
數據傳輸率的確定
串行口每秒鐘發送(或接收)的位數就是數據傳輸率。
對方式0來說,數據傳輸率已固定成fosc/12,隨著外部晶振的頻率不同,數據傳輸率亦不相同。常用的fosc有12MHz和6MHz,所以數據傳輸率相應為1000×103和500×103bit/s。在此方式下,數據將自動地按固定的數據傳輸率發送/接收,完全不用設置。
對方式2而言,數據傳輸率的計算式為2SMOD·fosc/64。當SMOD=0時,數據傳輸率為fm/64;當SMOD=1時,數據傳輸率為fosc/32。在此方式下,程控設置SMOD位的狀態后,數據傳輸率就確定了,不需要再作其他設置。
對方式1和方式3來說,數據傳輸率和定時器1的溢出率有關,定時器1的溢出率為:
定時器1的溢出率=定時器1的溢出次數/秒
方式1和方式3的數據傳輸率計算式為:
2SMOD/32×T1溢出率
根據SMOD狀態位的不同,數據傳輸率有Tl/32溢出率和T1/16溢出率兩種。由于T1溢出率的設置是方便的,因而數據傳輸率的選擇將十分靈活。
前已敘及,定時器Tl有4種工作方式,為了得到其溢出率,而又不必進入中斷服務程序,往往使T1設置在工作方式2的運行狀態,也就是8位自動加入時間常數的方式。
表5-3所示常用數據傳輸率的設置方法。
表5-3 常用數據傳輸率設置方法
數據傳輸率/Hz
|
fOSC/MHz
|
SMOD
|
定時器1
|
C/T
|
方 式
|
重新裝入值
|
方式0最大:1M
方式2最大:375k
方式1、3:62.5k
19.2k
9.6k
4.8k
2.4k
1.2k
110
|
12
12
12
11.0592
11.0592
11.0592
11.0592
11.0592
12
|
X
1
1
1
0
0
0
0
0
|
X
X
0
0
0
0
0
0
0
|
X
X
2
2
2
2
2
2
1
|
X
X
FFH
FDH
FDH
FAH
F4H
E8H
0FEEH
|