單片機課件數(shù)據(jù)通信_第1頁
單片機課件數(shù)據(jù)通信_第2頁
單片機課件數(shù)據(jù)通信_第3頁
單片機課件數(shù)據(jù)通信_第4頁
單片機課件數(shù)據(jù)通信_第5頁
已閱讀5頁,還剩721頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第八章數(shù)據(jù)通信本章學習目標了解通信的有關概念掌握串行通信的原理及應用掌握常見串行接口(RS232/RS485/SPI/I2C)的原理及應用方法掌握單片機并行接口的擴展方法第八章數(shù)據(jù)通信§8.1通信的有關概念通信:計算機的CPU與外部設備之間,以及計算機和計算機之間的信息交換。通信分類:并行通信和串行通信§8.1通信的有關概念并行通信以字節(jié)(Byte)或字節(jié)的倍數(shù)為傳輸單位一次傳送一個或一個以上字節(jié)的數(shù)據(jù),數(shù)據(jù)的各位同時進行傳送適合于外部設備與微機之間進行近距離、大量和快速的信息交換。計算機的各個總線傳輸數(shù)據(jù)時就是以并行方式進行的。并行通信的特點就是傳輸速度快,但當距離較遠、位數(shù)較多時,通信線路復雜且成本高。并行通信串行通信通信雙方使用一根或兩根數(shù)據(jù)信號線相連,同一時刻,數(shù)據(jù)在一根數(shù)據(jù)信號線上一位一位地順序傳送,每一位數(shù)據(jù)都占據(jù)一個固定的時間長度。與并行通信相比,串行通信的優(yōu)點是傳輸線少、成本低、適合遠距離傳送及易于擴展。缺點是速度慢、傳輸時間長等。如計算機上常用的COM設備、USB設備和網(wǎng)絡通信等設備都采用串行通信。串行通信一、串行通信的相關概念1、串行通信的分類(1)按照串行數(shù)據(jù)的同步方式分類按照串行數(shù)據(jù)的同步方式,串行通信可以分為同步通信和異步通信兩類一、串行通信的相關概念1)異步通信在異步通信(AsynchronousCommunication)方式中,接收器和發(fā)送器使用各自的時鐘,它們的工作是非同步的。在異步傳送中,每一個字符要用起始位和停止位作為字符開始和結束的標志,以字符為單位一個個地發(fā)送和接收。1)異步通信典型的異步通信格式如圖所示。圖8-1異步通信的格式典型的異步通信格式如圖所示。圖8-1異步通信的格式異步傳送時,每個字符的組成格式首先用一個起始位表示字符的開始;后面緊跟著的是字符的數(shù)據(jù)字,數(shù)據(jù)字通常是7位或8位數(shù)據(jù)(低位在前,高位在后),在數(shù)據(jù)字中可根據(jù)需要加入奇偶校驗位;最后是停止位,其長度可以是一位或兩位。串行傳送的數(shù)據(jù)字加上成幀信號的起始位和停止位就形成了一個串行傳送的幀。起始位用邏輯“0”低電平表示,停止位用邏輯“1”高電平表示。異步傳送時,每個字符的組成格式圖a所示為數(shù)據(jù)字為7位的ASCII碼,第8位是奇偶校驗位,加上起始位、停止位,一個字符幀由10位組成。形成幀信號后,字符便一個一個地進行傳送。圖a所示為數(shù)據(jù)字為7位的ASCII碼,第8位是奇偶校驗位,加在異步傳送中,字符間隔不固定,在停止位后可以加空閑位,空閑位用高電平表示,用于等待發(fā)送。這樣,接收和發(fā)送可以隨時進行,不受時間的限制。圖b為有空閑位的情況。在異步傳送中,字符間隔不固定,在停止位后可以加空閑位,空閑位在異步數(shù)據(jù)傳送中,通信雙方必須約定好兩項事宜:字符格式。包括字符的編碼形式、奇偶校驗以及起始位和停止位的規(guī)定。通信速率。通信速率通常使用比特率來表示。比特率是數(shù)字信號的傳輸速率,它用單位時間內(nèi)傳輸?shù)亩M制代碼的有效位(bit)數(shù)來表示,其單位為每秒比特數(shù)bit/s(bps)、每秒千比特數(shù)(Kbps)或每秒兆比特數(shù)(Mbps)來表示。在異步數(shù)據(jù)傳送中,通信雙方必須約定好兩項事宜:波特率與比特率波特率指數(shù)據(jù)信號對載波的調(diào)制速率,它用單位時間內(nèi)載波調(diào)制狀態(tài)改變次數(shù)來表示,其單位為波特(Baud)。波特率與比特率的關系是比特率=波特率×單個調(diào)制狀態(tài)對應的二進制位數(shù)。在信息傳輸通道中,攜帶數(shù)據(jù)信息的信號單元叫碼元,每秒鐘通過信道傳輸?shù)拇a元數(shù)稱為碼元傳輸速率,簡稱波特率。波特率是傳輸通道頻寬的指標。波特率與比特率例如,數(shù)據(jù)傳送速率為120字符/秒(這個速率可以稱為波特率),而每一個字符為10位,則其傳送的比特率為10×120=1200位/秒=1200比特。在后面的描述中,為了適應習慣用法,將比特率和波特率統(tǒng)一使用波特率來表示。例如,數(shù)據(jù)傳送速率為120字符/秒(這個速率可以稱為波特率)2)同步通信同步通信(SynchronousCommunication)是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。這里的信息幀和異步通信中的字符幀不同,通常含有若干個數(shù)據(jù)字符。根據(jù)控制規(guī)程,數(shù)據(jù)格式分為面向字符及面向比特兩種。2)同步通信①面向字符型的數(shù)據(jù)格式面向字符型的同步通信數(shù)據(jù)格式可采用單同步、雙同步和外同步三種數(shù)據(jù)格式,如圖所示。圖8-2面向字符型同步通信數(shù)據(jù)格式①面向字符型的數(shù)據(jù)格式圖8-2面向字符型同步通信數(shù)據(jù)格單同步、雙同步單同步和雙同步均由同步字符、數(shù)據(jù)字符和校驗字符CRC等三部分組成。單同步是指在傳送數(shù)據(jù)之前先傳送一個同步字符“SYNC”,雙同步則先傳送兩個同步字符“SYNC”。單同步、雙同步外同步外同步通信的數(shù)據(jù)格式中沒有同步字符,而是用一條專用控制線來傳送同步字符,使接收端及發(fā)送端實現(xiàn)同步。當每一幀信息結束時均用兩個字節(jié)的循環(huán)控制碼CRC為結束。外同步②面向比特型的數(shù)據(jù)格式根據(jù)同步數(shù)據(jù)鏈路控制規(guī)程(SDLC),面向比特型的數(shù)據(jù)每幀由六個部分組成。第一部分是開始標志“7EH”;第二部分是一個字節(jié)的地址場;第三部分是一個字節(jié)的控制場;第四部分是需要傳送的數(shù)據(jù),數(shù)據(jù)都是位(bit)的集合;第五部分是兩個字節(jié)的循環(huán)控制瑪CRC;最后部分又是“7EH”,作為結束標志。②面向比特型的數(shù)據(jù)格式面向比特型的數(shù)據(jù)格式如圖所示。注意:在SDLC規(guī)程中不允許在數(shù)據(jù)段和CRC段中出現(xiàn)六個“1”,否則會誤認為是結束標志。要求在發(fā)送端進行檢驗,當連續(xù)出現(xiàn)五個“1”時,則立即插入一個“0”,到接收端要將這個插入的“0”去掉,恢復原來的數(shù)據(jù),保證通信的正常進行。圖8-3面向比特型同步通信數(shù)據(jù)格式面向比特型的數(shù)據(jù)格式如圖所示。圖8-3面向比特型同步通信同步通信優(yōu)缺點數(shù)據(jù)傳輸速率較高,通??蛇_56000bps或更高,適用于傳送信息量大、傳送速率高的系統(tǒng)中,缺點是要求發(fā)送時鐘和接收時鐘保持嚴格同步,故發(fā)送時鐘除應和發(fā)送波特率保持一致外,還要求把它同時傳送到接收端去。同步通信優(yōu)缺點(2)按照數(shù)據(jù)的傳送方向分類按照數(shù)據(jù)傳送方向,串行通信可分為單工、半雙工和全雙工三種方式。(2)按照數(shù)據(jù)的傳送方向分類圖a為單工通信方式(Simplex)。A為發(fā)送站,B為接收站,數(shù)據(jù)只能能由A發(fā)至B,而不能由B傳送到A。單工通信類似無線電廣播,電臺發(fā)送信號,收音機接收信號,收音機永遠不能發(fā)送信號。

