《單片機應(yīng)用與設(shè)計》課件項目五_第1頁
《單片機應(yīng)用與設(shè)計》課件項目五_第2頁
《單片機應(yīng)用與設(shè)計》課件項目五_第3頁
《單片機應(yīng)用與設(shè)計》課件項目五_第4頁
《單片機應(yīng)用與設(shè)計》課件項目五_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

項目五單片機串行口通信

5.1串行通信簡介5.2STC89C51RC/RD+系列單片機的串行口5.3串行口應(yīng)用舉例本章知識總結(jié)學習目標

了解串行通信基礎(chǔ)知識;

掌握STC89C51RC/RD+系列單片機串行口相關(guān)寄存器的設(shè)置方法;

掌握STC89C51RC/RD+系列單片機串行口的工作模式;

掌握利用串行口發(fā)送數(shù)據(jù)、接收數(shù)據(jù)的C語言編程方法。

能力目標

能夠掌握單片機串行口數(shù)據(jù)發(fā)送、數(shù)據(jù)接收的控制方法與程序的編寫;能夠初步利用單片機串行口進行數(shù)據(jù)傳輸。

5.1串行通信簡介

串行口簡稱串口,是采用串行通信方式的接口。

5.1.1串行通信和并行通信

并行通信:數(shù)據(jù)的各位同時傳送。并行方式可一次同時傳送N位數(shù)據(jù),但并行傳送的線路復(fù)雜,并行方式常用于短距離通信。

串行通信:數(shù)據(jù)一位一位順序傳送。串行方式一次只能傳送一位。串行傳送的線路簡單,因此多用于長距離通信。并行通信與串行通信示意圖如圖5.1所示。圖5.1并行通信與串行通信示意圖5.1.2異步通信和同步通信

1.異步通信

異步通信指兩個互不同步的設(shè)備通過計時機制或其他技術(shù)進行數(shù)據(jù)傳輸。

異步通信以一個字符為傳輸單位,通信中兩個字符間的時間間隔是不固定的,然而在同一個字符中的兩個相鄰位代碼間的時間間隔是固定的。使用異步串口傳送一個字符的信息時,對資料格式有如下約定:規(guī)定有空閑位、起始位、數(shù)據(jù)位、奇偶校驗位、停止位。

異步通信的時序如圖5.2所示。圖5.2異步通信時序其中各位的意義如下:

起始位:先發(fā)出一個邏輯“0”信號,表示傳輸字符的開始。

數(shù)據(jù)位:緊接著起始位之后。數(shù)據(jù)位的個數(shù)可以是4、5、6、7、8等,構(gòu)成一個字符。通常采用ASCII碼。從最低位開始傳送,靠時鐘定位。

奇偶校驗位:數(shù)據(jù)位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗)或奇數(shù)(奇校驗),以此來校驗數(shù)據(jù)傳送的正確性。

停止位:它是一個字符數(shù)據(jù)的結(jié)束標志,可以是1位、1.5位、2位的高電平??臻e位:處于邏輯“1”狀態(tài),表示當前線路上沒有數(shù)據(jù)傳送。

波特率:衡量數(shù)據(jù)傳送速率的指針,表示每秒鐘傳送的二進制位數(shù)。例如數(shù)據(jù)傳送速率為120字符/秒,而每一個字符為10位,則其傳送的波特率為10?×?120?=?1200字符/秒?=?1200波特。

2.同步通信

同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。這里的信息幀與異步通信中的字符幀不同,通常含有若干個數(shù)據(jù)字符。

同步通信的時序如圖5.3所示。圖5.3同步通信時序采用同步通信時,將許多字符組成一個信息組,這樣,字符可以一個接一個地傳輸,但是,在每組信息(通常稱為幀)的開始要加上同步字符;在沒有信息要傳輸時,要填上“空閑”字符,因為同步傳輸不允許有間隙。在同步傳輸過程中,一個字符可以對應(yīng)5~8位。

同步通信要求在傳輸線路上始終保持連續(xù)的字符位流,若計算機沒有數(shù)據(jù)傳輸,則線路上要用專用的“空閑”字符或同步字符填充。5.1.3串行通信的傳輸方向

1.單工

單工是指數(shù)據(jù)傳輸僅能沿一個方向,不能實現(xiàn)反向傳輸,如圖5.4所示。

