51单片机——串行通信
目錄
1 概述
1.1?并行通信和串行通信
1.2 串行通信的兩種方式
1.2.1 異步通信
1.2.2 同步通信
1.3?串行通信的數(shù)據(jù)傳送方向
2?串行通信口的結(jié)構(gòu)與原理
2.1 串行通信口的結(jié)構(gòu)
2.2 串行通信口的工作原理
2.2.1 接收數(shù)據(jù)過程
?2.2.2 發(fā)送數(shù)據(jù)過程
3 串行通信口的控制寄存器
3.1 串行控制寄存器(SCON)
3.2 電源控制寄存器(PCON)
4 四種工作方式與波特率的設(shè)置
4.1 方式0
4.1.1 方式0-發(fā)送數(shù)據(jù)
4.1.2 方式0-接收數(shù)據(jù)
4.2 方式1
4.2.1 方式1-發(fā)送數(shù)據(jù)
4.2.2 方式1-接收數(shù)據(jù)
4.3 方式2
4.3.1 方式2-發(fā)送數(shù)據(jù)
4.3.2 方式2-接收數(shù)據(jù)
4.4 方式3
4.5 波特率的設(shè)置
4.5.1?方式0的波特率
4.5.2 方式2的波特率
4.5.3 方式1和方式3的波特率
1 概述
????????通信的概念比較廣泛,在單片機(jī)技術(shù)中,單片機(jī)與單片機(jī)或單片機(jī)與其他設(shè)備之間的數(shù)據(jù)傳輸稱為通信。
1.1?并行通信和串行通信
????????根據(jù)數(shù)據(jù)傳輸方式的不同,可將通信分并行通信和串行通信兩種。同時(shí)傳輸多位數(shù)據(jù)的方式稱為并行通信。同時(shí)傳輸一位數(shù)據(jù)的方式稱為串行通信。
????????如圖1(a)所示,在并行通信方式下,單片機(jī)中的8位數(shù)據(jù)10011101通過8條數(shù)據(jù)線同時(shí)送到外部設(shè)備中。并行通信的特點(diǎn)是數(shù)據(jù)傳輸速度快,但由于需要的傳輸線多,故成本高,只適合近距離的數(shù)據(jù)通信。逐位傳輸數(shù)據(jù)的方式稱為串行通信。
????????如圖1(b)所示,在串行通信方式下,單片機(jī)中的8位數(shù)據(jù)10011101通過一條數(shù)據(jù)線逐位傳送到外部設(shè)備中。串行通信的特點(diǎn)是數(shù)據(jù)傳輸速度慢,但由于只需要一條傳輸線,故成本低,適合遠(yuǎn)距離的數(shù)據(jù)通信。
圖1 通信方式?
1.2 串行通信的兩種方式
????????串行通信又可分為異步通信和同步通信兩種。51系列單片機(jī)采用異步通信方式。
1.2.1 異步通信
????????在異步通信中,數(shù)據(jù)是一幀一幀傳送的。異步通信如圖2 所示,這種通信是以幀為單位進(jìn)行數(shù)據(jù)傳輸,一幀數(shù)據(jù)傳送完成后,可以接著傳送下一幀數(shù)據(jù),也可以等待,等待期間為空閑位(高電平)。
圖2 異步通信
????????(1)幀數(shù)據(jù)格式
????????在串行異步通信時(shí),數(shù)據(jù)是以幀為單位傳送的。異步通信的幀數(shù)據(jù)格式如圖3所示。從圖中可以看出,一幀數(shù)據(jù)由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位組成。?
?圖3 異步通信的幀數(shù)據(jù)格式
????????① 起始位。
????????表示一幀數(shù)據(jù)的開始,起始位一定為低電平。當(dāng)單片機(jī)要發(fā)送數(shù)據(jù)時(shí),先送一個(gè)低電平(起始位)到外部設(shè)備,外部設(shè)備接收到起始信號后,馬上開始接收數(shù)據(jù)。
????????② 數(shù)據(jù)位。
????????它是要傳送的數(shù)據(jù),緊跟在起始位后面。數(shù)據(jù)位的數(shù)據(jù)可以是5~8位,傳送數(shù)據(jù)時(shí)是從低位到高位逐位進(jìn)行的。
????????③ 奇偶校驗(yàn)位。
????????該位用于檢驗(yàn)傳送的數(shù)據(jù)有無錯(cuò)誤。奇偶校驗(yàn)是檢查數(shù)據(jù)傳送過程中是否發(fā)生錯(cuò)誤的一種校驗(yàn)方式,分為奇校驗(yàn)和偶校驗(yàn)。奇校驗(yàn)是指數(shù)據(jù)位和校驗(yàn)位中“1”的總個(gè)數(shù)為奇數(shù),偶校驗(yàn)是指數(shù)據(jù)位和校驗(yàn)位中“1”的總個(gè)數(shù)為偶數(shù)。以奇校驗(yàn)為例,若單片機(jī)傳送的數(shù)據(jù)位中有偶數(shù)個(gè)“1”,為保證數(shù)據(jù)和校驗(yàn)位中“1”的總個(gè)數(shù)為奇數(shù),奇偶校驗(yàn)位應(yīng)為“1”,如果在傳送過程中數(shù)據(jù)位中有數(shù)據(jù)產(chǎn)生錯(cuò)誤,其中一個(gè)“1”變?yōu)椤?”,那么傳送到外部設(shè)備的數(shù)據(jù)位和校驗(yàn)位中“1”的總個(gè)數(shù)為偶數(shù),外部設(shè)備就知道傳送過來的數(shù)據(jù)發(fā)生錯(cuò)誤,會要求重新傳送數(shù)據(jù)。數(shù)據(jù)傳送采用奇校驗(yàn)或偶校驗(yàn)均可,但要求發(fā)送端和接收端的校驗(yàn)方式一致。在幀數(shù)據(jù)中,奇偶校驗(yàn)位也可以不用。
????????④ 停止位。
????????它表示一幀數(shù)據(jù)的結(jié)束。停止位可以是1位、1.5位或2位,但一定為高電平。一幀數(shù)據(jù)傳送結(jié)束后,可以接著傳送第二幀數(shù)據(jù),也可以等待,等待期間數(shù)據(jù)線為高電平(空閑位)。如果要傳送下一幀,只要讓數(shù)據(jù)線由高電平變?yōu)榈碗娖?#xff08;下一幀起始位開始),接收器就開始接收下一幀數(shù)據(jù)。
????????(2)51系列單片機(jī)的幾種幀數(shù)據(jù)方式
????????51 系列單片機(jī)在串行通信時(shí),根據(jù)設(shè)置的不同,其傳送的幀數(shù)據(jù)有以下四種方式:
????????① 方式0。
????????稱為同步移位寄存器輸入/輸出方式,它是單片機(jī)通信中較特殊的一種方式,通常用于并行I/O接口的擴(kuò)展,這種方式中的一幀數(shù)據(jù)只有8位(無起始位、停止位)。
????????② 方式1。
????????在這種方式中,一幀數(shù)據(jù)中有1位起始位、8位數(shù)據(jù)位和1位停止位,共10位。
????????③ 方式2。
????????在這種方式中,一幀數(shù)據(jù)中有1位起始位、8位數(shù)據(jù)位、1位可編程位和1位停止位,共11位。
????????④ 方式3。
????????這種方式與方式2相同,一幀數(shù)據(jù)中有1位起始位、8位數(shù)據(jù)位、1位可編程位和1位停止位,它與方式2的區(qū)別僅在于波特率(數(shù)據(jù)傳送速率)設(shè)置不同。
1.2.2 同步通信
????????在異步通信中,每一幀數(shù)據(jù)發(fā)送前要用起始位,結(jié)束時(shí)要用停止位,這樣會占用一定的時(shí)間,導(dǎo)致數(shù)據(jù)傳輸速度較慢。為了提高數(shù)據(jù)傳輸速度,在計(jì)算機(jī)與一些高速設(shè)備進(jìn)行數(shù)據(jù)通信時(shí),常采用同步通信。同步通信的幀數(shù)據(jù)格式如圖4所示。
?圖4 同步通信的幀數(shù)據(jù)格式
????????從圖中可以看出,同步通信的數(shù)據(jù)后面取消了停止位,前面的起始位用同步信號代替,在同步信號后面可以跟很多數(shù)據(jù),所以同步通信傳輸速度快。但由于在通信時(shí)要求發(fā)送端和接收端嚴(yán)格保持同步,這需要用復(fù)雜的電路來保證,所以單片機(jī)很少采用這種通信方式。
1.3?串行通信的數(shù)據(jù)傳送方向
????????串行通信根據(jù)數(shù)據(jù)的傳送方向可分為三種方式:單工方式、半雙工方式和全雙工方式。這三種傳送方式如圖5所示。
圖5 數(shù)據(jù)傳送方式?
????????① 單工方式。在這種方式下,數(shù)據(jù)只能向一個(gè)方向傳送。單工方式如圖5(a)所示,數(shù)據(jù)只能由發(fā)送端傳輸給接收端。
????????② 半雙工方式。在這種方式下,數(shù)據(jù)可以雙向傳送,但同一時(shí)間內(nèi),只能向一個(gè)方向傳送,只有一個(gè)方向的數(shù)據(jù)傳送完成后,才能往另一個(gè)方向傳送數(shù)據(jù)。半雙工方式如圖5(b)所示,通信的雙方都有發(fā)送器和接收器,一方發(fā)送時(shí),另一方接收,由于只有一條數(shù)據(jù)線,所以雙方不能在發(fā)送的同時(shí)進(jìn)行接收。
????????③ 全雙工方式。在這種方式下,數(shù)據(jù)可以雙向傳送,通信的雙方都有發(fā)送器和接收器,由于有兩條數(shù)據(jù)線,所以雙方在發(fā)送數(shù)據(jù)的同時(shí)可以接收數(shù)據(jù)。全雙工方式如圖5(c)所示。
2?串行通信口的結(jié)構(gòu)與原理
????????單片機(jī)通過串行通信口可以與其他設(shè)備進(jìn)行數(shù)據(jù)通信,將數(shù)據(jù)傳送給外部設(shè)備或接受外部設(shè)備傳送來的數(shù)據(jù),從而實(shí)現(xiàn)更強(qiáng)大的功能。
2.1 串行通信口的結(jié)構(gòu)
????????51單片機(jī)的串行通信口的結(jié)構(gòu)如圖6所示。
?圖6 串行通信口的結(jié)構(gòu)
????????與串行通信口有關(guān)的部件主要有:
????????① 兩個(gè)數(shù)據(jù)緩沖器SBUF。
????????SBUF是可以直接尋址的特殊功能寄存器(SFR),它包括發(fā)送SBUF和接收SBUF,發(fā)送SBUF用來發(fā)送串行數(shù)據(jù),接收SBUF用來接收數(shù)據(jù),兩者共用一個(gè)地址(99H)。在發(fā)送數(shù)據(jù)時(shí),該地址指向發(fā)送SBUF;而在接收數(shù)據(jù)時(shí),該地址指向接收SBUF。
????????② 輸入移位寄存器。
????????在接收控制器的控制下,將輸入的數(shù)據(jù)逐位移入接收SBUF。
????????③ 串行控制寄存器 SCON。
????????SCON 的功能是控制串行通信口的工作方式,并反映串行通信口的工作狀態(tài)。
????????④ 定時(shí)器T1。
????????T1用作波特率發(fā)生器,用來產(chǎn)生接收和發(fā)送數(shù)據(jù)所需的移位脈沖,移位脈沖的頻率越高,接收和傳送數(shù)據(jù)的速率越快。
2.2 串行通信口的工作原理
????????串行通信口有接收數(shù)據(jù)和發(fā)送數(shù)據(jù)兩個(gè)工作過程,下面以圖6所示的串行通信口結(jié)構(gòu)為例來說明這兩個(gè)工作過程。
2.2.1 接收數(shù)據(jù)過程
????????在接收數(shù)據(jù)時(shí),若RXD端(與P3.2引腳共用)接收到一幀數(shù)據(jù)的起始信號(低電平),SCON寄存器馬上向接收控制器發(fā)出允許接收信號,接收控制器在定時(shí)器/計(jì)數(shù)器T1產(chǎn)生的移位脈沖信號控制下,控制輸入移位寄存器,將 RXD 端輸入的數(shù)據(jù)由低到高逐位移入輸入移位寄存器中,數(shù)據(jù)全部移入輸入移位寄存器后,移位寄存器再將全部數(shù)據(jù)送入接收 SBUF中,同時(shí)接收控制器通過或門向CPU發(fā)出中斷請求,CPU馬上響應(yīng)中斷,將接收SBUF中的數(shù)據(jù)全部取走,從而完成了一幀數(shù)據(jù)的接收。后面各幀的數(shù)據(jù)接收過程與上述相同。
?2.2.2 發(fā)送數(shù)據(jù)過程
????????相對于接收過程來說,串行通信口發(fā)送數(shù)據(jù)的過程較簡單。當(dāng)CPU要發(fā)送數(shù)據(jù)時(shí),只要將數(shù)據(jù)直接寫入發(fā)送SBUF中,就啟動(dòng)了發(fā)送過程。在發(fā)送控制器的控制下,發(fā)送門打開,先發(fā)送一位起始信號(低電平),然后依次由低到高逐位發(fā)送數(shù)據(jù),數(shù)據(jù)發(fā)送完畢,最后發(fā)送一位停止位(高電平),從而結(jié)束一幀數(shù)據(jù)的發(fā)送。一幀數(shù)據(jù)發(fā)送完成后,發(fā)送控制器通過或門向CPU發(fā)出中斷請求,CPU響應(yīng)中斷,將下一幀數(shù)據(jù)送入SBUF,開始發(fā)送下一幀數(shù)據(jù)。
3 串行通信口的控制寄存器
????????串行通信口的工作受串行控制寄存器SCON和電源控制寄存器PCON的控制。
3.1 串行控制寄存器(SCON)
????????SCON 寄存器用來控制串行通信的工作方式及反映串行通信口的一些工作狀態(tài)。SCON寄存器是一個(gè)8位寄存器,它的地址為98H,其中每位都可以位尋址。SCON寄存器各位的名稱和地址如下。
????????① SM0、SM1位:串行通信口工作方式設(shè)置位。
????????通過設(shè)置這兩位的值,可以讓串行通信口工作在四種不同的方式,具體見表1,這幾種工作方式在后面將會詳細(xì)介紹。
表1 串行通信口工作方式設(shè)置位及其功能
????????② SM2位:用來設(shè)置主-從式多機(jī)通信。
????????當(dāng)一個(gè)單片機(jī)(主機(jī))要與其他幾個(gè)單片機(jī)(從機(jī))通信時(shí),就要對這些位進(jìn)行設(shè)置。當(dāng)SM2=1時(shí),允許多機(jī)通信;當(dāng)SM2=0時(shí),不允許多機(jī)通信。
????????③ REN位:允許/禁止數(shù)據(jù)接收的控制位。
????????當(dāng)REN=1時(shí),允許串行通信口接收數(shù)據(jù);當(dāng)REN=0時(shí),禁止串行通信口接收數(shù)據(jù)。
????????④ TB8位:方式2、3中發(fā)送數(shù)據(jù)的第9位。
????????該位可以用軟件規(guī)定其作用,可用作奇偶校驗(yàn)位,或在多機(jī)通信時(shí),用作地址幀或數(shù)據(jù)幀的標(biāo)志位,在方式0和方式1中,該位不用。
????????⑤ RB8位:方式2、3中接收數(shù)據(jù)的第9位。
????????該位可以用軟件規(guī)定其作用,可用作奇偶校驗(yàn)位,或在多機(jī)通信時(shí),用作地址幀或數(shù)據(jù)幀的標(biāo)志位,在方式1中,若SM2=0,則RB8是接收到的停止位。
????????⑥ TI位:發(fā)送中斷標(biāo)志位。
????????當(dāng)串行通信口工作在方式0時(shí),發(fā)送完8位數(shù)據(jù)后,該位自動(dòng)置“1”(即硬件置“1”),向CPU發(fā)出中斷請求,在CPU響應(yīng)中斷后,必須用軟件清0;在其他幾種工作方式中,該位在停止位開始發(fā)送前自動(dòng)置“1”,向CPU發(fā)出中斷請求,在CPU響應(yīng)中斷后,也必須用軟件清0,以準(zhǔn)備開始發(fā)送下一幀數(shù)據(jù)。
????????⑦ RI位:接收中斷標(biāo)志位。
????????當(dāng)串行通信口工作在方式0時(shí),接收完8位數(shù)據(jù)后,該位自動(dòng)置“1”,向CPU發(fā)出接收中斷請求,在CPU響應(yīng)中斷后,必須用軟件清0;在其他幾種工作方式中,該位在接收到停止位期間自動(dòng)置“1”,向CPU發(fā)出中斷請求,在CPU響應(yīng)中斷取走數(shù)據(jù)后,必須用軟件對該位清0,以準(zhǔn)備開始接收下一幀數(shù)據(jù)。在上電復(fù)位時(shí),SCON各位均為“0”。
3.2 電源控制寄存器(PCON)
????????PCON寄存器是一個(gè)8位寄存器,它的字節(jié)地址為87H,不可位尋址,并且只有最高位SMOD與串行通信口控制有關(guān)。PCON寄存器各位的名稱和字節(jié)地址如下。
????????SMOD位:波特率設(shè)置位。
????????在串行通信口工作在方式1~3時(shí)起作用。若SMOD=0,波特率不變;當(dāng)SMOD=1時(shí),波特率加倍。在上電復(fù)位時(shí),SMOD=0。
4 四種工作方式與波特率的設(shè)置
????????串行通信口有四種工作方式,工作在何種方式受SCON寄存器的控制。在串行通信時(shí),要改變數(shù)據(jù)傳送速率(波特率),可對波特率進(jìn)行設(shè)置。
4.1 方式0
????????當(dāng)SCON寄存器中的SM0=0、SM1=0時(shí),串行通信口工作在方式0。
????????方式0稱為同步移位寄存器輸入/輸出方式,常用于擴(kuò)展I/O端口。在單片機(jī)發(fā)送或接收串行數(shù)據(jù)時(shí),通過RXD端發(fā)送數(shù)據(jù)或接收數(shù)據(jù),而通過TXD端送出數(shù)據(jù)傳輸所需的移位脈沖。
????????在方式0時(shí),串行通信口又分兩種工作情況:發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。
4.1.1 方式0-發(fā)送數(shù)據(jù)
????????當(dāng)串行通信口工作在方式0時(shí),若要發(fā)送數(shù)據(jù),通常在外部接8位串/并轉(zhuǎn)換移位寄存器74LS164,具體連接電路如圖7所示。其中RXD端用來輸出串行數(shù)據(jù),TXD端用來輸出移位脈沖,P1.0端用來對74LS164進(jìn)行清0。
?圖7 串行通信在方式0時(shí)的數(shù)據(jù)發(fā)送電路
????????在單片機(jī)發(fā)送數(shù)據(jù)前,先從P1.0引腳發(fā)出一個(gè)清0信號(低電平)到74LS164的CLR引腳,對其進(jìn)行清0,讓D7~D0全部為“0”,然后單片機(jī)在內(nèi)部執(zhí)行寫SBUF指令,開始從RXD端(P3.0引腳)送出8位數(shù)據(jù),與此同時(shí),單片機(jī)的TXD端輸出移位脈沖到74LS164的CLK引腳,在移位脈沖的控制下,74LS164接收單片機(jī)RXD端送到的8位數(shù)據(jù)(先低位后高位),數(shù)據(jù)發(fā)送完畢,在74LS164的D7~D0端輸出8位數(shù)據(jù)。另外,在數(shù)據(jù)發(fā)送結(jié)束后,SCON寄存器的發(fā)送中斷標(biāo)志位TI自動(dòng)置“1”。
4.1.2 方式0-接收數(shù)據(jù)
????????當(dāng)串行通信口工作在方式0時(shí),若要接收數(shù)據(jù),一般在外部接8位并/串轉(zhuǎn)換移位寄存器74LS165,具體連接電路如圖8 所示。在這種方式時(shí),RXD端用來接收輸入的串行數(shù)據(jù),TXD端用來輸出移位脈沖,P1.0端用來對74LS165的數(shù)據(jù)進(jìn)行鎖存。
?圖8 串行通信口在方式0時(shí)的數(shù)據(jù)接收電路
????????在單片機(jī)接收數(shù)據(jù)前,先從 P1.0 引腳發(fā)出一個(gè)低電平信號到74LS165 的引腳,讓74LS165鎖存由D7~D0端輸入的8位數(shù)據(jù),然后單片機(jī)內(nèi)部執(zhí)行讀SBUF指令,與此同時(shí),單片機(jī)的TXD端送移位脈沖到74LS165的CLK1引腳,在移位脈沖的控制下,74LS165中的數(shù)據(jù)逐位從RXD端送入單片機(jī),單片機(jī)接收數(shù)據(jù)完畢,SCON寄存器的接收中斷標(biāo)志位RI自動(dòng)置“1”。
????????在方式0中,串行通信口發(fā)送和接收數(shù)據(jù)的波特率都是fosc/12。
4.2 方式1
????????當(dāng)SCON寄存器中的SM0=0、SM1=1時(shí),串行通信口工作在方式1。
????????在方式1時(shí),串行通信口可以發(fā)送和接收每幀10位的串行數(shù)據(jù)。其中TXD端用來發(fā)送數(shù)據(jù),RXD端用來接收數(shù)據(jù)。
????????在方式1中,一幀數(shù)據(jù)中有10位,包括1位起始位(低電平)、8位數(shù)據(jù)位(低位在前)和1位停止位(高電平)。在方式1時(shí),串行通信口又分兩種工作情況:發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。
4.2.1 方式1-發(fā)送數(shù)據(jù)
????????在發(fā)送數(shù)據(jù)時(shí),若執(zhí)行寫SBUF指令,發(fā)送控制器在移位脈沖(由定時(shí)器/計(jì)數(shù)器T1產(chǎn)生的信號再經(jīng)16或32分頻而得到)的控制下,先從TXD端送出一個(gè)起始位(低電平),然后再逐位將8位數(shù)據(jù)從 TXD 端送出,當(dāng)最后一位數(shù)據(jù)發(fā)送完成,發(fā)送控制器馬上將SCON的TI位置“1”,向CPU發(fā)出中斷請求,同時(shí)從TXD端輸出停止位(高電平)。
4.2.2 方式1-接收數(shù)據(jù)
????????在方式1時(shí),需要設(shè)置SCON中的REN=1,串行通信口才允許接收數(shù)據(jù)。由于不知道外部設(shè)備何時(shí)會發(fā)送數(shù)據(jù),所以串行通信口會不斷檢測RXD端,當(dāng)檢測到RXD端有負(fù)跳變(由“1”變?yōu)椤?”)時(shí),說明外部設(shè)備發(fā)來了數(shù)據(jù)的起始位,于是啟動(dòng)RXD端接收,將輸入的8位數(shù)據(jù)逐位移入內(nèi)部的輸入移位寄存器。8位數(shù)據(jù)全部進(jìn)入輸入移位寄存器后,如果滿足RI位為“0”、SM2位為“0”(若SM2不為“0”,但接收到的數(shù)據(jù)停止位為“1”也可以)的條件,輸入移位寄存器中的8位數(shù)據(jù)才可以放入SBUF,停止位的“1”才能送入SCON的RB8位中,RI位就會被置“1”,向CPU發(fā)出中斷請求,讓CPU取走SBUF中的數(shù)據(jù),如果條件不滿足,輸入移位寄存器中的數(shù)據(jù)將無法送入SBUF而丟棄,重新等待接收新的數(shù)據(jù)。
4.3 方式2
????????當(dāng)SCON寄存器中的SM0=1、SM1=0時(shí),串行通信口工作在方式2。
????????在方式2時(shí),串行通信口可以發(fā)送和接收每幀11位的串行數(shù)據(jù),其中1位起始位、8位數(shù)據(jù)位、1位可編程位和1位停止位。TXD端用來發(fā)送數(shù)據(jù),RXD端用來接收數(shù)據(jù)。
????????在方式2時(shí),串行通信口又分兩種工作情況:發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。
4.3.1 方式2-發(fā)送數(shù)據(jù)
????????在方式2時(shí),發(fā)送的一幀數(shù)據(jù)有11位,其中有9位數(shù)據(jù),第9位數(shù)據(jù)取自SCON中的TB8位。在發(fā)送數(shù)據(jù)前,先用軟件設(shè)置TB8位的值,然后執(zhí)行寫SBUF指令(如MOV SBUF,A),發(fā)送控制器在內(nèi)部移位脈沖的控制下,從TXD端送出一個(gè)起始位(低電平),然后逐位送出8位數(shù)據(jù),再從TB8位中取出第9位并送出,當(dāng)最后一位數(shù)據(jù)發(fā)送完成,發(fā)送控制器馬上將SCON的TI位置“1”,向CPU發(fā)出中斷請求,同時(shí)從TXD端輸出停止位(高電平)。
4.3.2 方式2-接收數(shù)據(jù)
????????在方式2時(shí),同樣需設(shè)置SCON的REN=1,串行通信口才允許接收數(shù)據(jù),然后不斷檢測RXD端是否有負(fù)跳變(由“1”變?yōu)椤?”),若有,說明外部設(shè)備發(fā)來了數(shù)據(jù)的起始位,于是啟動(dòng)RXD端接收數(shù)據(jù)。當(dāng)8位數(shù)據(jù)全部進(jìn)入輸入移位寄存器后,如果RI位為“0”、SM2位為“0”(若SM2不為“0”,但接收到的第9位數(shù)據(jù)為“1”也可以),輸入移位寄存器中的8位數(shù)據(jù)才可以送入SBUF,第9位會放進(jìn)SCON的RB8位,同時(shí)RI位置“1”,向CPU發(fā)出中斷請求,讓CPU取走SBUF中的數(shù)據(jù),否則輸入移位寄存器中的數(shù)據(jù)將無法送入SBUF而丟棄。
4.4 方式3
????????當(dāng)SCON中的SM0=1、SM1=1時(shí),串行通信口工作在方式3。方式3與方式2一樣,傳送的一幀數(shù)據(jù)都為11位,工作原理也相同,兩者的區(qū)別僅在于波特率不同,方式2的波特率固定為fosc/64或fosc/32,而方式3的波特率則可以設(shè)置。
4.5 波特率的設(shè)置
????????在串行通信中,為了保證數(shù)據(jù)的發(fā)送和接收成功,要求發(fā)送方發(fā)送數(shù)據(jù)的速率與接收方接收數(shù)據(jù)的速率相同,而將雙方的波特率設(shè)置相同就可以達(dá)到這個(gè)要求。在串行通信的四種方式中,方式0的波特率是固定的,而方式1~方式3的波特率則是可變的。波特率是數(shù)據(jù)傳送的速率,它用每秒傳送的二進(jìn)制數(shù)的位數(shù)來表示,單位符號是bit/s。
4.5.1?方式0的波特率
????????方式0的波特率固定為時(shí)鐘振蕩頻率的1/12,即方式0的波特率 = fosc/12
4.5.2 方式2的波特率
????????方式2的波特率由PCON寄存器中的SMOD位決定。
????????當(dāng)SMOD = 0時(shí),方式2的波特率為時(shí)鐘振蕩頻率的1/64;
????????當(dāng)SMOD = 1時(shí),方式2的波特率加倍,為時(shí)鐘振蕩頻率的1/32,即
方式2的波特率 =
4.5.3 方式1和方式3的波特率
????????方式1和方式3的波特率除了與SMOD位有關(guān),還與定時(shí)器/計(jì)數(shù)器T1的溢出率有關(guān)。方式1和方式3的波特率可用下式計(jì)算:
方式1、3的波特率 = T1的溢出率·/32
????????T1的溢出率是指定時(shí)器/計(jì)數(shù)器T1在單位時(shí)間內(nèi)計(jì)數(shù)產(chǎn)生的溢出次數(shù),也即溢出脈沖的頻率。
????????在將定時(shí)器/計(jì)數(shù)器T0設(shè)作工作方式3時(shí),T1可以工作在方式0、方式1或方式2三種方式下。
????????當(dāng)T1工作于方式0時(shí),它對脈沖信號(由時(shí)鐘信號fosc經(jīng)12分頻得到)進(jìn)行計(jì)數(shù),計(jì)到時(shí)會產(chǎn)生一個(gè)溢出脈沖到串行通信口作為移位脈沖;
????????當(dāng)T1工作于方式1和2時(shí),則分別要計(jì)到和?X(X為T1的初值,可以設(shè)定)才產(chǎn)生溢出脈沖。
????????如果要提高串行通信口的波特率,可讓T1工作在方式2,因?yàn)樵摲绞接?jì)數(shù)時(shí)間短,溢出脈沖頻率高,并且能通過設(shè)置T1的初值來調(diào)節(jié)計(jì)數(shù)時(shí)間,從而改變T1產(chǎn)生的溢出脈沖的頻率(又稱T1的溢出率)。
????????當(dāng)T1工作在方式2時(shí),T1兩次溢出的時(shí)間間隔,也即T1的溢出周期為
T1的溢出周期 = (? X)·12/ fosc
????????T1的溢出率為溢出周期的倒數(shù),即
T1的溢出率 = fosc/[12·(? X)]
????????故當(dāng)T1工作在方式2時(shí),串行通信口工作方式1、3的波特率為
????????方式1、3的波特率 = (/32)·fosc/[12·(? X)]?
????????由上式可推導(dǎo)出T1在方式2時(shí),其初值X為
X = ? (·fosc)/(384·波特率)
????????舉例:單片機(jī)的時(shí)鐘頻率fosc=11.0592MHz,現(xiàn)要讓串行通信的波特率為2400bit/s,可將串行通信口的工作方式設(shè)為1、T1的方式設(shè)為2,并求出T1應(yīng)設(shè)的初值。
????????求T1初值的過程如下。
????????先進(jìn)行寄存器設(shè)置:為了讓波特率不倍增,將 PCON 寄存器中的數(shù)據(jù)設(shè)為00H,這樣SMOD位就為“0”;設(shè)置TMOD寄存器中的數(shù)據(jù)為20H,這樣T1就工作在方式2。再計(jì)算并設(shè)置T1的初值:
X = ? ·fosc/384·波特率 = 256 ?(× 11.0592 × )/(384 × 2400)= 244
????????十進(jìn)制數(shù)244轉(zhuǎn)換成十六進(jìn)制數(shù)為F4H,將T1的初值設(shè)為F4H。
????????由于設(shè)置波特率和初值需要計(jì)算,比較麻煩,一般情況下可查表來進(jìn)行設(shè)置。常見的波特率設(shè)置見表2。
表2 常用的波特率設(shè)置
總結(jié)
以上是生活随笔為你收集整理的51单片机——串行通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hihocoder王胖浩与三角形【海伦公
- 下一篇: 【GeneXus】在WorkWithPl