圖a為單工通信方式(Simplex)。A為發(fā)送站,B為接收站圖b為半雙工通信方式(HalfDuplex)。數(shù)據(jù)可以從A發(fā)送到B,也可以由B發(fā)送到A。不過,由于使用一根線連接,發(fā)送和接收不可能同時進行,同一時間只能作一個方向的傳送,其傳送方向由收發(fā)控制開關K來控制。半雙工通信方式類似對講機,某時刻A發(fā)送B接收,另一時刻B發(fā)送A接收,雙方不能同時進行發(fā)送和接收。

圖b為半雙工通信方式(HalfDuplex)。數(shù)據(jù)可以從圖c為全雙工通信方式(FullDuplex)。在這種方式中,分別用2根獨立的傳輸線來連接發(fā)送方和接收方,A、B既可同時發(fā)送,又可同時接收。全雙工通信工方式類似電話機,雙方可以同時進行數(shù)據(jù)的發(fā)送和接收。圖c為全雙工通信方式(FullDuplex)。在這種方式中圖所示為主從多終端通信方式。A可以向多個終端(B、C、D…)發(fā)出信息。在A允許的條件下,可以控制管理B、C、D等在不同的時間向A發(fā)出信息。根據(jù)數(shù)據(jù)傳送的方向又分為多終端半雙工通信和多終端全雙工通信。圖所示為主從多終端通信方式。A可以向多個終端(B、C、D…)2、串行接口作用:串行通信中的數(shù)據(jù)是一位一位依次傳送的,而計算機中數(shù)據(jù)是并行傳送的。因此,發(fā)送端必須把并行數(shù)據(jù)變成串行才能傳送,接收端接收到的串行數(shù)據(jù)又需要變換成并行數(shù)據(jù)才可以送給計算機。上述并→串或串→并的轉(zhuǎn)換既可以用軟件實現(xiàn),也可用硬件實現(xiàn)。由于用軟件實現(xiàn)會使CPU的負擔增加,目前往往用硬件(串行接口)完成這種轉(zhuǎn)換。2、串行接口串行接口通過系統(tǒng)總線和CPU相連,如圖所示。圖8-6CPU與串行接口的連接串行接口通過系統(tǒng)總線和CPU相連,如圖所示。圖8-6CPU串行接口主要由4部分組成數(shù)據(jù)輸入寄存器。在輸入過程中,串行數(shù)據(jù)一位一位地從傳輸線進入串行接口的接收移位寄存器,經(jīng)過串入并出電路的轉(zhuǎn)換,當接收完一個字符之后,數(shù)據(jù)就從接收移位寄存器傳送到數(shù)據(jù)輸入緩沖器,等待CPU讀取。數(shù)據(jù)輸出寄存器。當CPU輸出數(shù)據(jù)時,先送到數(shù)據(jù)輸出緩沖器,然后,數(shù)據(jù)由輸出寄存器傳到發(fā)送移位寄存器,經(jīng)過并入串出電路轉(zhuǎn)換一位一位地通過輸出傳輸線送到外設。串行接口主要由4部分組成串行接口主要由4部分組成狀態(tài)寄存器。狀態(tài)寄存器用來存放外設運行的狀態(tài)信息,CPU通過訪問這個寄存器來了解某個外設的狀態(tài),進而控制外設的工作,以便與外設進行數(shù)據(jù)交換??刂萍拇嫫?。串行接口中有一個控制寄存器,CPU對外設設置的工作方式命令、操作命令都存放在控制寄存器中,通過控制寄存器控制外設運行。串行接口主要由4部分組成串行接口基本工作原理串行發(fā)送時,CPU通過數(shù)據(jù)總線把8位并行數(shù)據(jù)送到數(shù)據(jù)輸出寄存器,然后送給并行輸入/串行輸出移位寄存器,并在發(fā)送時鐘和發(fā)送控制電路控制下通過串行數(shù)據(jù)輸出端一位一位串行發(fā)送出去。起始位和停止位是由串行接口在發(fā)送時自動添加上去的。串行接口發(fā)送完一幀后產(chǎn)生中斷請求,CPU響應后可以把下一個字符送到發(fā)送數(shù)據(jù)緩沖器。串行接口基本工作原理串行接口基本工作原理串行接收時,串行接口監(jiān)視串行數(shù)據(jù)輸入端,并在檢測到有一個低電平(起始位)時就開始一個新的字符接收過程。串行接口每接收到一位二進制數(shù)據(jù)位后就使接收移位寄存器(即串行輸入并行輸出寄存器)左移一次,連續(xù)接收到一個字符后將其并行傳送到數(shù)據(jù)輸入寄存器,并產(chǎn)生中斷促使CPU從中取走所接收的字符。串行接口基本工作原理常見的串行接口芯片稱為通用異步接收器/發(fā)送器UART(UniversalAsynchronousReceiver/Transmitter),其內(nèi)部結構如圖8-7所示。圖8-7硬件UART的結構常見的串行接口芯片稱為通用異步接收器/發(fā)送器UART(UniUART中3種出錯標志:奇偶錯誤(Parityerror)。為了檢測傳送中可能發(fā)生的錯誤,UART在發(fā)送時會檢查每個要傳送的字符中的“1”的個數(shù),自動在奇偶校驗位上添加“1”或“0”,使得“1”的總和(包括奇偶校驗位)在偶校驗時為偶數(shù),奇校驗時為奇數(shù)。UART在接收時會檢查字符中的每一位(包括奇偶校驗位),計算其“1”的總和是否符合奇偶檢驗的要求,以確定是否發(fā)生傳送錯誤。UART中3種出錯標志:UART中3種出錯標志:幀錯誤(Frameerror),表示字符格式不符合規(guī)定。雖然接收端和發(fā)送端的時鐘沒有直接的聯(lián)系,但是因為接收端總是在每個字符的起始位處進行一次重新定位,因此,必須要保證每次采樣都對應一個數(shù)據(jù)位。如果接收時鐘和發(fā)送時鐘的頻率相差太大,引起在起始位之后剛采樣幾次就造成錯位時,會出現(xiàn)采樣造成的接收錯誤。如果遇到這種情況,就會出現(xiàn)停止位(按規(guī)定應為高電平)為低電平(此情況下,未必每個停止位都是低電平),從而引起信息幀格式錯誤,幀錯誤標志FE置位。UART中3種出錯標志:UART中3種出錯標志:溢出(丟失)錯誤(Overrunerror)。UART是一種雙緩沖器結構。UART接收端在接收到第一個字符后便放入接收數(shù)據(jù)緩沖器,然后就繼續(xù)從RXD線上接收第二個字符,并等待CPU從接收數(shù)據(jù)緩沖器中取走第一個字符。如果CPU很忙,一直沒有機會取走第一個字符,以致接收到的第二字符進入接收數(shù)據(jù)緩沖器而造成第一個字符被丟失,于是產(chǎn)生了溢出錯誤,UART自動使溢出錯誤標志OE置位。UART中3種出錯標志:二、并行通信中的相關概念1、并行接口定義:實現(xiàn)并行通信的接口電路分類:輸入并行接口、輸出并行接口和輸入/輸出并行接口。并行通信以同步方式傳輸,其特點是:傳輸速度快;硬件開銷大;適合近距離傳輸。二、并行通信中的相關概念并行接口傳輸信息狀態(tài)信息。狀態(tài)信息表示外設當前所處的工作狀態(tài)。例如,準備好信號“READY”=1表示輸入接口已經(jīng)準備好,可以和CPU交換數(shù)據(jù);忙信號“BUSY”=1表示接口正在傳輸信息,CPU需要等待??刂菩畔?。控制信息是由CPU發(fā)出的,用于控制外設接口的工作方式以及外設的啟動和復位等。數(shù)據(jù)信息。CPU與并行接口交換的主要內(nèi)容。并行接口傳輸信息一個典型的并行接口與CPU、外設連接圖如圖所示。圖8-8典型并行接口電路圖一個典型的并行接口與CPU、外設連接圖如圖所示。圖8-8典2、并行接口電路組成輸入緩沖寄存器。輸入數(shù)據(jù)緩沖器主要功能是負責接收設備送來的數(shù)據(jù),CPU通過讀操作指令IN執(zhí)行讀操作,從輸入數(shù)據(jù)緩沖器讀取數(shù)據(jù)。輸出緩沖寄存器。輸出數(shù)據(jù)緩沖器主要功能是負責接收CPU送來的數(shù)據(jù),如果設備處于空閑狀態(tài),則從輸出數(shù)據(jù)緩沖器取走數(shù)據(jù),接口通知CPU進行下一次輸出操作。2、并行接口電路組成2、并行接口電路組成狀態(tài)寄存器。狀態(tài)寄存器用來存放外設運行狀態(tài)信息,CPU通過訪問狀態(tài)寄存器來了解外設狀態(tài),進而控制外設的工作??刂萍拇嫫鳌2⑿薪涌谥杏幸粋€控制寄存器,CPU對外設設置的工作方式命令、操作命令都存放在控制寄存器中,通過控制寄存器控制外設的運行。數(shù)據(jù)信息。CPU與并行接口交換的主要內(nèi)容。2、并行接口電路組成3、并行通信接口的基本輸入/輸出工作過程(1)輸入過程外設首先將并行傳輸?shù)臄?shù)據(jù)放到外設與接口之間的數(shù)據(jù)總線上,并使“數(shù)據(jù)輸入準備好”狀態(tài)選通信號有效,該選通信號使數(shù)據(jù)輸入到接口的輸入數(shù)據(jù)緩沖器內(nèi)。當數(shù)據(jù)寫入輸入數(shù)據(jù)緩沖器后,接口使“數(shù)據(jù)輸入應答”信號有效,作為對外設輸入的響應。外設收到此信號后,便撤銷輸入數(shù)據(jù)和“數(shù)據(jù)輸入準備好”信號。3、并行通信接口的基本輸入/輸出工作過程數(shù)據(jù)到達接口后,接口在狀態(tài)寄存器中設置“輸入準備好”狀態(tài)位,以便CPU進行查詢;接口也可以在此時向CPU發(fā)送中斷請求,表示數(shù)據(jù)已輸入到接口。CPU既可以用查詢程序方式,也可以用程序中斷方式來讀取接口中的數(shù)據(jù)。CPU從輸入緩沖器中讀取數(shù)據(jù)后,接口自動清除狀態(tài)寄存器中“輸入準備好”狀態(tài)位,并使數(shù)據(jù)總線處于高阻狀態(tài)。至此,一個數(shù)據(jù)的傳送結束。數(shù)據(jù)到達接口后,接口在狀態(tài)寄存器中設置“輸入準備好”狀態(tài)位,(2)輸出過程當外設從接口取走數(shù)據(jù)后,接口就會將狀態(tài)寄存器中“輸出準備好”狀態(tài)位置1,表示CPU當前可以向接口輸出數(shù)據(jù),這個狀態(tài)位可供CPU進行查詢。接口此時也可以向CPU發(fā)中斷請求。CPU既可以用查詢程序方式,也可以用程序中斷方式向接口輸出數(shù)據(jù)。當CPU將數(shù)據(jù)送到輸出緩沖器后,接口自動清除“輸出準備好”狀態(tài)位,并將數(shù)據(jù)送往外設的數(shù)據(jù)線上,同時,接口將給外設發(fā)送“啟動信號”來啟動外設接收數(shù)據(jù)。(2)輸出過程外設被啟動后,開始接收數(shù)據(jù),并向接口發(fā)“數(shù)據(jù)輸出應答”信號。接口收到此信號,便將狀態(tài)寄存器中的“輸出準備好”狀態(tài)位置1,以便CPU輸出下一個數(shù)據(jù)。外設被啟動后,開始接收數(shù)據(jù),并向接口發(fā)“數(shù)據(jù)輸出應答”信號?!?.2串行接口一、單片機的串行接口