2.半雙工

半雙工是指數(shù)據(jù)傳輸可以沿兩個方向,但需要分時進行,如圖5.5所示。

3.全雙工

全雙工是指數(shù)據(jù)可以同時進行雙向傳輸,如圖5.6所示。圖5.4單工通信圖5.5半雙工通信圖5.6全雙工通信5.2STC89C51RC/RD+系列單片機的串行口

STC89C51RC/RD+系列單片機內(nèi)部集成有一個功能很強的全雙工串行通信口,與傳統(tǒng)8051單片機的串口完全兼容。設(shè)有兩個互相獨立的接收、發(fā)送緩沖器,可以同時發(fā)送和接收數(shù)據(jù)。發(fā)送緩沖器只能寫入而不能讀出,接收緩沖器只能讀出而不能寫入,因而兩個緩沖器可以共用一個地址碼(99H)。兩個緩沖器統(tǒng)稱串行通信特殊功能寄存器SBUF。串行通信設(shè)有4種工作方式,其中兩種方式的波特率是可變的,另兩種是固定的,以供不同應(yīng)用場合選用。波特率由內(nèi)部定時器/計數(shù)器產(chǎn)生,用軟件設(shè)置不同的波特率和選擇不同的工作方式。主機可通過查詢或中斷方式對接收/發(fā)送進行程序處理,使用十分靈活。

STC89C51RC/RD+系列單片機串行口對應(yīng)的硬件部分對應(yīng)的管腳是P3.0/RXD和P3.1/TXD。

STC89C51RC/RD+系列單片機的串行通信口,除用于數(shù)據(jù)通信外,還可方便地構(gòu)成一個或多個并行I/O口,或作串/并轉(zhuǎn)換,或用于擴展串行外設(shè)等。5.2.1串行口相關(guān)寄存器

串行口相關(guān)寄存器如表5-1所示。表5-1串行口相關(guān)寄存器

1.串行口控制寄存器SCON和PCON

STC89C51RC/RD+系列單片機的串行口設(shè)有兩個控制寄存器:串行控制寄存器SCON和波特率選擇特殊功能寄存器PCON。

串行控制寄存器SCON用于選擇串行通信的工作方式和某些控制功能,其格式如下:

SCON:串行控制寄存器(可位尋址)。

SM0/FE:當PCON寄存器中的SMOD0/PCON.6位為1時,該位用于幀錯誤檢測。當檢測到一個無效停止位時,通過UART接收器設(shè)置該位。它必須由軟件清零。

當PCON寄存器中的SMOD0/PCON.6位為0時,該位和SM1一起指定串行通信的工作方式。其中SM0、SM1按下列組合確定串行口的工作方式,如表5-2所示。表5-2串行口工作方式選擇

SM2:允許方式2或方式3多機通信控制位。在方式2或方式3時,如SM2位為1,REN位為1,則從機只有接收到RB8位為1(地址幀)時才激活中斷請求標志位RI為1,并向主機請求中斷處理;被確認為尋址的從機則復(fù)位SM2位為0,從而才接收RB8為0的數(shù)據(jù)幀。在方式1時,如果SM2位為1,則只有在接收到有效的停止位時才置位中斷請求標志位RI為1。在方式0時,SM2應(yīng)為0。

REN:允許/禁止串行接收控制位。由軟件置位REN,即REN?=?1為允許串行接收狀態(tài),可啟動串行接收器RXD,開始接收信息。軟件復(fù)位REN,即REN?=?0,則禁止接收。

TB8:在方式2或方式3,它為要發(fā)送的第9位數(shù)據(jù),按需要由軟件置位或清零。例如,可用作數(shù)據(jù)的校驗位或多機通信中表示地址幀/數(shù)據(jù)幀的標志位。

RB8:在方式2或方式3,是接收到的第9位數(shù)據(jù);在方式1,若SM2?=?0,則RB8是接收到的停止位。方式0不用RB8。

TI:發(fā)送中斷請求標志位。在方式0,當串行發(fā)送數(shù)據(jù)第8位結(jié)束時,由內(nèi)部硬件自動置位,即TI?=?1,向主機請求中斷,響應(yīng)中斷后必須用軟件復(fù)位,即TI?=?0。在其他方式中,則在停止位開始發(fā)送時由內(nèi)部硬件置位,必須用軟件復(fù)位。

