本文主要學習at89s52單片機的串行接口結(jié)構(gòu)以及相關(guān)的寄存器。要求在掌握串行口結(jié)構(gòu)的基礎(chǔ)上,學會合理的設(shè)置控制寄存器來控制串行口的工作。at89s52單片機內(nèi)部的串行接口能同時發(fā)送和接收數(shù)據(jù)。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入。串行口還有接收緩沖作用,即從接收寄存器中讀出前一個已收到的字節(jié)之前就能開始接收第二字節(jié)。
一、at89s52單片機串行口的結(jié)構(gòu)
at89s52單片機的串行接口主要由兩個物理上獨立的串行數(shù)據(jù)緩沖器sbuf、發(fā)送控制器、接收控制器、輸入移位寄存器和輸出控制門組成。
對外表現(xiàn)為兩個引腳:rxd(p3.0)串行輸入線和txd(p3.1)串行輸出線,串行口的結(jié)構(gòu)如圖1所示。
圖1 串行口的結(jié)構(gòu)
1.波特率發(fā)生器
主要由t1、t2及內(nèi)部的一些控制開關(guān)和分頻器所組成。它提供串行口的時鐘信號txclock(發(fā)送時鐘)和rxclock(接收時鐘)。相應(yīng)的控制波特率發(fā)生器的特殊功能寄存器有tmod、tcon、t2con、pcon、tl1、th1、tl2、th2等。
2.串行數(shù)據(jù)緩沖寄存器sbuf
串行口數(shù)據(jù)緩沖器(實際上是兩個寄存器)通過特殊功能寄存器sbuf來訪問。兩個緩沖器在物理上是隔離的,共用一個地址99h(特殊功能寄存器sbuf的地址)。
寫入sbuf的數(shù)據(jù)儲存在發(fā)送緩沖器,用于串行發(fā)送;從sbuf讀出的數(shù)據(jù)來自接收緩沖器。串行發(fā)送時,從片內(nèi)總線向發(fā)送緩沖器sbuf寫入數(shù)據(jù);串行接收時,從接收緩沖器sbuf中讀出數(shù)據(jù)。因此可通過兩條指令來表示:
movsbuf,a ;啟動一次數(shù)據(jù)發(fā)送,可向sbuf再發(fā)送下一個數(shù)據(jù)
mova,sbuf ;完成一次數(shù)據(jù)接收,sbuf可再接收下一個數(shù)據(jù)
3.串行數(shù)據(jù)輸入/輸出引腳
接收方式:串行數(shù)據(jù)從rxd(p3.0)引腳輸入
發(fā)送方式下:串行數(shù)據(jù)通過txd(p3.1)引腳輸出。
4.串行口控制邏輯
發(fā)送控制器在波特率作用下,將發(fā)送sbuf中的數(shù)據(jù)由并行轉(zhuǎn)換成串行,逐位地傳輸?shù)桨l(fā)送端口;同理接收控制器將接收端口的數(shù)據(jù)由串行轉(zhuǎn)換成并行,存入接收sbuf。如圖2。
圖2 串行口的控制邏輯
二、串行口控制寄存器scon
特殊功能寄存器scon可以位尋址,用于定義串行口的操作方式和控制它的某些功能,字節(jié)地址為98h。其各位的定義如圖3所示。
圖3 scon
sm0,sm1(d7,d6):串行口操作方式選擇位
sm2(d5):串行口多機通信控制位。
sm2=1:如果接收的一幀數(shù)據(jù)的第九位為1,且原ri=0,則硬件置ri=1,接收數(shù)據(jù)有效;如果第九位為0,則ri不置1,接收數(shù)據(jù)無效。
sm2=0:只要接收完一幀數(shù)據(jù),不管第九位為1還是0,硬件都置ri=1,接收數(shù)據(jù)有效。多機通信時,sm2必須置1;雙機通信,sm2通常置0。
ren(d4):串行口接收允許控制位。ren=1表示允許接收;ren=0禁止接收。
tb8(d3):方式2和方式3中要發(fā)送的第9位數(shù)據(jù)。
rb8(d2):是方式2和3中已接收到的第9位數(shù)據(jù)。
ti(d1):發(fā)送中斷標志。由軟件清0。
ri(d0):接收中斷標志。由軟件清0。
三、電源控制寄存器pcon
電源控制寄存器pcon中,僅有最高位smod與串行口控制有關(guān),pcon的地址為87h,只能字節(jié)尋址。
smod(d7):波特率加倍控制位。
smod=1,波特率加倍;
smod=0,則不加倍。