MCS-51 單片機(jī)串口的基本結(jié)構(gòu)是什么?如何工作?
MCS-51單片機(jī)串口的基本結(jié)構(gòu)
MCS-51單片機(jī)內(nèi)部有一個(gè)全雙工的異步串行通信接口,其結(jié)構(gòu)如圖4-18所示。串口工作時(shí),單片機(jī)P3口的P3.0引腳和P3.1引腳處于第二功能,分別是串口的數(shù)據(jù)接收端RXD和發(fā)送端TXD。
圖4-18 MCS-51單片機(jī)串口內(nèi)部結(jié)構(gòu)示意圖
串口控制寄存器SCON決定了串口的工作方式,而串口的波特率與定時(shí)/計(jì)數(shù)器1的溢出率直接相關(guān)。另外,串口發(fā)送數(shù)據(jù)和接收數(shù)據(jù)都可以產(chǎn)生串口中斷請(qǐng)求。
發(fā)送緩沖區(qū)只能寫入不能讀出。發(fā)送數(shù)據(jù)時(shí),在發(fā)送控制器的控制下,發(fā)送緩沖區(qū)中的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),并被插入格式信息以形成完整的字符數(shù)據(jù)幀,最后由TXD引腳發(fā)送出去。接收緩沖區(qū)只能讀出不能寫入。接收數(shù)據(jù)時(shí),由RXD引腳接收字符數(shù)據(jù)幀。在接收控制器的控制下,字符數(shù)據(jù)幀中的格式信息被濾除,然后數(shù)據(jù)被移位寄存器轉(zhuǎn)換成并行數(shù)據(jù)并存入接收緩沖區(qū)。可見,MCS-51單片機(jī)的串口是全雙工的串口,可以同時(shí)進(jìn)行數(shù)據(jù)發(fā)送和接收。
串口的工作方式
MCS-51單片機(jī)的串口有4種工作方式,其中方式0主要用于并行I/O接口的擴(kuò)展,其他方式用于數(shù)據(jù)傳輸。
1.串口工作方式0
在方式0時(shí),串口是8位同步移位寄存器,既可以移位輸入也可以移位輸出,并不是真正的數(shù)據(jù)通信方式,主要用于擴(kuò)展外部并行I/O接口。如該方式的時(shí)序(見圖4-19)所示,TXD是移位脈沖的輸出引腳,RXD是數(shù)據(jù)移位輸入或輸出的引腳。另外,方式0的字符數(shù)據(jù)幀中只有8個(gè)數(shù)據(jù)位,沒有格式信息。
圖4-19串口工作方式0時(shí)序
a)發(fā)送(輸出)時(shí)序b)接收(輸入)時(shí)序
(1)數(shù)據(jù)的發(fā)送
發(fā)送數(shù)據(jù)前,首先將TI清0,然后只要向SBUF中寫入數(shù)據(jù),就會(huì)啟動(dòng)串口的發(fā)送,如指令“MOV SBUF,A”。之后,引腳TXD和RXD分別出現(xiàn)移位脈沖和數(shù)據(jù)位。當(dāng)所有數(shù)據(jù)位發(fā)送完畢后,串口發(fā)送中斷請(qǐng)求標(biāo)志位TI被單片機(jī)硬件置1,以表明一次數(shù)據(jù)發(fā)送過程結(jié)束。單片機(jī)硬件在任何時(shí)候都不會(huì)自動(dòng)將TI清0。再次發(fā)送數(shù)據(jù)前,必須用軟件指令將TI清0,如執(zhí)行指令“CLR TI”。
(2)數(shù)據(jù)的接收
接收數(shù)據(jù)前,必須令REN=1且RI=0,以啟動(dòng)串口的接收過程。之后,TXD引腳出現(xiàn)移位脈沖,串口等待RXD引腳上出現(xiàn)的數(shù)據(jù)位,并將其送入移位寄存器。當(dāng)接收完一個(gè)完整數(shù)據(jù)幀后,硬件將移位寄存器中的數(shù)據(jù)送入接收緩沖區(qū)SBUF,并將接收中斷請(qǐng)求標(biāo)志位RI置1,以表明數(shù)據(jù)接收完畢。再次接收數(shù)據(jù)前,需將SBUF中的數(shù)據(jù)取走,并將RI清0。取SBUF中的數(shù)據(jù)可以用指令“MOV A,SBUF”,該指令將接收緩沖區(qū)的數(shù)據(jù)送入累加器A。只能用軟件指令將RI清0,如指令“CLR RI”,因?yàn)閱纹瑱C(jī)硬件不會(huì)自動(dòng)將RI清0。
2.串口工作方式1
在方式1時(shí),串口可接收和發(fā)送8位數(shù)據(jù),其時(shí)序如圖4-21所示。1個(gè)字符幀中有10個(gè)二進(jìn)制位,包括8個(gè)數(shù)據(jù)位、1個(gè)起始位和1個(gè)停止位。TXD和RXD分別是發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的引腳。
圖4-21串口工作方式1時(shí)序
a)發(fā)送(輸出)時(shí)序b)接收(輸入)時(shí)序
(1)數(shù)據(jù)的發(fā)送
與方式0相似,發(fā)送數(shù)據(jù)前,首先將TI清0,然后只要向SBUF中寫入數(shù)據(jù),就會(huì)啟動(dòng)串口的發(fā)送過程。被發(fā)送的數(shù)據(jù)從TXD向外輸出,低位在前高位在后。一幀數(shù)據(jù)發(fā)送完畢后,TI被單片機(jī)硬件置1。再次發(fā)送數(shù)據(jù)前,必須用軟件指令將TI清0。
(2)數(shù)據(jù)的接收
接收數(shù)據(jù)前,令REN=1且RI=0,以啟動(dòng)串口接收過程。通過RXD接收字符數(shù)據(jù)幀,接收順序?yàn)橄鹊臀辉俑呶弧?shí)際上,數(shù)據(jù)的接收是通過采樣實(shí)現(xiàn)的,每個(gè)數(shù)據(jù)位上RXD被采樣3次,其中兩次相同的采樣值作為采樣結(jié)果送入接收端的移位寄存器。一個(gè)完整字符幀接收完畢后,RI被置1,并且接收的8個(gè)數(shù)據(jù)位被送入接收緩沖區(qū),而停止位“1”被送入接收方SCON的RB8中。若再次接收數(shù)據(jù),則必須提前將RI清0。
3.串口工作方式2和方式3
串口工作方式2和方式3屬于多機(jī)通信方式(多機(jī)通信的具體實(shí)現(xiàn)方法見前文關(guān)于SM2的描述),主機(jī)與從機(jī)的連接關(guān)系如圖4-23所示,其時(shí)序如圖4-24所示。方式2和方式3的唯一差別是波特率計(jì)算公式不同,見表4-14。
圖4-23多機(jī)通信中主機(jī)與從機(jī)的連接
(1)數(shù)據(jù)的發(fā)送
方式2和方式3的字符幀包含11個(gè)二進(jìn)制位,與方式1相比,在停止位前多了TB8位,該TB8位來自于發(fā)送方SCON寄存器中的TB8位。發(fā)送方的TB8位最終將被送入接收方SCON寄存器的RB8位中。
圖4-24串口工作方式2和方式3時(shí)序
a)發(fā)送(輸出)時(shí)序b)接收(輸入)時(shí)序
與其他工作方式的發(fā)送過程相同,發(fā)送前需將TI清0,然后向SBUF中寫入數(shù)據(jù)以啟動(dòng)發(fā)送。數(shù)據(jù)由TXD向外發(fā)送,數(shù)據(jù)發(fā)送完畢后,TI被硬件置1。再次發(fā)送數(shù)據(jù)前,必須用指令將TI再次清0。
(2)數(shù)據(jù)的接收
串口接收數(shù)據(jù)前,需令REN=1且RI=0。數(shù)據(jù)由RXD引腳接收。在字符數(shù)據(jù)幀中,停止位和D7之間的位來自發(fā)送方的TB8,并被送入接收方SCON寄存器的RB8位中。因此在圖4-24所示接收時(shí)序中,停止位和D7之間的位用RB8表示。一個(gè)字符數(shù)據(jù)幀接收完畢后,RI不一定被硬件置1。見表4-16,RI被硬件置1的情況有兩種,分別是:①SM0=0;
②SM0=1并且RB8=1。再次接收數(shù)據(jù)前,必須將RI清0,并令REN=1。