RI:接收中斷請求標志位。在方式0,當串行接收到第8位結(jié)束時由內(nèi)部硬件自動置位RI?=?1,向主機請求中斷,響應(yīng)中斷后必須用軟件復(fù)位,即RI?=?0。在其他方式中,串行接收到停止位的中間時刻由內(nèi)部硬件置位,即RI=1(例外情況見SM2說明),必須由軟件復(fù)位,即RI?=?0。

SCON的所有位可通過整機復(fù)位信號復(fù)位為全“0”。SCON的字節(jié)地址尾98H,可位尋址,各位地址為98H~9FH,可用軟件實現(xiàn)位設(shè)置。當用指令改變SCON的有關(guān)內(nèi)容時,其改變的狀態(tài)將在下一條指令的第一個機器周期的S1P1狀態(tài)發(fā)生作用。如果一次串行發(fā)送已經(jīng)開始,則輸出TB8將是原先的值,不是新改變的值。串行通信的中斷請求:當一幀發(fā)送完成時,內(nèi)部硬件自動置位TI,即TI=1,請求中斷處理;當接收完一幀信息時,內(nèi)部硬件自動置位RI,即RI=1,請求中斷處理。由于TI和RI以“或邏輯”關(guān)系向主機請求中斷,所以主機響應(yīng)中斷時事先并不知道是TI還是RI請求的中斷,必須在中斷服務(wù)程序中查詢TI和RI進行判別,然后分別處理。因此,兩個中斷請求標志位均不能由硬件自動置位,必須通過軟件清零,否則將出現(xiàn)一次請求多次響應(yīng)的錯誤。

電源控制寄存器PCON中的SMOD/PCON.7用于設(shè)置方式1、方式2、方式3的波特率是否加倍。

PCON:電源控制寄存器(不可位尋址),格式如下:

SMOD:波特率選擇位。當用軟件置位SMOD,即SMOD?=?1時,串行通信方式1、2、3的波特率加倍;當SMOD?=?0時,各工作方式的波特率加倍。復(fù)位時SMOD?=?0。

SMOD0:幀錯誤檢測有效控制位。當SMOD0?=?1時,SCON寄存器中的SM0/FE位用于FE(幀錯誤檢測)功能;當SMOD0?=?0時,SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行口的工作方式。復(fù)位時SMOD0?=?0。2.串行口數(shù)據(jù)緩沖寄存器SBUF

STC89xx系列單片機的串行口緩沖寄存器(SBUF)的地址是99H,實際是兩個緩沖器,寫SBUF的操作完成待發(fā)送數(shù)據(jù)的加載,讀SBUF的操作可獲得已接收到的數(shù)據(jù)。兩個操作分別對應(yīng)兩個不同的寄存器,一個是只寫寄存器,一個是只讀寄存器。

串行通道內(nèi)設(shè)有數(shù)據(jù)寄存器。在所有的串行通信方式中,在寫入SBUF信號的控制下,把數(shù)據(jù)裝入相同的9位移位寄存器,前面8位為數(shù)據(jù)字節(jié),其最低位為移位寄存器的輸出位。根據(jù)不同的工作方式會自動將“1”或TB8的值裝入移位寄存器的第9位,并進行發(fā)送。串行通道的接收寄存器是一個輸入移位寄存器。在方式0時它的字長為8位,其他方式時為9位。當一幀接收完畢,移位寄存器中的數(shù)據(jù)字節(jié)裝入串行數(shù)據(jù)緩沖器SBUF中,其第9位則裝入SCON寄存器中的RB8位。如果由于SM2使得已接收到的數(shù)據(jù)無效,則RB8和SBUF中的內(nèi)容不變。

由于接收通道內(nèi)設(shè)有輸入移位寄存器和SBUF緩沖器,從而能使一幀接收完將數(shù)據(jù)由移位寄存器裝入SBUF后,可立即開始接收下一幀信息,主機應(yīng)在該幀接收結(jié)束前從SBUF緩沖器中將數(shù)據(jù)取走,否則前一幀數(shù)據(jù)將丟失。SBUF以并行方式送往內(nèi)部數(shù)據(jù)總線。

3.從機地址控制寄存器SADEN和SADDR