STC15F2K60S2單片機具有2個采用UART工作方式的全雙工串行通信接口(串口1和串口2)。每個串口由2個數(shù)據(jù)緩沖器、1個移位寄存器、1個串行控制寄存器和一個波特率發(fā)生器等組成?!?.2串行接口一、單片機的串行接口每個串口的數(shù)據(jù)緩沖器由串行接收緩沖器和發(fā)送緩沖器構成,它們在物理上是獨立的,既可以接收數(shù)據(jù)也可以發(fā)送數(shù)據(jù),還可以同時發(fā)送和接收數(shù)據(jù)。接收緩沖器只能讀出,不能寫入,而發(fā)送緩沖器則只能寫入,不能讀出。它們共用一個地址號。串口1的接收緩沖器和發(fā)送緩沖器共用一個地址號(99H);串口2的接收緩沖器和發(fā)送緩沖器共用一個地址號(9BH)。

每個串口的數(shù)據(jù)緩沖器由串行接收緩沖器和發(fā)送緩沖器構成,它們在STC15F2K60S2的串行口既可以用于串行異步通信,也可以構成同步移位寄存器。如果在串行口的輸入/輸出引腳上加上電平轉(zhuǎn)換器,可以方便地構成標準的RS-232接口。STC15F2K60S2單片機的串行口有4種工作方式,有的工作方式的波特率是可變的。用戶用軟件編程的方法在串行控制寄存器中寫入相應的控制字節(jié),即可改變串行口的波特率和工作方式。STC15F2K60S2的串行口既可以用于串行異步通信,也可1、串行接口的寄存器與串行接口1相關的寄存器有:SCON、PCON、AUXR、SBUF、TMOD、TL1、TH1、TCON、IE、IP、CLK_DIV、P_SW2、SADEN和SADDR。與串行接口2相關的寄存器有:S2CON、S2BUF、T2H、T2L、AUXR、IE2、IP2和AUXR1。1、串行接口的寄存器(1)串口1控制寄存器SCONSCON(地址為98H,復位值為00H)用于確定串口1的操作方式和控制串口1的某些功能,也可用于發(fā)送和接收第9個數(shù)據(jù)位(TB8、RB8),并設有接收和發(fā)送中斷標志(RI及TI)位。SCON各位的定義如下:位號D7D6D5D4D3D2D1D0位名稱SM0/FESM1SM2RENTB8RB8TIRI(1)串口1控制寄存器SCON位號D7D6D5D4D位號D7D6D5D4D3D2D1D0位名稱SM0/FESM1SM2RENTB8RB8TIRI1)SM0/FE:

PCON寄存器中的SMOD0=1時,該位用于幀錯誤檢測,當檢測到一個無效停止位時,F(xiàn)E置1。它必須由軟件清零。

PCON寄存器中的SMOD0=0時,SM0/FE位和SM1一起指定串行通信的工作方式。(如下表)

表中SYSclk為振蕩器頻率位號D7D6D5D4D3D2D1D0位名稱SM表8-1串行通信的工作方式表8-1串行通信的工作方式2)SM2:多機通信控制位。

多機通信時單片機工作于方式2或方式3。SM2位是進行主-從多機通信的控制位。當進行主從式通信時,開始各個從機都應置SM2=1。主機發(fā)出的第一幀信息是地址幀信息(數(shù)據(jù)幀的第9數(shù)據(jù)位為1),此時各個從機接收到地址幀信息后都能產(chǎn)生中斷,并進入各自的中斷服務程序。位號D7D6D5D4D3D2D1D0位名稱SM0/FESM1SM2RENTB8RB8TIRI2)SM2:多機通信控制位。位號D7D6D5D4D3只有被尋址的從機(地址與從主機發(fā)出的地址號相符)在中斷服務程序中使SM2=0,為從機接收主機發(fā)出的數(shù)據(jù)幀信息(第9數(shù)據(jù)位為0)作準備。而其他從機仍然維持SM2=1,對主機以后發(fā)出的數(shù)據(jù)幀信息,將不會產(chǎn)生中斷申請,從而不會接收后續(xù)的數(shù)據(jù)幀信息。在方式1時,如SM2=1,則只有在接收到有效停止位時才能激發(fā)中斷標志(RI=1),如沒有接收到有效停止位,則RI仍然為0。如果使用方式0,則SM2應為0。只有被尋址的從機(地址與從主機發(fā)出的地址號相符)在中斷服務程3)REN:允許接收控制位。

