AT89S51單片機(jī)串行口的內(nèi)部結(jié)構(gòu)如下圖所示。它有兩個物理上獨立的接收、發(fā)送緩沖器SBUF(屬于特殊功能寄存器),可同時發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,兩個緩沖器共用一個特殊功能寄存器字節(jié)地址(99H)。
串行口的控制寄存器共有兩個:特殊功能寄存器SCON和PCON。下面介紹這兩個特殊功能寄存器各位的功能。
1、串行口控制寄存器SCON
串行口控制寄存器SCON,字節(jié)地址988H,可位尋址,位地址為98H~9FH。SCON的格式如下圖所示。
下面介紹SCON中各位的功能。
(1) SM0、SMl:串行口4種工作方式選擇位。
SM0、SM1兩位的編碼所對應(yīng)的4種工作方式見下表。
表 串行口的4種工作方式
(2) SM2:多機(jī)通信控制位。
因為多機(jī)通信是在方式2和方式3下進(jìn)行的,因此SM2位主要用于方式2或方式3中。當(dāng)串行口以方式2或方式3接收時,如果SM2=1,則只有當(dāng)接收到的第9位數(shù)據(jù)(RB8)為1時,才使RI置l,產(chǎn)生中斷請求,并將接收到的前8位數(shù)據(jù)送人SBUF;當(dāng)接收到的第9位數(shù)據(jù)(RB8)為0時,則將接收到的前8位數(shù)據(jù)丟棄。而當(dāng)SM2=0時,則不論第9位數(shù)據(jù)是l還是0,都將前8位數(shù)據(jù)送入SBUF中,并使RI置1,產(chǎn)生中斷請求。
在方式1時,如果SM2=1,則只有收到有效的停止位時才會激活RI。
在方式0時,SM2必須為0。
(3)REN:允許串行接收位。
由軟件置1或清0。
REN=1,允許串行口接收數(shù)據(jù)。
REN=O,禁止串行口接收數(shù)據(jù)。
(4)TB8:發(fā)送的第9位數(shù)據(jù)。
在方式2和方式3時,TB8是要發(fā)送的第9位數(shù)據(jù),其值由軟件置l或清O。在雙機(jī)串行通信時,TB8一般作為奇偶校驗位使用;在多機(jī)串行通信中用來表示主機(jī)發(fā)送的是地址幀還是數(shù)據(jù)幀,TB8=1為地址幀,TB8=0為數(shù)據(jù)幀。
(5) RB8:接收的第9位數(shù)據(jù)。
工作在方式2和方式3時,RB8存放接收到的第9位數(shù)據(jù)。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。
(6)TI:發(fā)送中斷標(biāo)志位。
串行口工作在方式0時,串行發(fā)送的第8位數(shù)據(jù)結(jié)束時TI由硬件置1,在其他工作方式中,串行口發(fā)送停止位的開始時置TI為1。TI=1,表示一幀數(shù)據(jù)發(fā)送結(jié)束。TI位的狀態(tài)可供軟件查詢,也可申請中斷。CPU響應(yīng)中斷后,在中斷服務(wù)程序中向SBUF寫入要發(fā)送的下一幀數(shù)據(jù)。TI必須由軟件清0。
(7) RI:接收中斷標(biāo)志位。
串行口工作在方式0時,接收完第8位數(shù)據(jù)時,RI由硬件置1。在其他工作方式中,串行接收到停止位時,該位置l。RI=1,表示一幀數(shù)據(jù)接收完畢,并申請中斷,要求CPU從接收SBUF取走數(shù)據(jù)。該位的狀態(tài)也可供軟件查詢。RI必須由軟件清0。
SCON的所有位都可進(jìn)行位操作清0或置1。
2、特殊功能寄存器PCON
特殊功能寄存器PCON字節(jié)地址為87H,不能位尋址。PCON的格式如下圖所示。
下面介紹PCON中各個位的功能。其中,僅僅是最高位SMOD與串行口有關(guān)。
SMOD位:波特率選擇位。
例如,方式1的波特率計算公式為
當(dāng)SMOD=1時,要比SMOD=O時的波特率加倍,所以也稱SMOD位為波特率倍增位。