為了方便多機通信,STC89C51RC/RD+系列單片機設(shè)置了從機地址控制寄存器SADEN和SADDR。其中SADEN是從機地址掩模寄存器(地址為B9H,復(fù)位值為00H),SADDR是從機地址寄存器(地址為A9H,復(fù)位值為00H)。

4.與串行口中斷相關(guān)的寄存器IE和IPH、IP

(1)串行口中斷允許位ES位于中斷允許寄存器IE中,中斷允許寄存器的格式如下:

IE:中斷允許寄存器(可位尋址)。

EA:CPU的總中斷允許控制位,EA?=?1,CPU開放中斷;EA?=?0,CPU屏蔽所有的中斷申請。EA的作用是使中斷允許形成多級控制,即各中斷源首先受EA控制,其次還受各中斷源自己的中斷允許控制位控制。

ES:串行口中斷允許位,ES?=?1,允許串行口中斷;ES?=?0,禁止串行口中斷。

(2)串行口中斷優(yōu)先級控制位PS/PSH位于中斷優(yōu)先級控制寄存器IP/IPH中,中斷優(yōu)先級控制寄存器的格式如下:

IPH:中斷優(yōu)先級控制寄存器高(不可位尋址)。

(3)IP:中斷優(yōu)先級控制寄存器低(可位尋址)。

PSH,PS:串口1中斷優(yōu)先級控制位。

當PSH?=?0且PS?=?0時,串口1中斷為最低優(yōu)先級中斷(優(yōu)先級0);

當PSH?=?0且PS?=?1時,串口1中斷為較低優(yōu)先級中斷(優(yōu)先級1);

當PSH?=?1且PS?=?0時,串口1中斷為較高優(yōu)先級中斷(優(yōu)先級2);

當PSH?=?1且PS?=?1時,串口1中斷為最高優(yōu)先級中斷(優(yōu)先級3)。5.2.2STC89C51RC/RD+系列單片機的串行口工作模式

STC89C51RC/RD+系列單片機的串行口有4種工作模式,可通過軟件編程對SCON中的SM0、SM1的設(shè)置進行選擇。其中模式1、模式2和模式3為異步通信,每個發(fā)送和接收的字符都帶有1個啟動位和1個停止位。在模式0中,串行口被作為一個簡單的移位寄存器使用。

1.串行口工作模式0:同步移位寄存器

在模式0狀態(tài),串行通信工作在同步移位寄存器模式,當單片機工作在6T時,其波特率固定為SYSclk/6。當單片機工作在12T時,其波特率固定為SYSclk/12。串行口數(shù)據(jù)由RXD(RXD/P3.0)端輸入,同步移位脈沖(SHIFTCLOCK)由TXD(TXD/P3.1)輸出,發(fā)送、接收的是8位數(shù)據(jù),低位在先。

模式0的發(fā)送過程:當主機執(zhí)行將數(shù)據(jù)寫入發(fā)送緩沖器SBUF指令時啟動發(fā)送,串行口即將8位數(shù)據(jù)以SYSclk/12或SYSclk/6的波特率從RXD管腳輸出(從低位到高位),發(fā)送完中斷標志TI置“1”,TXD管腳輸出同步移位脈沖(SHIFTCLOCK)。模式0發(fā)送過程如圖5.7所示。圖5.7模式0發(fā)送過程當寫信號有效后,相隔一個時鐘,發(fā)送控制端SEND有效(高電平),允許RXD發(fā)送數(shù)據(jù),同時允許TXD輸出同步移位脈沖。一幀(8位)數(shù)據(jù)發(fā)送完畢后,各控制端均恢復(fù)原狀態(tài),只有TI保持高電平,呈中斷申請狀態(tài)。在再次發(fā)送數(shù)據(jù)前,必須用軟件將TI清零。

模式0接收過程:接收時,復(fù)位接收中斷請求標志RI,即RI?=?0,置位允許接收控制位REN?=?1時啟動串行模式0接收過程,啟動接收過程后,RXD為串行輸入端,TXD為同步脈沖輸出端。串行接收的波特率為SYSclk/12或SYSclk/6。模式0接收過程如圖5.8所示。圖5.8模式0接收過程當接收完成一幀數(shù)據(jù)(8位)后,控制信號復(fù)位,中斷標志RI被置“1”,呈中斷申請狀態(tài)。當再次接收時,必須通過軟件將RI清零。