1:允許串行口接收數(shù)據(jù);

0:禁止串行口接收數(shù)據(jù)。位號D7D6D5D4D3D2D1D0位名稱SM0/FESM1SM2RENTB8RB8TIRI3)REN:允許接收控制位。位號D7D6D5D4D34)TB8

在方式2和3時,它是要發(fā)送的第9個數(shù)據(jù)位,按需要由軟件進行置位或清零。該位可用作數(shù)據(jù)的奇偶校驗位,或在多機通信中用作地址幀/數(shù)據(jù)幀的標志位。位號D7D6D5D4D3D2D1D0位名稱SM0/FESM1SM2RENTB8RB8TIRI5)RB8

在方式2和3時,它是接收到的第9位數(shù)據(jù),作為奇偶檢驗位或地址幀/數(shù)據(jù)幀標志位。在方式1時,若SM2=0,則RB8是接收到的停止位。在方式0時,不使用RB8。4)TB8位號D7D6D5D4D3D2D16)TI:發(fā)送中斷標志位。

在方式0時,當串行發(fā)送數(shù)據(jù)字第8位結束時由內(nèi)部硬件置位,向CPU申請發(fā)送中斷。CPU響應中斷后,必須用軟件清零。在其他方式時,在停止位開始發(fā)送時由硬件置位。同樣,必須用軟件清零。位號D7D6D5D4D3D2D1D0位名稱SM0/FESM1SM2RENTB8RB8TIRI6)TI:發(fā)送中斷標志位。位號D7D6D5D47)RI:接收中斷標志位。在方式0時,當串行接收到第8位結束時由內(nèi)部硬件置位。在其他方式時,RI在接收到停止位的中間時刻由硬件置位(例外情況見SM2說明)。RI也必須用軟件清0。位號D7D6D5D4D3D2D1D0位名稱SM0/FESM1SM2RENTB8RB8TIRI7)RI:接收中斷標志位。位號D7D6D5D4DTI與RI使用時需注意當一幀數(shù)據(jù)發(fā)送完成時,發(fā)送中斷標志TI被置位,接著發(fā)生串口中斷,進入串口中斷服務程序。但CPU事先并不能分辨是TI還是RI的中斷請求,因此,必須在中斷服務程序中用位測試指令加以判別。兩個中斷標志位TI及RI均不能自動復位,必須在中斷服務程序中使用清中斷標志位指令,撤銷中斷請求狀態(tài),否則原先的中斷標志位狀態(tài)又將表示有中斷請求。TI與RI使用時需注意(2)串口2控制寄存器S2CON寄存器S2CON(地址為9AH,復位值為00H)用于確定串口2的操作方式和控制串口2的某些功能,也可用于發(fā)送和接收第9個數(shù)據(jù)位(S2TB8、S2RB8),并設有接收和發(fā)送中斷標志(S2RI及S2TI)位。S2CON各位的定義如下:位號D7D6D5D4D3D2D1D0位名稱S2SM00S2SM2S2RENS2TB8S2RB8S2TIS2RI(2)串口2控制寄存器S2CON位號D7D6D5D4D其中,S2SM0用于指定串口2的工作方式,如表所示當T2x12=1時,定時器2的溢出率=SYSclk/(65536-[RL_TH2,RL_TL2])當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的溢出率)/4其中,S2SM0用于指定串口2的工作方式,如表所示S2SM0(3)掉電控制寄存器PCONPCON(地址為87H,復位值為30H)中的SMOD用于設置方式1、方式2和方式3的波特率是否加倍。各位的定義如下:位號D7D6D5D4D3D2D1D0位名稱SMODSMOD0LVDFPOFGF1GF0PDIDL(3)掉電控制寄存器PCON位號D7D6D5D4D3D2D1SMOD:串行口波特率系數(shù)控制位。復位時,SMOD=0。

1:使方式1、方式2和方式3的波特率加倍。

0:各工作方式的波特率不加倍。位號D7D6D5D4D3D2D1D0位名稱SMODSMOD0LVDFPOFGF1GF0PDIDLSMOD:串行口波特率系數(shù)控制位。復位時,SMOD=0。位號SMOD0:幀錯誤檢測有效控制。復位時,SMOD0=0。

1:SCON寄存器中的SM0/FE位用于FE(幀錯誤檢測)功能。

0:SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行通信的工作方式。位號D7D6D5D4D3D2D1D0位名稱SMODSMOD0LVDFPOFGF1GF0PDIDLSMOD0:幀錯誤檢測有效控制。復位時,SMOD0=0。位號(4)輔助寄存器AUXR輔助寄存器AUXR(地址為8EH,復位值為01H)各位的定義如下:位號D7D6D5D4D3D2D1D0位名稱T0x12T1x12UART_M0x6T2RT2_C/T2x12EXTRAMS1S2(4)輔助寄存器AUXR位號D7D6D5D4D3D2D1D01)UART_M0x6:串行口模式0的通信速度設置位。

0:UART串口模式0的速度是傳統(tǒng)12T的8051速度,12分頻。

1:UART串口模式0的速度是傳統(tǒng)12T的8051的6倍,2分頻。位號D7D6D5D4D3D2D1D0位名稱T0x12T1x12UART_M0x6T2RT2_C/T2x12EXTRAMS1S21)UART_M0x6:串行口模式0的通信速度設置位2)S1S2:串口1波特率發(fā)生器選擇位。

0:選擇定時器1作為串口1波特率發(fā)生器。

1:選擇定時器2作為串口1波特率發(fā)生器。位號D7D6D5D4D3D2D1D0位名稱T0x12T1x12UART_M0x6T2RT2_C/T2x12EXTRAMS1S22)S1S2:串口1波特率發(fā)生器選擇位。位號D7D6D5D4注意:對于具有串口2的STC15F2K60S2單片機,串口2只能使用T2作為波特率發(fā)生器,不能夠選擇T1作為波特率發(fā)生器;串口1可以選擇T1作為波特率發(fā)生器,也可以選擇T2作為波特率發(fā)生器。注意:(5)定時器2寄存器定時器2時間常數(shù)寄存器T2H和T2L(地址分別為0D6H和0D7H,復位值為00H)用于保存重裝時間常數(shù),從而作為波特率發(fā)生器使用??梢耘浜陷o助寄存器AUXR中的T2R、T2_C/和T2x12位進行時間常數(shù)的確定。

