8051單片機的串行接口結(jié)構(gòu)及工作方式設置寄存器
8051單片機的串行接口結(jié)構(gòu)
8051單片機串行接口是一個可編程的全雙工串行通信接口。它可用作異步通信方式(UART),與串行傳送信息的外部設備相連接,或用于通過標準異步通信協(xié)議進行全雙工的8051多機系統(tǒng)也能通過同步方式,使用TTL或CMOS移位寄存器來擴充I/O口。
8051單片機通過管腳RXD(P3.0,串行數(shù)據(jù)接收端)和管腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界通信。SBUF是串行口緩沖寄存器,包括發(fā)送寄存器和接收寄存器。它們有相同名字和地址空間,但不會出現(xiàn)沖突,因為它們兩個一個只能被CPU讀出數(shù)據(jù),一個只能被CPU寫入數(shù)據(jù)。
串行口的控制與狀態(tài)寄存器
串行口控制寄存器SCON
它用于定義串行口的工作方式及實施接收和發(fā)送控制。字節(jié)地址為98H,其各位定義如下表:
D7
D6
D5
D4
D3
D2
D1
D0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM0、SM1:串行口工作方式選擇位,其定義如下:
SM0、SM1
工作方式
功能描述
波特率
0 0
方式0
8位移位寄存器
Fosc/12
0 1
方式1
10位UART
可變
1 0
方式2
11位UART
Fosc/64或fosc/32
1 1
方式3
11位UART
可變
其中fosc為晶體震蕩器頻率
SM2:多機通信控制位。在方式0時,SM2一定要等于0。在方式1中,當(SM2)=1則只有接收到有效停止位時,RI才置1。在方式2或方式3當(SM2)=1且接收到的第九位數(shù)據(jù)RB8=0時,RI才置1。
REN:接收允許控制位。由軟件置位以允許接收,又由軟件清0來禁止接收。
TB8: 是要發(fā)送數(shù)據(jù)的第9位。在方式2或方式3中,要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置1或清0。例如,可約定作為奇偶校驗位,或在多機通信中作為區(qū)別地址幀或數(shù)據(jù)幀的標志位。
RB8:接收到的數(shù)據(jù)的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8為接收到的停止位。在方式2或方式3中,RB8為接收到的第9位數(shù)據(jù)。
TI:發(fā)送中斷標志。在方式0中,第8位發(fā)送結(jié)束時,由硬件置位。在其它方式的發(fā)送停止位前,由硬件置位。TI置位既表示一幀信息發(fā)送結(jié)束,同時也是申請中斷,可根據(jù)需要,用軟件查詢的辦法獲得數(shù)據(jù)已發(fā)送完畢的信息,或用中斷的方式來發(fā)送下一個數(shù)據(jù)。TI必須用軟件清0。
RI:接收中斷標志位。在方式0,當接收完第8位數(shù)據(jù)后,由硬件置位。在其它方式中,在接收到停止位的中間時刻由硬件置位(例外情況見于SM2的說明)。RI置位表示一幀數(shù)據(jù)接收完畢,可用查詢的辦法獲知或者用中斷的辦法獲知。RI也必須用軟件清0。
特殊功能寄存器PCON
PCON是為了在CHMOS的80C51單片機上實現(xiàn)電源控制而附加的。其中最高位是SMOD。
串行口的工作方式
8051單片機的全雙工串行口可編程為4種工作方式,現(xiàn)分述如下:
方式0為移位寄存器輸入/輸出方式。可外接移位寄存器以擴展I/O口,也能外接同步輸入/輸出設備。8位串行數(shù)據(jù)者是從RXD輸入或輸出,TXD用來輸出同步脈沖。
輸出 串行數(shù)據(jù)從RXD管腳輸出,TXD管腳輸出移位脈沖。CPU將數(shù)據(jù)寫入發(fā)送寄存器時,立即啟動發(fā)送,將8位數(shù)據(jù)以fos/12的固定波特率從RXD輸出,低位在前,高位在后。發(fā)送完一幀數(shù)據(jù)后,發(fā)送中斷標志TI由硬件置位。
輸入 當串行口以方式0接收時,先置位允許接收控制位REN。此時,RXD為串行數(shù)據(jù)輸入端,TXD仍為同步脈沖移位輸出端。當(RI)=0和(REN)=1同時滿足時,開始接收。當接收到第8位數(shù)據(jù)時,將數(shù)據(jù)移入接收寄存器,并由硬件置位RI。
下面兩圖分別是方式0擴展輸出和輸入的接線圖。
<單片機串行口接線圖>
方式1為波特率可變的10位異步通信接口方式。發(fā)送或接收一幀信息,包括1個起始位0,8個數(shù)據(jù)位和1個停止位1。
輸出 當CPU執(zhí)行一條指令將數(shù)據(jù)寫入發(fā)送緩沖SBUF時,就啟動發(fā)送。串行數(shù)據(jù)從TXD管腳輸出,發(fā)送完一幀數(shù)據(jù)后,就由硬件置位TI。
輸入 在(REN)=1時,串行口采樣RXD管腳,當采樣到1至0的跳變時,確認是開始位0,就開始接收一幀數(shù)據(jù)。只有當(RI)=0且停止位為1或者(SM2)=0時,停止位才進入RB8,8位數(shù)據(jù)才能進入接收寄存器,并由硬件置位中斷標志RI;不然信息丟失。所以在方式1接收時,應先用軟件清零RI和SM2標志。
方式2
方式月為固定波特率的11位UART方式。它比方式1增加了一位可程控為1或0的第9位數(shù)據(jù)。
輸出: 發(fā)送的串行數(shù)據(jù)由TXD端輸出一幀信息為11位,附加的第9位來自SCON寄存器的TB8位,用軟件置位或復位。它可作為多機通信中地址/數(shù)據(jù)信息的標志位,也能作為數(shù)據(jù)的奇偶校驗位。當CPU執(zhí)行一條數(shù)據(jù)寫入SUBF的指令時,就啟動發(fā)送器發(fā)送。發(fā)送一幀信息后,置位中斷標志TI。
輸入: 在(REN)=1時,串行口采樣RXD管腳,當采樣到1至0的跳變時,確認是開始位0,就開始接收一幀數(shù)據(jù)。在接收到附加的第9位數(shù)據(jù)后,當(RI)=0或者(SM2)=0時,第9位數(shù)據(jù)才進入RB8,8位數(shù)據(jù)才能進入接收寄存器,并由硬件置位中斷標志RI;不然信息丟失。且不置位RI。再過一位時間后,不管上述條件時否滿足,接收電路即行復位,并重新檢測RXD上從1到0的跳變。
工作方式3
方式3為波特率可變的11位UART方式。除波特率外,其余與方式2相同。
波特率選擇
如前所述,在串行通信中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在8051串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時器T1的溢出率控制。
方式0
方式0的波特率固定為主振頻率的1/12。
方式2
方式2的波特率由PCON中的選擇位SMOD來決定,可由下式表示:
波特率=2的SMOD次方除以64再乘一個fosc,也就是當SMOD=1時,波特率為1/32fosc,當SMOD=0時,波特率為1/64fosc
3.方式1和方式3
定時器T1作為波特率發(fā)生器,其公式如下:
波特率=定時器T1溢出率
T1溢出率= T1計數(shù)率/產(chǎn)生溢出所需的周期數(shù)
式中T1計數(shù)率取決于它工作在定時器狀態(tài)還是計數(shù)器狀態(tài)。當工作于定時器狀態(tài)時,T1計數(shù)率為fosc/12;當工作于計數(shù)器狀態(tài)時,T1計數(shù)率為外部輸入頻率,此頻率應小于fosc/24。產(chǎn)生溢出所需周期與定時器T1的工作方式、T1的預置值有關。
定時器T1工作于方式0:溢出所需周期數(shù)=8192-x
定時器T1工作于方式1:溢出所需周期數(shù)=65536-x
定時器T1工作于方式2:溢出所需周期數(shù)=256-x
因為方式2為自動重裝入初值的8位定時器/計數(shù)器模式,所以用它來做波特率發(fā)生器最恰當。
當時鐘頻率選用11.0592MHZ時,取易獲得標準的波特率,所以很多單片機系統(tǒng)選用這個看起來“怪”的晶體震蕩器就是這個道理。
下表列出了定時器T1工作于方式2常用波特率及初值。
常用波特率
Fosc(MHZ)
SMOD
TH1初值
19200
11.0592
1
FDH
9600
11.0592
0
FDH
4800
11.0592
0
FAH
2400
11.0592
0
F4h
1200
11.0592
0
E8h