版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1/368 第八章 數(shù)據(jù)通信本章學(xué)習(xí)目標(biāo)了解通信的有關(guān)概念掌握串行通信和并行通信的原理掌握常見串行接口(RS232/RS485/SPI/I2C)的原理及應(yīng)用方法掌握單片機(jī)并行接口的擴(kuò)展方法2/3688.1 通信的有關(guān)概念通信:計算機(jī)的CPU與外部設(shè)備之間,以及計算機(jī)和計算機(jī)之間的信息交換。通信分類:并行通信和串行通信3/368并行通信以字節(jié)(Byte)或字節(jié)的倍數(shù)為傳輸單位一次傳送一個或一個以上字節(jié)的數(shù)據(jù),數(shù)據(jù)的各位同時進(jìn)行傳送適合于外部設(shè)備與微機(jī)之間進(jìn)行近距離、大量和快速的信息交換。計算機(jī)的各個總線傳輸數(shù)據(jù)時就是以并行方式進(jìn)行的。并行通信的特點就是傳輸速度快,但當(dāng)距離較遠(yuǎn)、位數(shù)較多時,通信線
2、路復(fù)雜且成本高。4/368串行通信通信雙方使用一根或兩根數(shù)據(jù)信號線相連,同一時刻,數(shù)據(jù)在一根數(shù)據(jù)信號線上一位一位地順序傳送,每一位數(shù)據(jù)都占據(jù)一個固定的時間長度。與并行通信相比,串行通信的優(yōu)點是傳輸線少、成本低、適合遠(yuǎn)距離傳送及易于擴(kuò)展。缺點是速度慢、傳輸時間長等。如計算機(jī)上常用的COM設(shè)備、USB設(shè)備和網(wǎng)絡(luò)通信等設(shè)備都采用串行通信。5/368一、串行通信的相關(guān)概念1 、串行通信的分類(1)按照串行數(shù)據(jù)的同步方式分類按照串行數(shù)據(jù)的同步方式,串行通信可以分為同步通信和異步通信兩類6/3681)異步通信在異步通信(Asynchronous Communication)方式中,接收器和發(fā)送器使用各自的
3、時鐘,它們的工作是非同步的。在異步傳送中,每一個字符要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,以字符為單位一個個地發(fā)送和接收。7/368典型的異步通信格式如圖所示。圖8-1 異步通信的格式8/368異步傳送時,每個字符的組成格式首先用一個起始位表示字符的開始;后面緊跟著的是字符的數(shù)據(jù)字,數(shù)據(jù)字通常是7位或8位數(shù)據(jù)(低位在前,高位在后),在數(shù)據(jù)字中可根據(jù)需要加入奇偶校驗位;最后是停止位,其長度可以是一位或兩位。串行傳送的數(shù)據(jù)字加上成幀信號的起始位和停止位就形成了一個串行傳送的幀。起始位用邏輯“0”低電平表示,停止位用邏輯“1”高電平表示。9/368圖a所示為數(shù)據(jù)字為7位的ASCII碼,第8位是
4、奇偶校驗位,加上起始位、停止位,一個字符幀由10位組成。形成幀信號后,字符便一個一個地進(jìn)行傳送。10/368在異步傳送中,字符間隔不固定,在停止位后可以加空閑位,空閑位用高電平表示,用于等待發(fā)送。這樣,接收和發(fā)送可以隨時進(jìn)行,不受時間的限制。圖b為有空閑位的情況。11/368在異步數(shù)據(jù)傳送中,通信雙方必須約定好兩項事宜: 字符格式。包括字符的編碼形式、奇偶校驗以及起始位和停止位的規(guī)定。通信速率。通信速率通常使用比特率來表示。 比特率是數(shù)字信號的傳輸速率,它用單位時間內(nèi)傳輸?shù)亩M(jìn)制代碼的有效位(bit)數(shù)來表示,其單位為每秒比特數(shù)bit/s(bps)、每秒千比特數(shù)(Kbps)或每秒兆比特數(shù)(Mb
5、ps)來表示。 12/368波特率與比特率波特率指數(shù)據(jù)信號對載波的調(diào)制速率,它用單位時間內(nèi)載波調(diào)制狀態(tài)改變次數(shù)來表示,其單位為波特(Baud)。波特率與比特率的關(guān)系是比特率=波特率單個調(diào)制狀態(tài)對應(yīng)的二進(jìn)制位數(shù)。在信息傳輸通道中,攜帶數(shù)據(jù)信息的信號單元叫碼元,每秒鐘通過信道傳輸?shù)拇a元數(shù)稱為碼元傳輸速率,簡稱波特率。波特率是傳輸通道頻寬的指標(biāo)。13/368例如,數(shù)據(jù)傳送速率為120字符/秒(這個速率可以稱為波特率),而每一個字符為10位,則其傳送的比特率為10120=1200位/秒=1200比特。在后面的描述中,為了適應(yīng)習(xí)慣用法,將比特率和波特率統(tǒng)一使用波特率來表示。14/3682)同步通信同步通
6、信(Synchronous Communication)是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。這里的信息幀和異步通信中的字符幀不同,通常含有若干個數(shù)據(jù)字符。根據(jù)控制規(guī)程,數(shù)據(jù)格式分為面向字符及面向比特兩種。15/368面向字符型的數(shù)據(jù)格式面向字符型的同步通信數(shù)據(jù)格式可采用單同步、雙同步和外同步三種數(shù)據(jù)格式,如圖所示。圖8-2 面向字符型同步通信數(shù)據(jù)格式16/368單同步、雙同步單同步和雙同步均由同步字符、數(shù)據(jù)字符和校驗字符CRC等三部分組成。單同步是指在傳送數(shù)據(jù)之前先傳送一個同步字符“SYNC”,雙同步則先傳送兩個同步字符“SYNC”。17/368外同步外同步通信的數(shù)據(jù)格式
7、中沒有同步字符,而是用一條專用控制線來傳送同步字符,使接收端及發(fā)送端實現(xiàn)同步。當(dāng)每一幀信息結(jié)束時均用兩個字節(jié)的循環(huán)控制碼CRC為結(jié)束。18/368面向比特型的數(shù)據(jù)格式根據(jù)同步數(shù)據(jù)鏈路控制規(guī)程(SDLC),面向比特型的數(shù)據(jù)每幀由六個部分組成。第一部分是開始標(biāo)志“7EH”;第二部分是一個字節(jié)的地址場;第三部分是一個字節(jié)的控制場;第四部分是需要傳送的數(shù)據(jù),數(shù)據(jù)都是位(bit)的集合;第五部分是兩個字節(jié)的循環(huán)控制瑪CRC;最后部分又是“7EH”,作為結(jié)束標(biāo)志。19/368面向比特型的數(shù)據(jù)格式如圖所示。注意:在SDLC規(guī)程中不允許在數(shù)據(jù)段和CRC段中出現(xiàn)六個“1”,否則會誤認(rèn)為是結(jié)束標(biāo)志。要求在發(fā)送端進(jìn)
8、行檢驗,當(dāng)連續(xù)出現(xiàn)五個 “1”時,則立即插入一個“0”,到接收端要將這個插入的“0”去掉,恢復(fù)原來的數(shù)據(jù),保證通信的正常進(jìn)行。 圖8-3 面向比特型同步通信數(shù)據(jù)格式20/368同步通信優(yōu)缺點數(shù)據(jù)傳輸速率較高,通??蛇_(dá)56000bps或更高,適用于傳送信息量大、傳送速率高的系統(tǒng)中,缺點是要求發(fā)送時鐘和接收時鐘保持嚴(yán)格同步,故發(fā)送時鐘除應(yīng)和發(fā)送波特率保持一致外,還要求把它同時傳送到接收端去。21/368(2)按照數(shù)據(jù)的傳送方向分類按照數(shù)據(jù)傳送方向,串行通信可分為單工、半雙工和全雙工三種方式。22/368圖a為單工通信方式(Simplex)。A為發(fā)送站,B為接收站,數(shù)據(jù)只能能由A發(fā)至B,而不能由B傳
9、送到A。 單工通信類似無線電廣播,電臺發(fā)送信號,收音機(jī)接收信號,收音機(jī)永遠(yuǎn)不能發(fā)送信號。 23/368圖b為半雙工通信方式(Half Duplex)。數(shù)據(jù)可以從A發(fā)送到B,也可以由B發(fā)送到A。不過,由于使用一根線連接,發(fā)送和接收不可能同時進(jìn)行,同一時間只能作一個方向的傳送,其傳送方向由收發(fā)控制開關(guān)K來控制。 半雙工通信方式類似對講機(jī),某時刻A發(fā)送B接收,另一時刻B發(fā)送A接收,雙方不能同時進(jìn)行發(fā)送和接收。 24/368圖c為全雙工通信方式(Full Duplex)。在這種方式中,分別用2根獨立的傳輸線來連接發(fā)送方和接收方,A、B既可同時發(fā)送,又可同時接收。 全雙工通信工方式類似電話機(jī),雙方可以同
10、時進(jìn)行數(shù)據(jù)的發(fā)送和接收。25/368圖所示為主從多終端通信方式。A可以向多個終端(B、C、D)發(fā)出信息。在A允許的條件下,可以控制管理B、C、D等在不同的時間向A發(fā)出信息。 根據(jù)數(shù)據(jù)傳送的方向又分為多終端半雙工通信和多終端全雙工通信。26/3682、串行接口作用:串行通信中的數(shù)據(jù)是一位一位依次傳送的,而計算機(jī)中數(shù)據(jù)是并行傳送的。因此,發(fā)送端必須把并行數(shù)據(jù)變成串行才能傳送,接收端接收到的串行數(shù)據(jù)又需要變換成并行數(shù)據(jù)才可以送給計算機(jī)。上述并串或串并的轉(zhuǎn)換既可以用軟件實現(xiàn),也可用硬件實現(xiàn)。由于用軟件實現(xiàn)會使CPU的負(fù)擔(dān)增加,目前往往用硬件(串行接口)完成這種轉(zhuǎn)換。27/368串行接口通過系統(tǒng)總線和C
11、PU相連,如圖所示。圖8-6 CPU與串行接口的連接28/368串行接口主要由4部分組成數(shù)據(jù)輸入寄存器。在輸入過程中,串行數(shù)據(jù)一位一位地從傳輸線進(jìn)入串行接口的接收移位寄存器,經(jīng)過串入并出電路的轉(zhuǎn)換,當(dāng)接收完一個字符之后,數(shù)據(jù)就從接收移位寄存器傳送到數(shù)據(jù)輸入緩沖器,等待CPU讀取。數(shù)據(jù)輸出寄存器。當(dāng)CPU輸出數(shù)據(jù)時,先送到數(shù)據(jù)輸出緩沖器,然后,數(shù)據(jù)由輸出寄存器傳到發(fā)送移位寄存器,經(jīng)過并入串出電路轉(zhuǎn)換一位一位地通過輸出傳輸線送到外設(shè)。29/368串行接口主要由4部分組成狀態(tài)寄存器。狀態(tài)寄存器用來存放外設(shè)運行的狀態(tài)信息,CPU通過訪問這個寄存器來了解某個外設(shè)的狀態(tài),進(jìn)而控制外設(shè)的工作,以便與外設(shè)進(jìn)行
12、數(shù)據(jù)交換??刂萍拇嫫?。串行接口中有一個控制寄存器,CPU對外設(shè)設(shè)置的工作方式命令、操作命令都存放在控制寄存器中,通過控制寄存器控制外設(shè)運行。30/368串行接口基本工作原理串行發(fā)送時,CPU通過數(shù)據(jù)總線把8位并行數(shù)據(jù)送到數(shù)據(jù)輸出寄存器,然后送給并行輸入/串行輸出移位寄存器,并在發(fā)送時鐘和發(fā)送控制電路控制下通過串行數(shù)據(jù)輸出端一位一位串行發(fā)送出去。起始位和停止位是由串行接口在發(fā)送時自動添加上去的。串行接口發(fā)送完一幀后產(chǎn)生中斷請求,CPU響應(yīng)后可以把下一個字符送到發(fā)送數(shù)據(jù)緩沖器。31/368串行接口基本工作原理串行接收時,串行接口監(jiān)視串行數(shù)據(jù)輸入端,并在檢測到有一個低電平(起始位)時就開始一個新的字
13、符接收過程。串行接口每接收到一位二進(jìn)制數(shù)據(jù)位后就使接收移位寄存器(即串行輸入并行輸出寄存器)左移一次,連續(xù)接收到一個字符后將其并行傳送到數(shù)據(jù)輸入寄存器,并產(chǎn)生中斷促使CPU從中取走所接收的字符。32/368常見的串行接口芯片稱為通用異步接收器/發(fā)送器UART(Universal Asynchronous Receiver/Transmitter),其內(nèi)部結(jié)構(gòu)如圖所示。圖8-7 硬件UART的結(jié)構(gòu)33/368UART中3種出錯標(biāo)志:奇偶錯誤(Parity error)。為了檢測傳送中可能發(fā)生的錯誤,UART在發(fā)送時會檢查每個要傳送的字符中的“1”的個數(shù),自動在奇偶校驗位上添加“1”或“0”,使得
14、“1”的總和(包括奇偶校驗位)在偶校驗時為偶數(shù),奇校驗時為奇數(shù)。UART在接收時會檢查字符中的每一位(包括奇偶校驗位),計算其“1”的總和是否符合奇偶檢驗的要求,以確定是否發(fā)生傳送錯誤。34/368UART中3種出錯標(biāo)志:幀錯誤(Frame error),表示字符格式不符合規(guī)定。雖然接收端和發(fā)送端的時鐘沒有直接的聯(lián)系,但是因為接收端總是在每個字符的起始位處進(jìn)行一次重新定位,因此,必須要保證每次采樣都對應(yīng)一個數(shù)據(jù)位。如果接收時鐘和發(fā)送時鐘的頻率相差太大,引起在起始位之后剛采樣幾次就造成錯位時,會出現(xiàn)采樣造成的接收錯誤。如果遇到這種情況,就會出現(xiàn)停止位(按規(guī)定應(yīng)為高電平)為低電平(此情況下,未必每
15、個停止位都是低電平),從而引起信息幀格式錯誤,幀錯誤標(biāo)志FE置位。35/368UART中3種出錯標(biāo)志:溢出(丟失)錯誤(Overrun error)。UART是一種雙緩沖器結(jié)構(gòu)。UART接收端在接收到第一個字符后便放入接收數(shù)據(jù)緩沖器,然后就繼續(xù)從RXD線上接收第二個字符,并等待CPU從接收數(shù)據(jù)緩沖器中取走第一個字符。如果CPU很忙,一直沒有機(jī)會取走第一個字符,以致接收到的第二字符進(jìn)入接收數(shù)據(jù)緩沖器而造成第一個字符被丟失,于是產(chǎn)生了溢出錯誤,UART自動使溢出錯誤標(biāo)志OE置位。36/368二、并行通信中的相關(guān)概念1、并行接口定義:實現(xiàn)并行通信的接口電路分類:輸入并行接口、輸出并行接口和輸入/輸出
16、并行接口。并行通信以同步方式傳輸,其特點是:傳輸速度快;硬件開銷大;適合近距離傳輸。37/368并行接口傳輸信息狀態(tài)信息。狀態(tài)信息表示外設(shè)當(dāng)前所處的工作狀態(tài)。例如,準(zhǔn)備好信號“READY”=1表示輸入接口已經(jīng)準(zhǔn)備好,可以和CPU交換數(shù)據(jù);忙信號“BUSY”=1表示接口正在傳輸信息,CPU需要等待??刂菩畔?。控制信息是由CPU發(fā)出的,用于控制外設(shè)接口的工作方式以及外設(shè)的啟動和復(fù)位等。數(shù)據(jù)信息。CPU與并行接口交換的主要內(nèi)容。38/368一個典型的并行接口與CPU、外設(shè)連接圖如圖所示。圖8-8 典型并行接口電路圖39/3682、并行接口電路組成輸入緩沖寄存器。輸入數(shù)據(jù)緩沖器主要功能是負(fù)責(zé)接收設(shè)備送
17、來的數(shù)據(jù),CPU通過讀操作指令I(lǐng)N執(zhí)行讀操作,從輸入數(shù)據(jù)緩沖器讀取數(shù)據(jù)。輸出緩沖寄存器。輸出數(shù)據(jù)緩沖器主要功能是負(fù)責(zé)接收CPU送來的數(shù)據(jù),如果設(shè)備處于空閑狀態(tài),則從輸出數(shù)據(jù)緩沖器取走數(shù)據(jù),接口通知CPU進(jìn)行下一次輸出操作。40/3682、并行接口電路組成狀態(tài)寄存器。狀態(tài)寄存器用來存放外設(shè)運行狀態(tài)信息,CPU通過訪問狀態(tài)寄存器來了解外設(shè)狀態(tài),進(jìn)而控制外設(shè)的工作??刂萍拇嫫?。并行接口中有一個控制寄存器,CPU對外設(shè)設(shè)置的工作方式命令、操作命令都存放在控制寄存器中,通過控制寄存器控制外設(shè)的運行。數(shù)據(jù)信息。CPU與并行接口交換的主要內(nèi)容。41/3683、并行通信接口的基本輸入/輸出工作過程(1)輸入過
18、程外設(shè)首先將并行傳輸?shù)臄?shù)據(jù)放到外設(shè)與接口之間的數(shù)據(jù)總線上,并使“數(shù)據(jù)輸入準(zhǔn)備好”狀態(tài)選通信號有效,該選通信號使數(shù)據(jù)輸入到接口的輸入數(shù)據(jù)緩沖器內(nèi)。當(dāng)數(shù)據(jù)寫入輸入數(shù)據(jù)緩沖器后,接口使“數(shù)據(jù)輸入應(yīng)答”信號有效,作為對外設(shè)輸入的響應(yīng)。外設(shè)收到此信號后,便撤銷輸入數(shù)據(jù)和“數(shù)據(jù)輸入準(zhǔn)備好”信號。42/368數(shù)據(jù)到達(dá)接口后,接口在狀態(tài)寄存器中設(shè)置“輸入準(zhǔn)備好”狀態(tài)位,以便CPU進(jìn)行查詢;接口也可以在此時向CPU發(fā)送中斷請求,表示數(shù)據(jù)已輸入到接口。CPU既可以用查詢程序方式,也可以用程序中斷方式來讀取接口中的數(shù)據(jù)。CPU從輸入緩沖器中讀取數(shù)據(jù)后,接口自動清除狀態(tài)寄存器中“輸入準(zhǔn)備好”狀態(tài)位,并使數(shù)據(jù)總線處于高
19、阻狀態(tài)。至此,一個數(shù)據(jù)的傳送結(jié)束。43/368(2)輸出過程當(dāng)外設(shè)從接口取走數(shù)據(jù)后,接口就會將狀態(tài)寄存器中“輸出準(zhǔn)備好”狀態(tài)位置1,表示CPU當(dāng)前可以向接口輸出數(shù)據(jù),這個狀態(tài)位可供CPU進(jìn)行查詢。接口此時也可以向CPU發(fā)中斷請求。CPU既可以用查詢程序方式,也可以用程序中斷方式向接口輸出數(shù)據(jù)。當(dāng)CPU將數(shù)據(jù)送到輸出緩沖器后,接口自動清除“輸出準(zhǔn)備好”狀態(tài)位,并將數(shù)據(jù)送往外設(shè)的數(shù)據(jù)線上,同時,接口將給外設(shè)發(fā)送“啟動信號”來啟動外設(shè)接收數(shù)據(jù)。44/368外設(shè)被啟動后,開始接收數(shù)據(jù),并向接口發(fā)“數(shù)據(jù)輸出應(yīng)答”信號。接口收到此信號,便將狀態(tài)寄存器中的“輸出準(zhǔn)備好”狀態(tài)位置1,以便CPU輸出下一個數(shù)據(jù)。
20、45/3688.2 串行接口一、單片機(jī)的串行接口 STC15F2K60S2單片機(jī)具有2個采用UART工作方式的全雙工串行通信接口(串口1和串口2)。 每個串口由2個數(shù)據(jù)緩沖器、1個移位寄存器、1個串行控制寄存器和一個波特率發(fā)生器等組成。46/368每個串口的數(shù)據(jù)緩沖器由串行接收緩沖器和發(fā)送緩沖器構(gòu)成,它們在物理上是獨立的,既可以接收數(shù)據(jù)也可以發(fā)送數(shù)據(jù),還可以同時發(fā)送和接收數(shù)據(jù)。接收緩沖器只能讀出,不能寫入,而發(fā)送緩沖器則只能寫入,不能讀出。它們共用一個地址號。串口1的接收緩沖器和發(fā)送緩沖器共用一個地址號(99H);串口2的接收緩沖器和發(fā)送緩沖器共用一個地址號(9BH)。 47/368STC15
21、F2K60S2的串行口既可以用于串行異步通信,也可以構(gòu)成同步移位寄存器。如果在串行口的輸入/輸出引腳上加上電平轉(zhuǎn)換器,可以方便地構(gòu)成標(biāo)準(zhǔn)的RS-232接口。STC15F2K60S2單片機(jī)的串行口有4種工作方式,有的工作方式的波特率是可變的。用戶用軟件編程的方法在串行控制寄存器中寫入相應(yīng)的控制字節(jié),即可改變串行口的波特率和工作方式。48/3681、串行接口的寄存器與串行接口1相關(guān)的寄存器有:CON、PCON、AUXR、SBUF、TMOD、TL1、TH1、TCON、IE、IP、CLK_DIV、P_SW2、SADEN和SADDR。與串行接口2相關(guān)的寄存器有:S2CON、S2BUF、T2H、T2L、A
22、UXR、IE2、IP2和AUXR1。49/368(1)串口1控制寄存器SCONSCON(地址為98H,復(fù)位值為00H)用于確定串口1的操作方式和控制串口1的某些功能,也可用于發(fā)送和接收第9個數(shù)據(jù)位(TB8、RB8),并設(shè)有接收和發(fā)送中斷標(biāo)志(RI及TI)位。SCON各位的定義如下 :位號D7D 6D 5D 4D 3D 2D 1D 0位名稱SM0/FESM1SM2RENTB8RB8TIRI50/368位號D7D 6D 5D 4D 3D 2D 1D 0位名稱SM0/FESM1SM2RENTB8RB8TIRI1)SM0/FE: PCON寄存器中的SMOD0=1時,該位用于幀錯誤檢測,當(dāng)檢測到一個無效
23、停止位時,F(xiàn)E置1。它必須由軟件清零。 PCON寄存器中的SMOD0=0時, SM0/FE位和SM1一起指定串行通信的工作方式。(如下表) 表中SYSclk為振蕩器頻率51/368表8-1 串行通信的工作方式52/3682)SM2:多機(jī)通信控制位。 多機(jī)通信時單片機(jī)工作于方式2或方式3。SM2位是進(jìn)行主從多機(jī)通信的控制位。 當(dāng)進(jìn)行主從式通信時,開始各個從機(jī)都應(yīng)置SM2=1。主機(jī)發(fā)出的第一幀信息是地址幀信息(數(shù)據(jù)幀的第9數(shù)據(jù)位為1),此時各個從機(jī)接收到地址幀信息后都能產(chǎn)生中斷,并進(jìn)入各自的中斷服務(wù)程序。位號D7D 6D 5D 4D 3D 2D 1D 0位名稱SM0/FESM1SM2RENTB8R
24、B8TIRI53/368只有被尋址的從機(jī)(地址與從主機(jī)發(fā)出的地址號相符)在中斷服務(wù)程序中使SM2=0,為從機(jī)接收主機(jī)發(fā)出的數(shù)據(jù)幀信息(第9數(shù)據(jù)位為0)作準(zhǔn)備。而其他從機(jī)仍然維持SM2=1,對主機(jī)以后發(fā)出的數(shù)據(jù)幀信息,將不會產(chǎn)生中斷申請,從而不會接收后續(xù)的數(shù)據(jù)幀信息。在方式1時,如SM2=1,則只有在接收到有效停止位時才能激發(fā)中斷標(biāo)志(RI=1),如沒有接收到有效停止位,則RI仍然為0。如果使用方式0,則SM2應(yīng)為0。54/3683)REN:允許接收控制位。 1:允許串行口接收數(shù)據(jù); 0:禁止串行口接收數(shù)據(jù)。位號D7D 6D 5D 4D 3D 2D 1D 0位名稱SM0/FESM1SM2RENT
25、B8RB8TIRI55/368 4)TB8 在方式2和3時,它是要發(fā)送的第9個數(shù)據(jù)位,按需要由軟件進(jìn)行置位或清零。 該位可用作數(shù)據(jù)的奇偶校驗位,或在多機(jī)通信中用作地址幀/數(shù)據(jù)幀的標(biāo)志位。位號D7D 6D 5D 4D 3D 2D 1D 0位名稱SM0/FESM1SM2RENTB8RB8TIRI 5)RB8 在方式2和3時,它是接收到的第9位數(shù)據(jù),作為奇偶檢驗位或地址幀/數(shù)據(jù)幀標(biāo)志位。 在方式1時,若SM2=0,則RB8是接收到的停止位。在方式0時,不使用RB8。56/368 6)TI:發(fā)送中斷標(biāo)志位。 在方式0時,當(dāng)串行發(fā)送數(shù)據(jù)字第8位結(jié)束時由內(nèi)部硬件置位,向CPU申請發(fā)送中斷。CPU響應(yīng)中斷后
26、,必須用軟件清零。 在其他方式時,在停止位開始發(fā)送時由硬件置位。同樣,必須用軟件清零。位號D7D 6D 5D 4D 3D 2D 1D 0位名稱SM0/FESM1SM2RENTB8RB8TIRI57/368 7)RI:接收中斷標(biāo)志位。 在方式0時,當(dāng)串行接收到第8位結(jié)束時由內(nèi)部硬件置位。 在其他方式時,RI在接收到停止位的中間時刻由硬件置位(例外情況見SM2說明)。RI也必須用軟件清0。位號D7D 6D 5D 4D 3D 2D 1D 0位名稱SM0/FESM1SM2RENTB8RB8TIRI58/368TI與RI使用時需注意當(dāng)一幀數(shù)據(jù)發(fā)送完成時,發(fā)送中斷標(biāo)志TI被置位,接著發(fā)生串口中斷,進(jìn)入串口
27、中斷服務(wù)程序。但CPU事先并不能分辨是TI還是RI的中斷請求,因此,必須在中斷服務(wù)程序中用位測試指令加以判別。兩個中斷標(biāo)志位TI及RI均不能自動復(fù)位,必須在中斷服務(wù)程序中使用清中斷標(biāo)志位指令,撤銷中斷請求狀態(tài),否則原先的中斷標(biāo)志位狀態(tài)又將表示有中斷請求。59/368(2)串口2控制寄存器S2CON寄存器S2CON(地址為9AH,復(fù)位值為00H)用于確定串口2的操作方式和控制串口2的某些功能,也可用于發(fā)送和接收第9個數(shù)據(jù)位(S2TB8、S2RB8),并設(shè)有接收和發(fā)送中斷標(biāo)志(S2RI及S2TI)位。S2CON各位的定義如下:位號D7D 6D 5D 4D 3D 2D 1D 0位名稱S2SM00S2
28、SM2S2RENS2TB8S2RB8S2TIS2RI60/368其中,S2SM0用于指定串口2的工作方式,如表所示當(dāng)T2x12=1時,定時器2的溢出率= SYSclk / ( 65536 - RL_TH2,RL_TL2)當(dāng)T2x12=0時,定時器2的溢出率= SYSclk / 12 / ( 65536 - RL_ TH2,RL_TL2)式中RL_TH2是T2H的重裝載寄存器,RL_TL2是T2L的重裝載寄存器。S2SM0工作方式功能說明波特率0方式08位UART,波特率可變(定時器2的溢出率)/41方式19位UART,波特率可變(定時器2的溢出率)/461/368(3)掉電控制寄存器PCONP
29、CON(地址為87H,復(fù)位值為30H)中的SMOD用于設(shè)置方式1、方式2和方式3的波特率是否加倍。各位的定義如下:位號D7D6D5D4D3D2D1D0位名稱SMODSMOD0LVDFPOFGF1GF0PDIDL62/368SMOD:串行口波特率系數(shù)控制位。復(fù)位時,SMOD=0。 1:使方式1、方式2和方式3的波特率加倍。 0:各工作方式的波特率不加倍。位號D7D6D5D4D3D2D1D0位名稱SMODSMOD0LVDFPOFGF1GF0PDIDL63/368SMOD0:幀錯誤檢測有效控制。復(fù)位時,SMOD0=0。 1:SCON寄存器中的SM0/FE位用于FE(幀錯誤檢測)功能。 0:SCON寄
30、存器中的SM0/FE位用于SM0功能,和SM1一起指定串行通信的工作方式。位號D7D6D5D4D3D2D1D0位名稱SMODSMOD0LVDFPOFGF1GF0PDIDL64/368(4)輔助寄存器AUXR輔助寄存器AUXR(地址為8EH,復(fù)位值為00H)各位的定義如下:位號D7D6D5D4D3D2D1D0位名稱T0 x12T1x12UART_M0 x6BRTRT2_C/ BRTx12EXTRAMS1BRS65/368 1)UART_M0 x6:串行口模式0的通信速度設(shè)置位。 0:UART串口模式0的速度是傳統(tǒng)12T的8051速度,12分頻。 1:UART串口模式0的速度是傳統(tǒng)12T的8051
31、的6倍,2分頻。位號D7D6D5D4D3D2D1D0位名稱T0 x12T1x12UART_M0 x6BRTRT2_C/BRTx12EXTRAMS1BRS66/3682)S1BRS:串口1波特率發(fā)生器選擇位。 0:選擇定時器1作為串口1波特率發(fā)生器。 1:選擇定時器2作為串口1波特率發(fā)生器。位號D7D6D5D4D3D2D1D0位名稱T0 x12T1x12UART_M0 x6BRTRT2_C/BRTx12EXTRAMS1BRS67/368注意:對于具有串口2的STC15F2K60S2單片機(jī),串口2只能使用獨立波特率發(fā)生器作為波特率發(fā)生器,不能夠選擇定時器1作為波特率發(fā)生器;串口1可以選擇定時器1作
32、為波特率發(fā)生器,也可以選擇獨立波特率發(fā)生器作為波特率發(fā)生器。68/368(5)定時器2寄存器定時器2時間常數(shù)寄存器T2H和T2L(地址分別為0D6H和0D7H,復(fù)位值為00H)用于保存重裝時間常數(shù),從而作為波特率發(fā)生器使用??梢耘浜陷o助寄存器AUXR中的T2R、T2_C/和T2x12位進(jìn)行時間常數(shù)的確定。 69/368(6)從機(jī)地址控制寄存器為了方便多機(jī)通信,STC15F2K60S2單片機(jī)設(shè)置了從機(jī)地址控制寄存器SADEN和SADDR。SADEN是從機(jī)地址掩模寄存器(地址為B9H,復(fù)位值為00H),SADDR是從機(jī)地址寄存器(地址為A9H,復(fù)位值為00H)。70/368主機(jī)可以用從機(jī)地址來選擇
33、性的訪問從機(jī)。可以用廣播的方式來尋址所有的從機(jī)。從機(jī)的地址由SADDR和SADEN寄存器定義,從機(jī)地址是由SADDR設(shè)定的8位數(shù)據(jù),如果SADEN中相應(yīng)的位置0,則SADDR中對應(yīng)的位無效。只有當(dāng)SADEN中的相應(yīng)位為1,SADDR中的數(shù)據(jù)才有效。也就是說,SADEN寄存器使能串口的自動地址識別功能,當(dāng)SADEN中的某位被置為1,那么SADDR寄存器中的相應(yīng)位會與接收到的數(shù)據(jù)進(jìn)行比較。如果SADEN.n被設(shè)為0,那么系統(tǒng)會忽略對該位的比較。如果SADEN為全0,那么對于所有的地址幀系統(tǒng)都會產(chǎn)生中斷。71/368(7)數(shù)據(jù)緩沖器數(shù)據(jù)緩沖器用于保存要發(fā)送的數(shù)據(jù)或者從串口接收到的數(shù)據(jù)。串口1的數(shù)據(jù)緩
34、沖器是SBUF,串口2的數(shù)據(jù)緩沖器是S2BUF。對于串口1,當(dāng)一個字符接收完畢,移位寄存器中的數(shù)據(jù)字節(jié)裝入串行接收數(shù)據(jù)緩沖器SBUF中,其第9位則裝入SCON寄存器的RB8位。如果SM2使得已接收的數(shù)據(jù)無效,則RB8位和SBUF緩沖器中的內(nèi)容不變。72/368對于串口2,當(dāng)一個字符接收完畢,移位寄存器中的數(shù)據(jù)字節(jié)裝入串行接收數(shù)據(jù)緩沖器S2BUF中,其第9位則裝入S2CON寄存器的S2RB8位。如果S2SM2使得已接收的數(shù)據(jù)無效,則S2RB8位和S2BUF緩沖器中的內(nèi)容不變。無論對于串口1還是串口2,發(fā)送緩沖器只能寫入,不能讀出;接收緩沖器只能讀出,不能寫入。因此,串口1的兩個緩沖器共用一個地址
35、號(99H),串口2的兩個緩沖器共用一個地址號(9BH)。73/368(8)串口1的中繼廣播方式設(shè)置CLK_DIV寄存器中的Tx_Rx位用于串口1的中繼廣播方式設(shè)置。0:串口1為正常工作方式1:串口1為中繼廣播方式,即將RxD端口輸入的電平狀態(tài)實時輸出在TxD外部管腳上。74/3682、串行接口的工作方式STC15F2K60S2單片機(jī)的串行口1有4種工作方式,通過設(shè)置SCON寄存器的SM0和SM1進(jìn)行選擇 ?,F(xiàn)分別加以介紹。方式0:移位寄存器方式方式1:8位可變波特率方式方式2:9位固定波特率方式方式3:9位可變波特率方式75/368(1)方式0:移位寄存器方式方式0為半雙工方式,又稱為同步移
36、位寄存器輸出方式。在這種方式下,TXD引腳輸出同步移位時鐘,RXD用于發(fā)送和接收串行數(shù)據(jù)。串行口輸出端可直接與移位寄存器相連,也可用作擴(kuò)展I/O口或外接同步輸入輸出設(shè)備。該方式下的數(shù)據(jù)幀為8位,低位在先,高位在后,沒有起始位和停止位。76/368發(fā)送過程當(dāng)CPU將數(shù)據(jù)寫入到發(fā)送緩沖區(qū)SBUF時,串行口即把8位二進(jìn)制數(shù)以SYSclk/12或SYSclk/2(由UART_M0 x6確定是12分頻還是2分頻)的波特率由RXD引腳輸出(SYSclk為系統(tǒng)工作時鐘),同時由TXD引腳輸出同步移位脈沖。字符發(fā)送完畢,置中斷標(biāo)志TI為1。當(dāng)寫SBUF信號有效后,相隔一個時鐘,發(fā)送控制端有效,允許RxD發(fā)送數(shù)
37、據(jù),同時允許TxD輸出同步移位脈沖。一幀數(shù)據(jù)(8位)發(fā)送完畢時,各控制端均恢復(fù)原狀態(tài),只有TI保持高電平,呈中斷申請狀態(tài)。在再次發(fā)送數(shù)據(jù)前,必須用軟件將TI清0。77/368接收過程控制字除方式0外,還應(yīng)置允許接收控制位REN=1,并清除RI中斷標(biāo)志。接收過程啟動后,RXD為數(shù)據(jù)輸入端,TXD為同步信號輸出端。串行接收的波特率為SYSclk/12或SYSclk/2(由UART_M0 x6確定是12分頻還是2分頻)。接收完8位數(shù)據(jù)后重新置RI=1。當(dāng)再次接收時,必須通過軟件將RI清0。78/368工作于方式0使用時需注意必須使SCON控制字的SM2位為0,從而不影響TB8和RB8位。在該方式下,
38、波特率僅取決于系統(tǒng)時鐘,無需使用定時器控制。以中斷方式傳送數(shù)據(jù)時,CPU響應(yīng)中斷并不會自動清除TI、RI標(biāo)志,在中斷服務(wù)程序中必須由指令清零。如CLR TI及CLR RI。79/368(a)串行口1方式0功能結(jié)構(gòu)圖 80/368(b)串行口1方式0時序圖81/368(1)串口1的UART方式方式1:8位可變波特率方式方式1提供異步全雙工通信,適合于點到點的通信。每個數(shù)據(jù)幀長度為10位:1個起始位(低電平)、8個數(shù)據(jù)位和1個停止位(高電平)。傳輸?shù)臄?shù)據(jù)位首先是起始位,然后是8位數(shù)據(jù)(低位在前),最后一位是停止位。起始位和停止位是在發(fā)送時自動插入的。接收時,停止位進(jìn)入SCON的RB8位。82/36
39、8(a)串行口1方式1功能結(jié)構(gòu)圖 83/368發(fā)送過程發(fā)送數(shù)據(jù)時,數(shù)據(jù)由串行發(fā)送端TxD輸出。當(dāng)單片機(jī)執(zhí)行一條寫SBUF的指令時,就啟動串行通信的發(fā)送,寫SBUF信號還把1裝入發(fā)送移位寄存器的第9位,并通知TX控制器開始發(fā)送。發(fā)送各位的定時時間由16分頻計數(shù)器同步。移位寄存器將數(shù)據(jù)不斷右移送TxD端口發(fā)送,在數(shù)據(jù)的左邊不斷移入0作補(bǔ)充。當(dāng)數(shù)據(jù)的最高位移到移位寄存器的輸出位置,緊跟其后的是第9位“1”,在它的左邊各位全為“0”,這個狀態(tài)條件,使TX控制器作最后一次移位輸出,然后使允許發(fā)送信號“SEND”失效,完成一幀信息的發(fā)送,并置位中斷請求位TI,即TI=1,向CPU請求中斷處理。84/368
40、接收過程當(dāng)軟件置位接收允許標(biāo)志位REN,即REN=1時,接收器便以選定波特率的16分頻的速率采樣串行接收端口RxD,當(dāng)檢測到RxD端口從10的負(fù)跳變時就啟動接收器準(zhǔn)備接收數(shù)據(jù),并立即復(fù)位16分頻計數(shù)器,將1FFH值裝入移位寄存器。復(fù)位16分頻計數(shù)器的目的是使它與輸入位時間同步。85/36816分頻計數(shù)器的16個狀態(tài)是將每位的接收時間均為16等份,在每位時間的7、8、9狀態(tài)由檢測器對RxD端口進(jìn)行采樣,經(jīng)“三中取二”后的值作為本次所接收的值,即3次采樣至少2次相同的值,以此消除干擾影響,提高可靠性。在起始位,如果接收到的值不為0(低電平),則起始位無效,復(fù)位接收電路,并重新檢測10的跳變。如果接
41、收到的起始位有效,則將它輸入移位寄存器,并接收本幀的其余信息。86/368接收的數(shù)據(jù)從接收移位寄存器的右邊移入,已裝入的1FFH向左邊移出,當(dāng)起始位0移到移位寄存器的最左邊時,使RX控制器作最后一次移位,完成一幀的接收。若同時滿足以下兩個條件:RI=0;SM2=0或接收到的停止位為1。則接收到的數(shù)據(jù)有效,數(shù)據(jù)載入SBUF,停止位進(jìn)入RB8,置位RI,向CPU請求中斷,若上述兩條件不能同時滿足,則接收到的數(shù)據(jù)作廢并丟失,無論條件滿足與否,接收器重新檢測RxD端口上的10的跳變,繼續(xù)下一幀的接收。接收有效,在響應(yīng)中斷后,必須由軟件將RI清0。通常情況下,串行口工作于方式1時,SM2設(shè)置為0。87/
42、368串行通信方式1的波特率是可變的,波特率由定時器1或定時器2的溢出率決定。定時/計數(shù)器的溢出率定義為: 單位時間(秒)內(nèi)定時器/計數(shù)器溢出的次數(shù)串行口1用定時器1作為波特率發(fā)生器且定時器1工作于模式0(16位自動重裝模式)時,波特率=(定時器1的溢出率)/4。 注意:此時波特率與SMOD無關(guān)。88/368當(dāng)定時器1工作于模式0(16位自動重裝模式)且T1x12 = 0時定時器1的溢出率 = SYSclk/12/( 65536 -RL_TH1,RL_TL1);此時,串口1的波特率 = SYSclk/12/( 65536 - RL_TH1,RL_TL1)/489/368當(dāng)串行口1用定時器1作為
43、波特率發(fā)生器且定時器1工作于模式2(8位自動重裝模式)時波特率=(定時器1的溢出率)當(dāng)定時器1工作于模式2(8位自動重裝模式)且T1x12 = 0時定時器1的溢出率= SYSclk/12/( 256 - TH1);此時,串口1的波特率= SYSclk/12/( 256 - TH1)90/368當(dāng)定時器1工作于模式2且T1x12 = 1時 定時器1的溢出率= SYSclk / ( 256 - TH1)此時,串口1的波特率= SYSclk/ ( 256 - TH1) 當(dāng)T2x12=0時定時器2的溢出率=SYSclk/12/(65536- RL_TH2,RL_TL2 )此時,串口1的波特率= SYS
44、clk/12/( 65536 - RL_TH2,RL_TL2)/4當(dāng)T2x12 = 1時,定時器2的溢出率=SYSclk/(65536- RL_TH2,RL_TL2 )。此時,串口1的波特率= SYSclk/ ( 65536 - RL_TH2,RL_TL2)/4。其中,RL_TH2是TH2的自動重裝寄存器,RL_TL2是TL2的自動重裝寄存器。91/368定時器1工作于模式0(16位自動重裝模式)且T1x12 = 1時定時器1的溢出率 = SYSclk / (65536 - RL_TH1,RL_TL1)。此時,串口1的波特率= SYSclk/ ( 65536 - RL_TH1,RL_TL1)/
45、4。其中,RL_TH1是TH1的自動重裝載寄存器,RL_TL1是TL1的自動重裝載寄存器。92/368方式1的發(fā)送、接收工作波形圖如圖所示。(b)串行口1方式1時序圖93/368串口方式2:9位固定波特率方式方式2提供異步全雙工通信,適合于固定波特率的多機(jī)通信。每個數(shù)據(jù)字節(jié)長度為11位:1個起始位、8個數(shù)據(jù)位(低位在前)、1個可編程的第9位(TB8/RB8)和1個停止位。與方式1相比,每幀增加了一個第9位。發(fā)送時,第9位數(shù)據(jù)由TB8確定,可以置位也可以清0。接收時,第9位進(jìn)入RB8位。94/368方式2的波特率為:串行通信方式2波特率= SYSclk為系統(tǒng)工作時鐘頻率PCON寄存器中的SMOD
46、為波特率加倍位當(dāng)SMOD=1時,波特率為SYSclk/32;當(dāng)SMOD=0時,波特率為SYSclk/64。95/368(a)串行通信方式2的功能結(jié)構(gòu)示意圖 96/368(b)串行通信方式2的接收/發(fā)送時序圖97/3682)串口2的工作方式0串行數(shù)據(jù)通過RXD2/P1.2(RXD2/P4.2)接收和發(fā)送,TXD2/P1.3(TXD2/P4.3)輸出同步移位時鐘,發(fā)送接收的是8位數(shù)據(jù),低位在先,波特率固定在Fosc/12。串口2的模式0操作和串口1的模式0操作方式相同。98/368當(dāng)接收器接收完一幀信息后必須同時滿足下列條件:RI=0SM2=0或者SM2=1,并且接收到的第9數(shù)據(jù)位RB8=1當(dāng)上述
47、兩條件同時滿足時,才將接收到的移位寄存器的數(shù)據(jù)裝入SBUF和RB8中,并置位RI,向CPU請求中斷處理。如果上述條件有一個不滿足,則剛接收到移位寄存器中的數(shù)據(jù)無效而丟失,也不置位RI。無論上述條件滿足與否,接收器又重新開始檢測RxD輸入端口的跳變信息,接收下一幀的輸入信息。99/368在方式2中,接收到的停止位與SBUF、RB8和RI無關(guān)。通過軟件對SCON中的SM2、TB8的設(shè)置以及通信協(xié)議的約定,為多機(jī)通信提供了方便。100/368串口方式3:9位可變波特率方式該方式也適合于多機(jī)通信。方式3的每個數(shù)據(jù)字節(jié)長度為11位:1個起始位、8個數(shù)據(jù)位(低位在前)、1個可編程的第9位(TB8/RB8)
48、和1個停止位。發(fā)送時,第9位數(shù)據(jù)由TB8確定,可以置位也可以清0。接收時,第9位數(shù)據(jù)進(jìn)入RB8位。方式3和方式1一樣,其波特率可通過軟件對定時器/計數(shù)器1或定時器2的設(shè)置進(jìn)行波特率的選擇,是可變的。 101/368(a)工作方式3的功能結(jié)構(gòu) 102/368(b)工作方式3的數(shù)據(jù)接收/發(fā)送時序圖103/368發(fā)送過程CPU執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖區(qū)SBUF的指令即可啟動發(fā)送(如MOV SBUF,A)。串行口自動將發(fā)送緩沖區(qū)中的內(nèi)容送入發(fā)送移位寄存器。發(fā)送移位寄存器先發(fā)送一個起始位,接著按程序設(shè)定每個字符的代碼,先低位后高位。數(shù)據(jù)字加上奇偶校驗位或可控位(方式2、3中即為程序設(shè)定的TB8位的值),再發(fā)
49、送停止位,從而完成一幀的發(fā)送。串行數(shù)據(jù)均由TXD端輸出,發(fā)送完畢,將發(fā)送中斷標(biāo)志位TI置1,以供查詢及向CPU申請中斷之用。CPU的響應(yīng)中斷后必須在中斷服務(wù)程序中使TI清0。104/368接收過程接收數(shù)據(jù)由RXD輸入,串行口以所選定波特率的16倍速率采樣RXD端狀態(tài)。當(dāng)RXD端電平由1到0跳變時,就啟動接收器。串行口按程序規(guī)定的格式接收一幀代碼,并把此碼的數(shù)據(jù)位拼成并行碼送入接收緩沖寄存器中(在方式1時,把停止位送入RB8;在方式2、3時,把程控的第9位數(shù)據(jù)送入RB8),等待CPU取走。為保證可靠無誤,對每一數(shù)據(jù)位進(jìn)行連續(xù)3次采樣,取3次采樣中至少兩次相同的值。接收完畢,置接收中斷標(biāo)志RI=1
50、。CPU的響應(yīng)中斷后必須在中斷服務(wù)程序中使RI清0。105/368當(dāng)接收器接收完一幀信息后必須同時滿足下列條件:RI=0SM2=0或者SM2=1,并且接收到的第9數(shù)據(jù)位RB8=1。當(dāng)上述兩條件同時滿足時,才將接收到的移位寄存器的數(shù)據(jù)裝入SBUF和RB8中,并置位RI,向CPU請求中斷處理。如果上述條件有一個不滿足,則剛接收到移位寄存器中的數(shù)據(jù)無效而丟失,也不置位RI。無論上述條件滿足與否,接收器又重新開始檢測RxD輸入端口的跳變信息,接收下一幀的輸入信息。106/368在方式3中,接收到的停止位與SBUF、RB8和RI無關(guān)。通過軟件對SCON中的SM2、TB8的設(shè)置以及通信協(xié)議的約定,為多機(jī)通
51、信提供了方便。107/368幾種常用的典型幀格式。圖8-13 串行通信典型幀格式108/368總結(jié) 在實際應(yīng)用中,應(yīng)根據(jù)實際需要選擇串行口的工作方式。由于方式1和方式3的波特率可以通過定時器1控制,通信波特率的設(shè)定比較靈活,因此,方式1和方式3使用較多,其中,方式1常用于點對點通信的情況;而方式3常用語多機(jī)通信的情況。109/368串行口工作方式一覽表。110/368方式1與方式2、3的區(qū)別方式1中,數(shù)據(jù)字是8位異步通信接口,串行口發(fā)送/接收共10位信息,第0位為起始位,18位是數(shù)據(jù)位,最后是停止位;方式2、3中,數(shù)據(jù)字為9位的異步通信接口,1位起始位,8位數(shù)據(jù)位,第9位是可程控位“1”或“0
52、”,最后是停止位,共有11位信息。方式1、3的波特率是可變的,其波特率取決于定時器1的溢出率或BRT的溢出率和特殊功能寄存器PCON中的SMOD位的值。111/368方式1、3的波特率=2SMOD(定時器1的溢出率或BRT的溢出率)/32方式2的波特率=2SMOD(振蕩器頻率)/64由上述公式可以看出,PCON寄存器中的SMOD是“1”還是“0”決定波特率是否加倍。112/368在方式2和方式3中還可通過控制TB8位的方法,使其傳送中附加的第9位數(shù)據(jù)可以作為多機(jī)通信中的地址/數(shù)據(jù)標(biāo)志位,或作為數(shù)據(jù)的奇偶校驗位。若以TB8位作為奇偶校驗位,在數(shù)據(jù)寫入SBUF之前,先將數(shù)據(jù)的奇偶位寫入TB8。11
53、3/368可以使用下面的代碼實現(xiàn)通信的偶校驗(假設(shè)要發(fā)送的數(shù)據(jù)保存在R2中): MOVA,R2;取數(shù)據(jù)MOVC,PMOVTB8,CMOVSBUF,A ;數(shù)據(jù)寫入到發(fā)送緩沖器,啟動發(fā)送器 114/368 編寫接收程序時,均應(yīng)使REN=1,允許串行接收。只有在最后的移位脈沖產(chǎn)生并同時滿足下列條件時,接收數(shù)據(jù)才會裝入SBUF和RB8并置位RI:對于方式1:SM2=0或接收到的停止位=1對方式2、3:SM2=0或接收到的第九個數(shù)據(jù)=1115/3682)串口2的UART方式方式010位數(shù)據(jù)通過TXD2/P1.0(TXD2/P46)發(fā)送,通過TxD2/P1.1(TxD2_2/P4.7)發(fā)送。一幀數(shù)據(jù)包含一
54、個起始位(0),8個數(shù)據(jù)位和一個停止位(1)。接收時,停止位進(jìn)入特殊功能寄存器S2CON的S2RB8位。波特率由獨立波特率發(fā)生器BRT的溢出率決定。116/368當(dāng)T2工作在1T模式(T2x12=1)時T2的溢出率=SYSclk/(65536-RL_TH2, RL_TL2 );此時,串行口2的波特率=SYSclk / ( 65536 - RL_TH2, RL_TL2) / 4當(dāng)T2工作在12T模式(T2x12=0)時T2的溢出率=SYSclk/12/(65536-RL_TH2, RL_TL2);此時,串行口2的波特率=SYSclk /12/( 65536 - RL_TH2, RL_TL2) /
55、 4其中,RL_TH2是T2H的重裝載寄存器,RL_TL2是T2L的重裝載寄存器。117/368方式111位數(shù)據(jù)通過TxD2/P1.1(TxD2_2/P4.7)發(fā)送,通過RxD2/P1.0(RxD2_2/P4.6)接收。一幀數(shù)據(jù)包含一個起始位(0),8個數(shù)據(jù)位,一個可編程的第9位和一個停止位(1)。發(fā)送時,第9位數(shù)據(jù)由特殊功能寄存器S2CON的S2TB8位確定;接收時,第9位數(shù)據(jù)進(jìn)入特殊功能寄存器S2CON的S2RB8位。波特率的計算方法與方式0相同,在此略。118/3683、多處理機(jī)通信以使用串口1為例,說明多機(jī)通信的過程。串行口控制寄存器SCON中的SM2位為方式2和方式3工作時進(jìn)行多機(jī)通
56、信的控制位。這種多機(jī)通信方式一般為“一臺主機(jī),多臺從機(jī)”系統(tǒng),主機(jī)發(fā)送的信息可被各從機(jī)接收,而從機(jī)只能對主機(jī)發(fā)送信息,從機(jī)間互相不能直接通信。 119/368典型的多機(jī)通信結(jié)構(gòu)圖如圖所示。圖8-14 多機(jī)通信系統(tǒng)示意圖120/368多機(jī)系統(tǒng)設(shè)置需注意多機(jī)系統(tǒng)中,從機(jī)串行口必須在方式2或方式3下工作。應(yīng)使SM2及REN控制位置“1”。從而使從機(jī)先處于只能接收地址幀信息(第9數(shù)據(jù)位為1)的狀態(tài),當(dāng)從機(jī)接收到主機(jī)發(fā)出的地址幀信息后,串行口可向CPU申請中斷。121/368多機(jī)系統(tǒng)通信過程當(dāng)主機(jī)和某一從機(jī)通信時,主機(jī)應(yīng)先發(fā)出一幀包含某從機(jī)地址的信息給各從機(jī)(TB8=1)。當(dāng)各從機(jī)接收到主機(jī)發(fā)出的地址幀
57、信息后,自動將第9數(shù)據(jù)位狀態(tài)“1”送到SCON控制寄存器的RB8位,并將中斷標(biāo)志RI置1,產(chǎn)生中斷。 各CPU響應(yīng)中斷后均進(jìn)入中斷服務(wù)程序,在服務(wù)程序中把主機(jī)送來的地址號與本從機(jī)的地址號相比較。122/368若地址相等,則使本機(jī)的SM2置“0”,為接收主機(jī)接著發(fā)送來的數(shù)據(jù)幀(第9數(shù)據(jù)位為0)作準(zhǔn)備。而地址號不符的其他從機(jī)仍然維持SM2=1的狀態(tài),對主機(jī)以后發(fā)出的數(shù)據(jù)幀信息不予理睬,不產(chǎn)生中斷標(biāo)志RI,直到與主機(jī)發(fā)出的地址信息相符后,才可接收以后的數(shù)據(jù)信息,從而實現(xiàn)了主從一對一通信。主機(jī)在發(fā)送完呼叫地址幀后(TB8=1),接著發(fā)送一連串的數(shù)據(jù)幀(TB8=0)。123/368當(dāng)主機(jī)要和另一個從機(jī)通
58、信時,則再發(fā)呼叫地址幀(TB8=1),呼叫其他從機(jī),原先被尋址的從機(jī)經(jīng)分析得知主機(jī)在呼叫其他從機(jī)時,恢復(fù)其SM2=1,對其后主機(jī)發(fā)送的數(shù)據(jù)幀不予理睬。使用串行口2進(jìn)行多機(jī)通信的方法與此類似,僅把SCON中的SM2、REN、TB8和RB8換成對應(yīng)的S2CON中的S2SM2、S2REN、S2TB8和S2RB8即可。124/3684、波特率的設(shè)定(1)串行口1的波特率設(shè)定方式0的波特率當(dāng)UART_M0 x6=0時,波特率為SYSclk/12;當(dāng)UART_M0 x6=1時,波特率為SYSclk/2。方式2的波特率當(dāng)SMOD=0時,波特率為SYSclk/64;當(dāng)SMOD=1時,為SYSclk/32。方式
59、1和3的波特率 串行口1工作于方式1和3時,波特率是可變的,可以通過編程改變定時器1的溢出率或者定時器2的溢出率來確定波特率。125/368編程時應(yīng)注意當(dāng)定時器作為波特率發(fā)生器使用時,應(yīng)禁止定時器產(chǎn)生中斷(ET1=0或者ET2=0 )。典型用法是定時器1工作在自動再裝入時間常數(shù)的定時方式2。設(shè)置完成后,啟動定時器1(TR1=1或T2R=1 )。STC15F2K60S2單片機(jī)是“一個時鐘周期”的8051單片機(jī),選用定時器1作為波特率發(fā)生器時,應(yīng)注意時鐘分頻的設(shè)置與波特率之間的關(guān)系,1T模式下的波特率時相同條件下12T模式的12倍。126/368總結(jié)波特率的計算方法:串行口1用定時器1作為波特率發(fā)
60、生器時,且定時器1工作于模式0(16位自動重裝模式)作為波特率發(fā)生器時波特率=(定時器1的溢出率)/4= SYSclk/12n/( 65536 - RL_TH1,RL_TL1)/4。其中,12T模式時,T1x12=0,n=1;1T模式時,T1x12=1,n=0(下同)。RL_TH1是TH1的自動重裝載寄存器,RL_TL1是TL1的自動重裝載寄存器。注意:此時波特率與SMOD無關(guān)。127/368當(dāng)串行口1用定時器1作為波特率發(fā)生器且定時器1工作于模式2(8位自動重裝模式)時波特率= (定時器1的溢出率) = SYSclk/12n/( 256 - TH1)128/368定時器2只有一種工作方式,即
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年潮玩品牌運營策略培訓(xùn)
- 2026年水利工程中的智能化監(jiān)測技術(shù)
- 2025年財務(wù)副職競聘筆試題及答案
- 2025年延長石油秋招筆試及答案
- 2025年大學(xué)競選干部筆試題目及答案
- 2025年網(wǎng)易3d角色制作筆試及答案
- 2026新疆中閩(哈密)能源有限公司招聘3人考試備考試題及答案解析
- 2025年永州網(wǎng)人事考試及答案
- 2025年幼教筆試重點歸納知識點及答案
- 2026湖南智谷投資發(fā)展集團(tuán)有限公司招聘補(bǔ)充筆試備考題庫及答案解析
- 2026年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試模擬測試卷必考題
- 2026年中藥材生產(chǎn)質(zhì)量管理規(guī)范理論考試題含答案
- 北京市東城區(qū)2025-2026年高三上期末地理試卷(含答案)
- 鎮(zhèn)海區(qū)國資系統(tǒng)招聘筆試題庫2026
- 2025至2030中國高壓套管行業(yè)調(diào)研及市場前景預(yù)測評估報告
- 2026秋招:國家電投面試題及答案
- 智能機(jī)械與機(jī)器人全套課件
- 《2025年CSCO前列腺癌診療指南》更新要點解讀
- 膿毒癥診斷與治療臨床規(guī)范指南(2025年版)
- 國有企業(yè)財務(wù)管理制度
- 河南省鄭州市第六十二中學(xué)2025-2026學(xué)年九年級上學(xué)期第二次月考語文試題(含答案)
評論
0/150
提交評論