(5)定時器2寄存器(6)從機地址控制寄存器為了方便多機通信,STC15F2K60S2單片機設置了從機地址控制寄存器SADEN和SADDR。SADEN是從機地址掩模寄存器(地址為B9H,復位值為00H),SADDR是從機地址寄存器(地址為A9H,復位值為00H)。(6)從機地址控制寄存器主機可以用從機地址來選擇性的訪問從機??梢杂脧V播的方式來尋址所有的從機。從機的地址由SADDR和SADEN寄存器定義,從機地址是由SADDR設定的8位數(shù)據(jù),如果SADEN中相應的位置0,則SADDR中對應的位無效。只有當SADEN中的相應位為1,SADDR中的數(shù)據(jù)才有效。也就是說,SADEN寄存器使能串口的自動地址識別功能,當SADEN中的某位被置為1,那么SADDR寄存器中的相應位會與接收到的數(shù)據(jù)進行比較。如果SADEN.n被設為0,那么系統(tǒng)會忽略對該位的比較。如果SADEN為全0,那么對于所有的地址幀系統(tǒng)都會產(chǎn)生中斷。主機可以用從機地址來選擇性的訪問從機。可以用廣播的方式來尋址(7)數(shù)據(jù)緩沖器數(shù)據(jù)緩沖器用于保存要發(fā)送的數(shù)據(jù)或者從串口接收到的數(shù)據(jù)。串口1的數(shù)據(jù)緩沖器是SBUF,串口2的數(shù)據(jù)緩沖器是S2BUF。對于串口1,當一個字符接收完畢,移位寄存器中的數(shù)據(jù)字節(jié)裝入串行接收數(shù)據(jù)緩沖器SBUF中,其第9位則裝入SCON寄存器的RB8位。如果SM2使得已接收的數(shù)據(jù)無效,則RB8位和SBUF緩沖器中的內(nèi)容不變。(7)數(shù)據(jù)緩沖器對于串口2,當一個字符接收完畢,移位寄存器中的數(shù)據(jù)字節(jié)裝入串行接收數(shù)據(jù)緩沖器S2BUF中,其第9位則裝入S2CON寄存器的S2RB8位。如果S2SM2使得已接收的數(shù)據(jù)無效,則S2RB8位和S2BUF緩沖器中的內(nèi)容不變。無論對于串口1還是串口2,發(fā)送緩沖器只能寫入,不能讀出;接收緩沖器只能讀出,不能寫入。因此,串口1的兩個緩沖器共用一個地址號(99H),串口2的兩個緩沖器共用一個地址號(9BH)。對于串口2,當一個字符接收完畢,移位寄存器中的數(shù)據(jù)字節(jié)裝入串(8)串口1的中繼廣播方式設置CLK_DIV寄存器中的Tx_Rx位用于串口1的中繼廣播方式設置。0:串口1為正常工作方式1:串口1為中繼廣播方式,即將RxD端口輸入的電平狀態(tài)實時輸出在TxD外部管腳上。(8)串口1的中繼廣播方式設置2、串行接口的工作方式STC15F2K60S2單片機的串行口1有4種工作方式,通過設置SCON寄存器的SM0和SM1進行選擇?,F(xiàn)分別加以介紹。方式0:移位寄存器方式方式1:8位可變波特率方式方式2:9位固定波特率方式方式3:9位可變波特率方式2、串行接口的工作方式(1)方式0:移位寄存器方式方式0為半雙工方式,又稱為同步移位寄存器輸出方式。在這種方式下,TXD引腳輸出同步移位時鐘,RXD用于發(fā)送和接收串行數(shù)據(jù)。串行口輸出端可直接與移位寄存器相連,也可用作擴展I/O口或外接同步輸入輸出設備。該方式下的數(shù)據(jù)幀為8位,低位在先,高位在后,沒有起始位和停止位。(1)方式0:移位寄存器方式發(fā)送過程當CPU將數(shù)據(jù)寫入到發(fā)送緩沖區(qū)SBUF時,串行口即把8位二進制數(shù)以SYSclk/12或SYSclk/2(由UART_M0x6確定是12分頻還是2分頻)的波特率由RXD引腳輸出(SYSclk為系統(tǒng)工作時鐘),同時由TXD引腳輸出同步移位脈沖。字符發(fā)送完畢,置中斷標志TI為1。當寫SBUF信號有效后,相隔一個時鐘,發(fā)送控制端有效,允許RxD發(fā)送數(shù)據(jù),同時允許TxD輸出同步移位脈沖。一幀數(shù)據(jù)(8位)發(fā)送完畢時,各控制端均恢復原狀態(tài),只有TI保持高電平,呈中斷申請狀態(tài)。在再次發(fā)送數(shù)據(jù)前,必須用軟件將TI清0。發(fā)送過程接收過程控制字除方式0外,還應置允許接收控制位REN=1,并清除RI中斷標志。接收過程啟動后,RXD為數(shù)據(jù)輸入端,TXD為同步信號輸出端。串行接收的波特率為SYSclk/12或SYSclk/2(由UART_M0x6確定是12分頻還是2分頻)。接收完8位數(shù)據(jù)后重新置RI=1。當再次接收時,必須通過軟件將RI清0。接收過程工作于方式0使用時需注意必須使SCON控制字的SM2位為0,從而不影響TB8和RB8位。在該方式下,波特率僅取決于系統(tǒng)時鐘,無需使用定時器控制。以中斷方式傳送數(shù)據(jù)時,CPU響應中斷并不會自動清除TI、RI標志,在中斷服務程序中必須由指令清零。如CLRTI及CLRRI。工作于方式0使用時需注意(a)串行口1方式0功能結構圖

(a)串行口1方式0功能結構圖(b)串行口1方式0時序圖(b)串行口1方式0時序圖(1)串口1的UART方式①方式1:8位可變波特率方式方式1提供異步全雙工通信,適合于點到點的通信。每個數(shù)據(jù)幀長度為10位:1個起始位(低電平)、8個數(shù)據(jù)位和1個停止位(高電平)。傳輸?shù)臄?shù)據(jù)位首先是起始位,然后是8位數(shù)據(jù)(低位在前),最后一位是停止位。起始位和停止位是在發(fā)送時自動插入的。接收時,停止位進入SCON的RB8位。(1)串口1的UART方式(a)串行口1方式1功能結構圖

(a)串行口1方式1功能結構圖發(fā)送過程發(fā)送數(shù)據(jù)時,數(shù)據(jù)由串行發(fā)送端TxD輸出。當單片機執(zhí)行一條寫SBUF的指令時,就啟動串行通信的發(fā)送,寫SBUF信號還把1裝入發(fā)送移位寄存器的第9位,并通知TX控制器開始發(fā)送。發(fā)送各位的定時時間由16分頻計數(shù)器同步。移位寄存器將數(shù)據(jù)不斷右移送TxD端口發(fā)送,在數(shù)據(jù)的左邊不斷移入0作補充。當數(shù)據(jù)的最高位移到移位寄存器的輸出位置,緊跟其后的是第9位“1”,在它的左邊各位全為“0”,這個狀態(tài)條件,使TX控制器作最后一次移位輸出,然后使允許發(fā)送信號“SEND”失效,完成一幀信息的發(fā)送,并置位中斷請求位TI,即TI=1,向CPU請求中斷處理。發(fā)送過程接收過程當軟件置位接收允許標志位REN,即REN=1時,接收器便以選定波特率的16分頻的速率采樣串行接收端口RxD,當檢測到RxD端口從1→0的負跳變時就啟動接收器準備接收數(shù)據(jù),并立即復位16分頻計數(shù)器,將1FFH值裝入移位寄存器。復位16分頻計數(shù)器的目的是使它與輸入位時間同步。接收過程16分頻計數(shù)器的16個狀態(tài)是將每位的接收時間均為16等份,在每位時間的7、8、9狀態(tài)由檢測器對RxD端口進行采樣,經(jīng)“三中取二”后的值作為本次所接收的值,即3次采樣至少2次相同的值,以此消除干擾影響,提高可靠性。在起始位,如果接收到的值不為0(低電平),則起始位無效,復位接收電路,并重新檢測1→0的跳變。如果接收到的起始位有效,則將它輸入移位寄存器,并接收本幀的其余信息。16分頻計數(shù)器的16個狀態(tài)是將每位的接收時間均為16等份,在接收的數(shù)據(jù)從接收移位寄存器的右邊移入,已裝入的1FFH向左邊移出,當起始位0移到移位寄存器的最左邊時,使RX控制器作最后一次移位,完成一幀的接收。若同時滿足以下兩個條件:RI=0;SM2=0或接收到的停止位為1。則接收到的數(shù)據(jù)有效,數(shù)據(jù)載入SBUF,停止位進入RB8,置位RI,向CPU請求中斷,若上述兩條件不能同時滿足,則接收到的數(shù)據(jù)作廢并丟失,無論條件滿足與否,接收器重新檢測RxD端口上的1→0的跳變,繼續(xù)下一幀的接收。接收有效,在響應中斷后,必須由軟件將RI清0。通常情況下,串行口工作于方式1時,SM2設置為0。接收的數(shù)據(jù)從接收移位寄存器的右邊移入,已裝入的1FFH向左邊串行通信方式1的波特率是可變的,波特率由定時器1或定時器2的溢出率決定。定時/計數(shù)器的溢出率定義為:單位時間(秒)內(nèi)定時器/計數(shù)器溢出的次數(shù)串行口1用定時器1作為波特率發(fā)生器且定時器1工作于模式0(16位自動重裝模式)時,波特率=(定時器1的溢出率)/4。