工作于模式0時,必須清零多機通信控制位SM2,使不影響TB8位和RB8位。由于波特率固定為SYSclk/12或SYSclk/6,因此無需定時器提供,直接由單片機的時鐘作為同步移位脈沖。

2.串行口工作模式1:8位UART,波特率可變

當軟件設(shè)置SCON的SM0、SM1為“01”時,串行通信則以模式1工作。此模式為8位UART格式,一幀信息為10位:1位起始位,8位數(shù)據(jù)位(低位在先)和1位停止位。波特率可變,即可根據(jù)需要進行設(shè)置。TXD(TXD/P3.1)端發(fā)送信息,RXD(RXD/P3.0)端接收信息,串行口為全雙工接收/發(fā)送串行口。模式1的發(fā)送過程:串行通信模式發(fā)送時,數(shù)據(jù)由串行發(fā)送端TXD輸出。當主機執(zhí)行一條寫“SBUF”的指令時就啟動串行通信的發(fā)送,寫“SBUF”信號還把“1”裝入發(fā)送移位寄存器的第9位,并通知TX控制單元開始發(fā)送。發(fā)送各位的定時是由16分頻計數(shù)器同步的。模式1發(fā)送過程如圖5.9所示。

移位寄存器將數(shù)據(jù)不斷右移送TXD端口發(fā)送,在數(shù)據(jù)的左邊不斷移入“0”作補充。當數(shù)據(jù)的最高位移到移位寄存器的輸出位置時,緊跟其后的是第9位“1”,在它的左邊各位全為“0”,這個狀態(tài)條件,使TX控制單元作最后一次移位輸出,然后使允許發(fā)送信號“SEND”失效,完成一幀信息的發(fā)送,并置位中斷請求位TI,即TI?=?1,向主機請求中斷處理。圖5.9模式1發(fā)送過程模式1的接收過程:當軟件置位接收允許標志位REN,即REN?=?1時,接收器便以選定波特率的16分頻的速率采樣串行接收端口RXD,當檢測到RXD端口從“1”到“0”的負跳變時就啟動接收器準備接收數(shù)據(jù),并立即復(fù)位16分頻計數(shù)器,將1FFH裝入移位寄存器。復(fù)位16分頻計數(shù)器是使它與輸入位時間同步。模式1接收過程如圖5.10所示。圖5.10模式1接收過程

16分頻計數(shù)器的16個狀態(tài)是將1波特率(每位接收時間)均為16等份,在每位時間的7、8、9狀態(tài)由檢測器對RXD端口進行采樣,所接收的值是這次采樣值經(jīng)“三中取二”的值,即3次采樣至少2次相同的值,以此消除干擾影響,提高可靠性。在起始位,如果接收到的值不為“0”(低電平),則起始位無效,復(fù)位接收電路,并重新檢測由“1”到“0”的跳變。如果接收到的起始位有效,則將它輸入移位寄存器,并接收本幀的其余信息。

接收的數(shù)據(jù)從接收移位寄存器的右邊移入,已裝入的1FFH向左邊移出,當起始位“0”移到移位寄存器的最左邊時,RX控制器作最后一次移位,完成一幀的接收。此時必須滿足以下兩個條件:

(1)?RI?=?0;

(2)?SM2?=?0或接收到的停止位為1。

若以上兩條件同時滿足,則接收到的數(shù)據(jù)有效,實現(xiàn)載入SBUF,停止位進入RB8,置位RI,即RI?=?1,向主機請求中斷;若上述兩條件不能同時滿足,則接收到的數(shù)據(jù)作廢并丟失。無論條件滿足與否,接收器重又檢測RXD端口上的由“1”到“0”的跳變,繼續(xù)下一幀的接收。接收有效,在響應(yīng)中斷后,必須由軟件清零,即RI?=?0。通常情況下,串行通信工作于模式1時,SM2設(shè)置為“0”。串行通信模式1的波特率是可變的,可變的波特率由定時器/計數(shù)器1或獨立波特率發(fā)生器產(chǎn)生。

串行通信模式1的波特率?=?2SMOD32?×?(定時器/計數(shù)器1溢出率)

當單片機工作在12T模式時,定時器1的溢出率?=?(SYSclk/12)/(256-TH1);

