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