注意:此時波特率與SMOD無關。串行通信方式1的波特率是可變的,波特率由定時器1或定時器2的當定時器1工作于模式0(16位自動重裝模式)且T1x12=0時定時器1的溢出率=SYSclk/12/(65536-[RL_TH1,RL_TL1]);此時,串口1的波特率=SYSclk/12/(65536-[RL_TH1,RL_TL1])/4當定時器1工作于模式0(16位自動重裝模式)且T1x12=當串行口1用定時器1作為波特率發(fā)生器且定時器1工作于模式2(8位自動重裝模式)時波特率=(2SMOD/32)×(定時器1的溢出率)當定時器1工作于模式2(8位自動重裝模式)且T1x12=0時定時器1的溢出率=SYSclk/12/(256-TH1);串口1的波特率=(2SMOD/32)×SYSclk/12/(256-TH1)當串行口1用定時器1作為波特率發(fā)生器且定時器1工作于模式2(當定時器1工作于模式2且T1x12=1時定時器1的溢出率=SYSclk/(256-TH1)此時,串口1的波特率=(2SMOD/32)×SYSclk/(256-TH1)當T2x12=0時定時器2的溢出率=SYSclk/12/(65536-[RL_TH2,RL_TL2])此時,串口1的波特率=SYSclk/12/(65536-[RL_TH2,RL_TL2])/4當T2x12=1時,定時器2的溢出率=SYSclk/(65536-[RL_TH2,RL_TL2])。此時,串口1的波特率=SYSclk/(65536-[RL_TH2,RL_TL2])/4。其中,RL_TH2是TH2的自動重裝寄存器,RL_TL2是TL2的自動重裝寄存器。當定時器1工作于模式2且T1x12=1時定時器1工作于模式0(16位自動重裝模式)且T1x12=1時定時器1的溢出率=SYSclk/(65536-[RL_TH1,RL_TL1])。此時,串口1的波特率=SYSclk/(65536-[RL_TH1,RL_TL1])/4。其中,RL_TH1是TH1的自動重裝載寄存器,RL_TL1是TL1的自動重裝載寄存器。單片機課件數(shù)據(jù)通信方式1的發(fā)送、接收工作波形圖如圖所示。(b)串行口1方式1時序圖方式1的發(fā)送、接收工作波形圖如圖所示。(b)串行口1方式1時②串口方式2:9位固定波特率方式方式2提供異步全雙工通信,適合于固定波特率的多機通信。每個數(shù)據(jù)字節(jié)長度為11位:1個起始位、8個數(shù)據(jù)位(低位在前)、1個可編程的第9位(TB8/RB8)和1個停止位。與方式1相比,每幀增加了一個第9位。發(fā)送時,第9位數(shù)據(jù)由TB8確定,可以置位也可以清0。接收時,第9位進入RB8位。②串口方式2:9位固定波特率方式方式2的波特率為:串行通信方式2波特率=

SYSclk為系統(tǒng)工作時鐘頻率PCON寄存器中的SMOD為波特率加倍位當SMOD=1時,波特率為SYSclk/32;當SMOD=0時,波特率為SYSclk/64。方式2的波特率為:(a)串行通信方式2的功能結構示意圖

(a)串行通信方式2的功能結構示意圖(b)串行通信方式2的接收/發(fā)送時序圖(b)串行通信方式2的接收/發(fā)送時序圖當接收器接收完一幀信息后必須同時滿足下列條件:RI=0SM2=0或者SM2=1,并且接收到的第9數(shù)據(jù)位RB8=1當上述兩條件同時滿足時,才將接收到的移位寄存器的數(shù)據(jù)裝入SBUF和RB8中,并置位RI,向CPU請求中斷處理。如果上述條件有一個不滿足,則剛接收到移位寄存器中的數(shù)據(jù)無效而丟失,也不置位RI。無論上述條件滿足與否,接收器又重新開始檢測RxD輸入端口的跳變信息,接收下一幀的輸入信息。當接收器接收完一幀信息后必須同時滿足下列條件:在方式2中,接收到的停止位與SBUF、RB8和RI無關。通過軟件對SCON中的SM2、TB8的設置以及通信協(xié)議的約定,為多機通信提供了方便。在方式2中,接收到的停止位與SBUF、RB8和RI無關。③串口方式3:9位可變波特率方式該方式也適合于多機通信。方式3的每個數(shù)據(jù)字節(jié)長度為11位:1個起始位、8個數(shù)據(jù)位(低位在前)、1個可編程的第9位(TB8/RB8)和1個停止位。發(fā)送時,第9位數(shù)據(jù)由TB8確定,可以置位也可以清0。接收時,第9位數(shù)據(jù)進入RB8位。方式3和方式1一樣,其波特率可通過軟件對定時器/計數(shù)器1或定時器2的設置進行波特率的選擇,是可變的。③串口方式3:9位可變波特率方式(a)工作方式3的功能結構(a)工作方式3的功能結構(b)工作方式3的數(shù)據(jù)接收/發(fā)送時序圖(b)工作方式3的數(shù)據(jù)接收/發(fā)送時序圖發(fā)送過程CPU執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖區(qū)SBUF的指令即可啟動發(fā)送(如MOVSBUF,A)。串行口自動將發(fā)送緩沖區(qū)中的內(nèi)容送入發(fā)送移位寄存器。發(fā)送移位寄存器先發(fā)送一個起始位,接著按程序設定每個字符的代碼,先低位后高位。數(shù)據(jù)字加上奇偶校驗位或可控位(方式2、3中即為程序設定的TB8位的值),再發(fā)送停止位,從而完成一幀的發(fā)送。串行數(shù)據(jù)均由TXD端輸出,發(fā)送完畢,將發(fā)送中斷標志位TI置1,以供查詢及向CPU申請中斷之用。CPU的響應中斷后必須在中斷服務程序中使TI清0。發(fā)送過程接收過程接收數(shù)據(jù)由RXD輸入,串行口以所選定波特率的16倍速率采樣RXD端狀態(tài)。當RXD端電平由1到0跳變時,就啟動接收器。串行口按程序規(guī)定的格式接收一幀代碼,并把此碼的數(shù)據(jù)位拼成并行碼送入接收緩沖寄存器中(在方式1時,把停止位送入RB8;在方式2、3時,把程控的第9位數(shù)據(jù)送入RB8),等待CPU取走。為保證可靠無誤,對每一數(shù)據(jù)位進行連續(xù)3次采樣,取3次采樣中至少兩次相同的值。接收完畢,置接收中斷標志RI=1。CPU的響應中斷后必須在中斷服務程序中使RI清0。接收過程當接收器接收完一幀信息后必須同時滿足下列條件:RI=0SM2=0或者SM2=1,并且接收到的第9數(shù)據(jù)位RB8=1。當上述兩條件同時滿足時,才將接收到的移位寄存器的數(shù)據(jù)裝入SBUF和RB8中,并置位RI,向CPU請求中斷處理。如果上述條件有一個不滿足,則剛接收到移位寄存器中的數(shù)據(jù)無效而丟失,也不置位RI。無論上述條件滿足與否,接收器又重新開始檢測RxD輸入端口的跳變信息,接收下一幀的輸入信息。當接收器接收完一幀信息后必須同時滿足下列條件:在方式3中,接收到的停止位與SBUF、RB8和RI無關。通過軟件對SCON中的SM2、TB8的設置以及通信協(xié)議的約定,為多機通信提供了方便。在方式3中,接收到的停止位與SBUF、RB8和RI無關。幾種常用的典型幀格式。圖8-13串行通信典型幀格式幾種常用的典型幀格式。圖8-13串行通信典型幀格式總結在實際應用中,應根據(jù)實際需要選擇串行口的工作方式。由于方式1和方式3的波特率可以通過定時器1控制,通信波特率的設定比較靈活,因此,方式1和方式3使用較多,其中,方式1常用于點對點通信的情況;而方式3常用語多機通信的情況??偨Y串行口工作方式一覽表。串行口工作方式一覽表。方式1與方式2、3的區(qū)別方式1中,數(shù)據(jù)字是8位異步通信接口,串行口發(fā)送/接收共10位信息,第0位為起始位,1~8位是數(shù)據(jù)位,最后是停止位;方式2、3中,數(shù)據(jù)字為9位的異步通信接口,1位起始位,8位數(shù)據(jù)位,第9位是可程控位“1”或“0”,最后是停止位,共有11位信息。方式1、3的波特率是可變的,其波特率取決于定時器1的溢出率或T2的溢出率和特殊功能寄存器PCON中的SMOD位的值。方式1與方式2、3的區(qū)別在方式2和方式3中還可通過控制TB8位的方法,使其傳送中附加的第9位數(shù)據(jù)可以作為多機通信中的地址/數(shù)據(jù)標志位,或作為數(shù)據(jù)的奇偶校驗位。若以TB8位作為奇偶校驗位,在數(shù)據(jù)寫入SBUF之前,先將數(shù)據(jù)的奇偶位寫入TB8。在方式2和方式3中還可通過控制TB8位的方法,使其傳送中附加可以使用下面的代碼實現(xiàn)通信的偶校驗(假設要發(fā)送的數(shù)據(jù)保存在R2中):

MOV A,R2 ;取數(shù)據(jù)

MOV C,P MOV TB8,C MOV SBUF,A

;數(shù)據(jù)寫入到發(fā)送緩沖器,啟動發(fā)送器

可以使用下面的代碼實現(xiàn)通信的偶校驗(假設要發(fā)送的數(shù)據(jù)保存在R編寫接收程序時,均應使REN=1,允許串行接收。只有在最后的移位脈沖產(chǎn)生并同時滿足下列條件時,接收數(shù)據(jù)才會裝入SBUF和RB8并置位RI:①對于方式1:SM2=0或接收到的停止位=1②對方式2、3:SM2=0或接收到的第九個數(shù)據(jù)=1編寫接收程序時,均應使REN=1,允許串行接2)串口2的UART方式①方式0(8位UART)10位數(shù)據(jù)通過RxD2/P1.0(RxD2/P4.6)發(fā)送,通過TxD2/P1.1(TxD2_2/P4.7)發(fā)送。一幀數(shù)據(jù)包含一個起始位(0),8個數(shù)據(jù)位和一個停止位(1)。接收時,停止位進入特殊功能寄存器S2CON的S2RB8位。波特率由T2的溢出率決定。2)串口2的UART方式當T2工作在1T模式(T2x12=1)時T2的溢出率=SYSclk/(65536-[RL_TH2,RL_TL2]);此時,串行口2的波特率=SYSclk/(65536-[RL_TH2,RL_TL2])/4當T2工作在12T模式(T2x12=0)時T2的溢出率=SYSclk/12/(65536-[RL_TH2,RL_TL2]);此時,串行口2的波特率=SYSclk/12/(65536-[RL_TH2,RL_TL2])/4其中,RL_TH2是T2H的重裝載寄存器,RL_TL2是T2L的重裝載寄存器。當T2工作在1T模式(T2x12=1)時②方式1(9位UART)11位數(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ù)進入特殊功能寄存器S2CON的S2RB8位。波特率的計算方法與方式0相同,在此略。②方式1(9位UART)3、多處理機通信以使用串口1為例,說明多機通信的過程。串行口控制寄存器SCON中的SM2位為方式2和方式3工作時進行多機通信的控制位。這種多機通信方式一般為“一臺主機,多臺從機”系統(tǒng),主機發(fā)送的信息可被各從機接收,而從機只能對主機發(fā)送信息,從機間互相不能直接通信。