當單片機工作在6T模式時,定時器1的溢出率=(SYSclk/6)/(256-TH1)。

3.串行口工作模式2:9位UART,波特率固定

當SM0、SM1兩位為10時,串行口工作在模式2。串行口工作模式2為9位數(shù)據(jù)異步通信UART模式,其一幀的信息由11位組成:1位起始位,8位數(shù)據(jù)位(低位在先),1位可編程位(第9位數(shù)據(jù))和1位停止位。發(fā)送時可編程位(第9位數(shù)據(jù))由SCON中的TB8提供,可通過軟件將SCON中的TB8設(shè)置為1或0,或者可將PSW中的奇/偶校驗位P值裝入TB8(TB8既可作為多機通信中的地址數(shù)據(jù)標志位,又可作為數(shù)據(jù)的奇偶校驗位)。接收時第9位數(shù)據(jù)裝入SCON的RB8。TXD為發(fā)送端口,RXD為接收端口,以全雙工模式進行接收/發(fā)送。模式2的波特率為

上述波特率可通過軟件對PCON中的SMOD位進行設(shè)置,當SMOD?=?1時,選擇SYSclk/32;當SMOD?=?0時,選擇SYSclk/64,故而稱SMOD為波特率加倍位??梢?,模式2的波特率基本上是固定的。

模式2接收和發(fā)送時序如圖5.11所示。圖5.11模式2接收和發(fā)送時序圖由時序圖可知,模式2和模式1相比,除波特率發(fā)生源略有不同,發(fā)送時由TB8提供給移位寄存器第9數(shù)據(jù)位不同外,其余功能結(jié)構(gòu)均基本相同,其接收/發(fā)送操作過程及時序也基本相同。

當接收器接收完一幀信息后必須同時滿足下列條件:

(1)?RI?=?0;

(2)?SM2?=?0或者SM2?=?1,并且接收到的第9數(shù)據(jù)位RB8?=?1。當上述兩條件同時滿足時,才將接收到的移位寄存器的數(shù)據(jù)裝入SBUF和RB8中,并置位RI=1,向主機請求中斷處理。如果上述條件有一個不滿足,則剛接收到移位寄存器中的數(shù)據(jù)無效而丟失,也不置位RI。無論上述條件滿足與否,接收器又重新開始檢測RXD輸入端口的跳變信息,接收下一幀的輸入信息。

在模式2中,接收到的停止位與SBUF、RB8和RI無關(guān)。

通過軟件對SCON中的SM2、TB8的設(shè)置以及通信協(xié)議的約定,為多機通信提供了方便。

4.串行口工作模式3:9位UART,波特率可變

當SM0、SM1兩位為11時,串行口工作在模式3。串行通信模式3為9位數(shù)據(jù)異步通信UART模式,其一幀的信息由11位組成:1位起始位,8位數(shù)據(jù)位(低位在先),1位可編程位(第9位數(shù)據(jù))和1位停止位。發(fā)送時可編程位(第9位數(shù)據(jù))由SCON中的TB8提供,可通過軟件設(shè)置TB8為1或0,或者可將PSW中的奇/偶校驗位P值裝入TB8(TB8既可作為多機通信中的地址數(shù)據(jù)標志位,又可作為數(shù)據(jù)的奇偶校驗位)。接收時第9位數(shù)據(jù)裝入SCON的RB8。TXD為發(fā)送端口,RXD為接收端口,以全雙工模式進行接收/發(fā)送。模式3的波特率為

當單片機工作在12T模式時,定時器1的溢出率=(SYSclk/12)/(256-TH1);

當單片機工作在6T模式時,定時器1的溢出率=(SYSclk/6)/(256-TH1)。

可見,模式3和模式1一樣,可通過軟件對定時器/計數(shù)器1或獨立波特率發(fā)生器的設(shè)置進行波特率的選擇,波特率是可變的。

模式3接收發(fā)送時序如圖5.12所示。圖5.12模式3接收和發(fā)送時序圖模式3和模式1相比,除發(fā)送時由TB8提供給移位寄存器第9數(shù)據(jù)位不同外,其余功能結(jié)構(gòu)均基本相同,其接收和發(fā)送操作過程及時序也基本相同。

當接收器接收完一幀信息后必須同時滿足下列條件:

(1)?RI?=?0;

(2)?SM2?=?0或者SM2=1,并且接收到的第9數(shù)據(jù)位RB8?=?1。當上述兩條件同時滿足時,才將接收到的移位寄存器的數(shù)據(jù)裝入SBUF和RB8中,并置位RI=1,向主機請求中斷處理。如果上述條件有一個不滿足,則剛接收到移位寄存器中的數(shù)據(jù)無效而丟失,也不置位RI。無論上述條件滿足與否,接收器又重新開始檢測RXD輸入端口的跳變信息,接收下一幀的輸入信息。

在模式3中,接收到的停止位與SBUF、RB8和RI無關(guān)。

通過軟件對SCON中的SM2、TB8的設(shè)置以及通信協(xié)議的約定,為多機通信提供了方便。5.2.3串行通信中波特率的設(shè)置

波特率(Baudrate)即調(diào)制速率,指的是信號被調(diào)制以后在單位時間內(nèi)的變化,即單位時間內(nèi)載波參數(shù)變化的次數(shù)。它是對符號傳輸速率的一種度量,1波特即指每秒傳輸1個符號。

STC89C51RC/RD+系列單片機串行通信的波特率隨所選工作模式的不同而異,對于工作模式0和模式2,其波特率與系統(tǒng)時鐘頻率SYSclk和PCON中的波特率選擇位SMOD有關(guān),而模式1和模式3的波特率除與SYSclk和PCON位有關(guān)外,還與定時器/計數(shù)器1或BRT獨立波特率發(fā)生器設(shè)置有關(guān)。通過對定時器/計數(shù)器1或BRT獨立波特率發(fā)生器的設(shè)置,可選擇不同的波特率,所以這種波特率是可變的。串行通信模式0,其波特率與系統(tǒng)時鐘頻率SYSclk有關(guān):

串行通信工作模式2,其波特率除與SYSclk有關(guān)外,還與SMOD位有關(guān)。其基本表達式為:

當SMOD?=?1時,模式0波特率?=波特率?=當SMOD?=?0時,

當SYSclk選定后,通過軟件設(shè)置PCON中的SMOD位,可選擇兩種波特率。所以,這種模式的波特率基本固定。

串行通信模式1和3,其波特率是可變的:波特率?=?×?SYSclk模式1、3波特率?=

×?(定時器/計數(shù)器1的溢出率或BRT獨立波特率發(fā)生器的溢出率)當單片機工作在12T模式時定時器1的溢出率?=?當單片機工作在6T模式時定時器1的溢出率?=?通過對定時器/計數(shù)器1和BRT獨立波特率發(fā)生器的設(shè)置,可靈活地選擇不同的波特率。在實際應(yīng)用中多選用串行模式1或串行模式3。顯然,為選擇波特率,關(guān)鍵在于定時器/計數(shù)器1和BRT獨立波特率發(fā)生器的溢出率的計算。

在實際應(yīng)用中,定時器/計數(shù)器1通常采用方式2,TH1和TL2為兩個8位自動重裝計數(shù)器,操作方便。

因此可以推導出定時器1的初值公式,即當SMOD?=?0時

當SMOD?=?1時定時器1初值?=?256?-定時器1初值?=?256?-5.2.4串行口使用步驟

串行口使用步驟如下:

(1)設(shè)置串行口工作模式與波特率是否倍速;

(2)根據(jù)波特率計算公式,計算定時器1的初值;

(3)確定定時工作方式;

(4)啟動定時器;

(5)使用串口中斷方式,需要對相關(guān)中斷源進行設(shè)置,也可以使用查詢方式;

(6)向SBUF寫入數(shù)據(jù),也可以讀SBUF收到的數(shù)據(jù)。

5.3串行口應(yīng)用舉例

【例5.1】采用查詢方式,在圖5.13中,編寫單片機向串口發(fā)送數(shù)據(jù)(00~FF)程序。

解析:

由于Proteus軟件的虛擬串口中,集成了RS232-TTL功能,因此可以省略掉實際硬件電路中的MAX232芯片,然后選擇虛擬終端,并對其進行設(shè)置。