3、多處理機通信典型的多機通信結構圖如圖所示。圖8-14多機通信系統(tǒng)示意圖典型的多機通信結構圖如圖所示。圖8-14多機通信系統(tǒng)示意多機系統(tǒng)設置需注意多機系統(tǒng)中,從機串行口必須在方式2或方式3下工作。應使SM2及REN控制位置“1”。從而使從機先處于只能接收地址幀信息(第9數(shù)據(jù)位為1)的狀態(tài),當從機接收到主機發(fā)出的地址幀信息后,串行口可向CPU申請中斷。多機系統(tǒng)設置需注意多機系統(tǒng)通信過程當主機和某一從機通信時,主機應先發(fā)出一幀包含某從機地址的信息給各從機(TB8=1)。當各從機接收到主機發(fā)出的地址幀信息后,自動將第9數(shù)據(jù)位狀態(tài)“1”送到SCON控制寄存器的RB8位,并將中斷標志RI置1,產(chǎn)生中斷。各CPU響應中斷后均進入中斷服務程序,在服務程序中把主機送來的地址號與本從機的地址號相比較。多機系統(tǒng)通信過程若地址相等,則使本機的SM2置“0”,為接收主機接著發(fā)送來的數(shù)據(jù)幀(第9數(shù)據(jù)位為0)作準備。而地址號不符的其他從機仍然維持SM2=1的狀態(tài),對主機以后發(fā)出的數(shù)據(jù)幀信息不予理睬,不產(chǎn)生中斷標志RI,直到與主機發(fā)出的地址信息相符后,才可接收以后的數(shù)據(jù)信息,從而實現(xiàn)了主從一對一通信。主機在發(fā)送完呼叫地址幀后(TB8=1),接著發(fā)送一連串的數(shù)據(jù)幀(TB8=0)。若地址相等,則使本機的SM2置“0”,為接收主機接著發(fā)送來的當主機要和另一個從機通信時,則再發(fā)呼叫地址幀(TB8=1),呼叫其他從機,原先被尋址的從機經(jīng)分析得知主機在呼叫其他從機時,恢復其SM2=1,對其后主機發(fā)送的數(shù)據(jù)幀不予理睬。使用串行口2進行多機通信的方法與此類似,僅把SCON中的SM2、REN、TB8和RB8換成對應的S2CON中的S2SM2、S2REN、S2TB8和S2RB8即可。當主機要和另一個從機通信時,則再發(fā)呼叫地址幀(TB8=1),4、波特率的設定(1)串行口1的波特率設定方式0的波特率當UART_M0x6=0時,波特率為SYSclk/12;當UART_M0x6=1時,波特率為SYSclk/2。方式2的波特率當SMOD=0時,波特率為SYSclk/64;當SMOD=1時,為SYSclk/32。方式1和3的波特率