特別需要注意的是,在進行串行口通信時,需要對單片機的時鐘頻率進行設(shè)置,否則在運行仿真的過程中會出現(xiàn)數(shù)據(jù)不準確的情況。設(shè)置時,雙擊單片機,將時鐘頻率改為11.0592?MHz。如圖5.14所示。圖5.13串行口收發(fā)圖5.14單片機晶振設(shè)置程序代碼如下:

#include<reg52.h>

voiddelay_10ms(unsignedintz)

{

unsignedintx,y;

for(x=z;x>0;x--)

for(y=1150;y>0;y--);

}

voidmain()

{ unsignedinti=0;

SCON=0x40; //設(shè)置串口工作模式,方式1 PCON=0x80; //波特率倍速,SMOD=1

TMOD=0x20; //定時器1,方式2

TH1=256-11059200/16/12/9600; //定時器1賦初值

TL1=256-11059200/16/12/9600;

TR1=1; //啟動定時器

while(1)

{ /*采用查詢方式發(fā)送*/

SBUF=i;

while(TI==0); //查詢TI狀態(tài)

TI=0; //軟件復(fù)位TI

i++;

delay_10ms(5);

}在Proteus仿真運行后,可以通過虛擬終端觀察結(jié)果,如圖5.15所示。

如果仿真運行后,沒有彈出虛擬終端窗口,可右鍵單擊虛擬終端,選擇“VirtualTerminal”項即可,如圖5.16所示。圖5.15運行結(jié)果圖5.16打開虛擬終端

【例5.2】利用串口調(diào)試助手向單片機發(fā)送數(shù)據(jù),單片機將收到的數(shù)據(jù)再返回一個同樣的數(shù)據(jù)。

程序代碼如下:

#include<reg52.h>

voidmain()

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SM0=0; SM1=1;

REN=1;

EA=1;

ES=1;

while(1);

}

voidserial()interrupt4

{

unsignedchari;

if(RI==1) {

RI=0;

P1=0x0f;

i=SBUF;

SBUF=i;

while(!TI);

TI=0;

}

}

【例5.3】試用2片單片機實現(xiàn)數(shù)據(jù)傳輸。單片機1將A/D采集到的模擬信號轉(zhuǎn)換為數(shù)字信號,發(fā)送給單片機2,單片機2接收后,把接收到的數(shù)據(jù)在8位LED上顯示。說明:AD芯片使用ADC0804。

解析:

(1)硬件電路設(shè)計。在本題目中,實際上就是完成從一個單片機(單片機1)向另外一個單片機(單片機2)發(fā)送數(shù)據(jù),然后單片機2將收到的數(shù)據(jù)以二進制的形式,在8位LED顯示出來。首先我們來完成數(shù)據(jù)發(fā)送部分電路的設(shè)計,在項目四中,我們詳細地介紹了ADC0804的特性及其使用方法,因此,在本項目中,我們可以直接參考項目四中的電路,進行少量的修改就可以滿足要求,如圖5.17所示。

其次我們來完成接收端電路的設(shè)計,接收端電路需要有8位LED,我們?nèi)匀豢梢越梃b之前所學習過的電路,如圖5.18所示。圖5.17數(shù)據(jù)采集與發(fā)送圖5.18數(shù)據(jù)接收部分數(shù)據(jù)發(fā)送電路和數(shù)據(jù)接收電路都已經(jīng)完成了,接下來就是如何讓這兩部分能夠相互“交流”。通過前面的介紹可知,單片機P3.0和P3.1分別是串行口輸入和串行口輸出。要想使發(fā)送端發(fā)送的數(shù)據(jù)在接收端接收,發(fā)送部分和接收部分就要相互對應(yīng),即數(shù)據(jù)發(fā)送部分的P3.0連接到數(shù)據(jù)接收部分的P3.1,同時將數(shù)據(jù)發(fā)送部分的P3.1連接到數(shù)據(jù)接收部分的P3.0就可以滿足要求。因此整體原理圖如圖5.19所示。

(2)程序代碼如下:

①發(fā)送端程序:

#include<reg52.h>

sbitCS=P0^0; //定義片選端

sbitINTR=P0^1; //定義中斷請求信號輸出

unsignedintresult;

voiddelay_ms(unsignedcharz) //ms級帶參數(shù)延時函數(shù)

{

unsignedcharx,y;

for(x=z;x>0;x--)

for(y=0;y<110;y++);

}

voidinit()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論