串行口1工作于方式1和3時,波特率是可變的,可以通過編程改變定時器1的溢出率或者定時器2的溢出率來確定波特率。4、波特率的設定編程時應注意當定時器作為波特率發(fā)生器使用時,應禁止定時器產(chǎn)生中斷(ET1=0或者ET2=0)。典型用法是定時器1工作在自動再裝入時間常數(shù)的定時方式2。設置完成后,啟動定時器1(TR1=1或T2R=1)。STC15F2K60S2單片機是“一個時鐘周期”的8051單片機,選用定時器1作為波特率發(fā)生器時,應注意時鐘分頻的設置與波特率之間的關系,1T模式下的波特率時相同條件下12T模式的12倍。編程時應注意總結波特率的計算方法:串行口1用定時器1作為波特率發(fā)生器時,且定時器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無關??偨Y波特率的計算方法:當串行口1用定時器1作為波特率發(fā)生器且定時器1工作于模式2(8位自動重裝模式)時波特率=×(定時器1的溢出率)=×SYSclk/12n/(256-TH1)當串行口1用定時器1作為波特率發(fā)生器且定時器1工作于模式2(定時器2只有一種工作方式,即16位自動重裝方式,因此使用定時器2作為波特率發(fā)生器時,串口1的波特率為:串口1的波特率=SYSclk/12n/(65536-[RL_TH2,RL_TL2])/4。其中,RL_TH2是TH2的自動重裝寄存器,RL_TL2是TL2的自動重裝寄存器。在實際應用中,一般選用串行方式1或串行方式3。此時,波特率的設置,關鍵在于定時器/計數(shù)器1和定時器2的溢出率的計算。定時器2只有一種工作方式,即16位自動重裝方式,因此使用定時(2)串行口2波特率的設定對于串行口2,只能通過編程改變定時器2的溢出率來確定波特率。串行口2只有兩種工作方式:S2SM0=0為方式0(的8位數(shù)據(jù)位的UART工作方式);S2SM0=1為方式1(9位數(shù)據(jù)位的UART工作方式),它們的波特率計算方法相同,都是如下公式所示:

串行口2的波特率=SYSclk/12n/(65536-[RL_TH2,RL_TL2])/4(2)串行口2波特率的設定常用的串行口波特率、系統(tǒng)時鐘以及定時器1(工作于方式2時)重裝時間常數(shù)之間的關系如表8-4所示。可以直接從表中查得所需設置的時間常數(shù)。定時器1工作于方式0時以及使用定時器T2作為波特率發(fā)生器時的重裝時間常數(shù),可根據(jù)計算公式自行計算。常用的串行口波特率、系統(tǒng)時鐘以及定時器1(工作于方式2時)重5、串行接口通信應用舉例下面分別說明STC15F2K60S2單片機使用串口1和串口2的串行通信程序編程要點。在編程應用中,雖然可以采用查詢方式進行通信,但是,為了有效進行實時任務處理,一般采用中斷方式進行串行通信。(1)串口1的編程要點

1)設置串口的工作模式設置SCON寄存器的內(nèi)容。若要串口接收,需將其中的REN位置1。5、串行接口通信應用舉例2)設置正確的波特率

①使用定時器1作為波特率發(fā)生器時,需要設置定時器1的工作方式和時間常數(shù)(設定TMOD和TH1、TL1寄存器的內(nèi)容);啟動定時器1(置位TR1)。②使用定時器2作為波特率發(fā)生器時,需要設置定時器2寄存器和相應的位,包括:定時器2自動重裝寄存器T2H和T2L,T2_C/位,T2x12位,SMOD位。啟動T2(置位T2R),T2開始計數(shù)。2)設置正確的波特率3)設置串口的中斷優(yōu)先級(設置PS寄存器的內(nèi)容,也可以不設置,取默認值),設置相應的中斷控制位(ES和EA)。4)如要串口1發(fā)送,將數(shù)據(jù)送入SBUF。5)編制串行中斷服務程序,在中斷服務程序中要有清除中斷標志指令(將TI和RI清0)。3)設置串口的中斷優(yōu)先級(設置PS寄存器的內(nèi)容,也可以不設置(2)串口2的編程要點

1)設置串口2的工作模式設置S2CON寄存器中的S2SM0位。如要串口2接收,將S2REN置1。

2)設置串口2的波特率相應的寄存器和位。包括:T2H和T2L,T2_C/位,T2x12位。啟動T2(置位T2R),T2開始計數(shù)。(2)串口2的編程要點3)設置串口2的中斷優(yōu)先級(設置PS2和PS2H,也可以不設置,取默認值),設置打開相應的中斷控制位(ES2和EA)。4)如要串口2發(fā)送,將數(shù)據(jù)送入S2BUF。5)編制串行中斷服務程序,在中斷服務程序中要設置清除中斷標志指令(分別是接收完成標志S2RI和發(fā)送完成標志S2TI)。3)設置串口2的中斷優(yōu)先級(設置PS2和PS2H,也可以不設下面舉例說明12T模式下,STC15F2K60S2單片機串行通信程序的編制方法。【例8-1】設有甲、乙兩臺單片機,編寫程序,使兩臺單片機間實現(xiàn)如下串行通信功能。(假設系統(tǒng)時鐘為11.0592MHz。)甲機(發(fā)送機):將首址為ADDRT的128字節(jié)外部RAM數(shù)據(jù)塊順序向乙機發(fā)送;乙機(接收機):將接收的數(shù)據(jù),順序存放在以首址為ADDRR的外部RAM中。下面舉例說明12T模式下,STC15F2K60S2單片機串行硬件電路連接進行雙機通信時,二者的TxD和RxD信號線應交叉連接,即甲機的TxD連接乙機的RxD;甲機的RxD連接乙機的TxD。并且,電源地線要連接到一起。硬件電路連接解:甲機發(fā)送數(shù)據(jù)的程序流程如圖所示。圖8-15甲機發(fā)送程序流程圖解:甲機發(fā)送數(shù)據(jù)的程序流程如圖所示。圖8-15甲機發(fā)送程甲機(發(fā)送機)匯編語言程序:

$INCLUDE(STC15.INC);包含單片機寄存器定義文件

ORG 0000HLJMP MAINT ;主程序入口

ORG 0023HLJMP INTSE1 ;串口1中斷服務程序入口

ORG 0100HMAINT:MOV SP,#60H ;設置堆棧指針

MOV SCON,#01000000B ;置串行口工作方式1 MOV AUXR,#00H ;選擇定時器1作為波特率發(fā)生器MOV TMOD,#20H ;定時器1為工作方式2MOV TH1,#0FDH ;9600bps的時間常數(shù)

MOV TL1,#0FDHSETB TR1 ;啟動定時器1SETB ES ;串行口開中斷

SETB EA ;開中斷

MOV DPTR,#ADDRT ;ADDRT是首址,可以使用EQU定義

MOV R0,#00H ;傳送字節(jié)數(shù)初值

MOVX A,@DPTR ;取第一個發(fā)送字節(jié)

MOV SBUF,A ;啟動串行口發(fā)送

SJMP$ ;等待中斷甲機(發(fā)送機)匯編語言程序:;中斷服務程序INTSE1: CLR TI ;將中斷標志清零

CJNER0,#7FH,LOOPT;判斷128B是否發(fā)送完,若沒完,則轉(zhuǎn)

CLR ES ;全部發(fā)送完畢,禁止串行口中斷

LJMP ENDT ;轉(zhuǎn)中斷返回LOOPT: INC R0 ;修改計數(shù)值

INC DPTR ;修改地址指針

MOVX A,@DPTR ;取發(fā)送數(shù)據(jù)

MOV SBUF,A ;啟動串行口ENDT: RETI ;中斷返回

END;中斷服務程序甲機的C語言程序:#include“stc15.h”//包含單片機寄存器定義文件unsignedcharxdataADDRT[128]; //在外部RAM區(qū)定義128個單元unsignedcharnum=0; //聲明計數(shù)變量unsignedchar*psend; //指向發(fā)送數(shù)據(jù)區(qū)的指針voidmain(void) //主程序{ SCON=0x40; //置串行口工作方式1 AUXR=0x0; //選擇定時器1作為波特率發(fā)生器 TMOD=0x20; //定時器1為工作方式2 TH1=0xfd; //產(chǎn)生9600bps的時間常數(shù)

TL1=0xfd; TR1=1; //啟動定時器1 ES=1; //串行口開中斷

EA=1; //開中斷

psend=ADDRT; //設置發(fā)送數(shù)據(jù)緩沖區(qū)指針

SBUF=*psend; //發(fā)送第一個數(shù)據(jù)

while(1); //等待中斷}甲機的C語言程序:voidUART_ISR(void)interrupt4 //中斷號4是串口1中斷{ TI=0; //清發(fā)送中斷標志

num++; //修改計數(shù)變量值

if(num==0x7F)ES=0; //判斷是否發(fā)送完,若已完,則關中斷

else //否則,修改指針,發(fā)送下一個數(shù)據(jù)

{ psend++; SBUF=*psend; }}voidUART_ISR(void)interrupt乙機接收數(shù)據(jù)的程序流程如圖所示。圖8-16乙機接收數(shù)據(jù)流程圖乙機接收數(shù)據(jù)的程序流程如圖所示。圖8-16乙機接收數(shù)據(jù)流程注意,接收方的波特率必須和發(fā)送方的波特率相同。乙機接收匯編語言程序:$INCLUDE(STC15.INC);包含單片機寄存器定義文件

ORG 0000HLJMP MAINR ;轉(zhuǎn)主程序

ORG 0023HLJMP INTSE

溫馨提示

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

評論

0/150

提交評論