版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第七章 UART串行接口,串行通信是CPU與外界交換信息的一種基本通信方式。為了實(shí)現(xiàn)串行通信,絕大多數(shù)單片機(jī)都配置了UART串行接口。,1,行業(yè)相關(guān),71 串行通信概述,計(jì)算機(jī)與外界的信息交換稱為通信。基本的通信方式有兩種。 并行通信(parallel communication):所傳送數(shù)據(jù)的各位同時發(fā)送或接收。 串行通信(serial communication):所傳送數(shù)據(jù)的各位按順序一位一位地發(fā)送或接收。,2,行業(yè)相關(guān),在并行通信中,一個并行數(shù)據(jù)占多少位二進(jìn)制數(shù),就要多少根傳輸線,這種方式的特點(diǎn)是通信速度快,但傳輸線多,價(jià)格較貴,適合近距離傳輸。 串行通信僅需12根傳輸線,故在長距離傳
2、輸數(shù)據(jù)時比較經(jīng)濟(jì),但由于它每次只能傳送1位,所以傳送速度較慢。,3,行業(yè)相關(guān),圖7.1 基本通信方式圖示,4,行業(yè)相關(guān),711 同步通信和異步通信方式,串行通信分同步和異步兩種方式。,5,行業(yè)相關(guān),1異步通信ASYNC,在異步通信中數(shù)據(jù)或字符是逐幀(frame)傳送的。幀定義為一個字符的完整的通信格式,通常也稱為幀格式。最常見的幀格式一般是先用一個起始位“0”表示字符的開始;然后是58位數(shù)據(jù),規(guī)定低位在前,高位在后;其后是奇偶校驗(yàn)位;最后是停止位,用以表示字符的結(jié)束,停止位可以是1位、1.5位、2位,不同的計(jì)算機(jī)規(guī)定有所不同。從起始位開始到停止位結(jié)束就構(gòu)成完整的1幀。,6,行業(yè)相關(guān),起始位通信
3、線上沒有數(shù)據(jù)傳送時,為高電平(邏輯1);當(dāng)要發(fā)送數(shù)據(jù)時,首先發(fā)1個低電平信號(邏輯0),此信號稱為“起始位”,表示開始傳輸1幀數(shù)據(jù)。 數(shù)據(jù)位起始位之后的位即數(shù)據(jù)位。數(shù)據(jù)位可以是5、6、7或8位(不同計(jì)算機(jī)的規(guī)定不同),上圖的數(shù)據(jù)位為8位。一般從最低位開始傳送,最高位在最后。,7,行業(yè)相關(guān),奇偶校驗(yàn)位數(shù)據(jù)位之后的位為奇偶校驗(yàn)位(有的方式具有)。此位可用于判別字符傳送的正確性,其有3種可能的選擇,即奇、偶、無校驗(yàn),用戶可根據(jù)需要選擇(在有的格式中,該位可省略)。在80C51單片機(jī)中,此位還可以用來確定該幀字符信息的性質(zhì)(地址或數(shù)據(jù))。 停止位校驗(yàn)位后為停止位,用于表示1幀結(jié)束,用高電平(邏輯1)表
4、示。停止位可以是1、15或2位,不同計(jì)算機(jī)的規(guī)定有所不同。,8,行業(yè)相關(guān),異步通信的主要特點(diǎn)如下: 進(jìn)行串行通信的單片機(jī)的時鐘相互獨(dú)立;其時鐘頻率可以不相同;在通信時不要求有同步時鐘信號。由于異步通信是逐幀進(jìn)行傳輸?shù)?,各位之間的時間間隔應(yīng)該相同,所以必須保證2個單片機(jī)之間有相同的傳送波特率。如果傳送波特率不同,則時間間隔不同;當(dāng)誤差超過5時,就不能正常進(jìn)行通信。由于信息傳輸可以是隨時不間斷地進(jìn)行的,因而幀與幀之間的時間間隔可以是不固定的,間隙處為高電平。,9,行業(yè)相關(guān),由于異步通信每傳送一幀有固定格式,通信雙方只需按約定的幀格式來發(fā)送和接收數(shù)據(jù),所以硬件結(jié)構(gòu)比同步通信方式簡單。此外,它還能利用
5、校驗(yàn)位檢測錯誤,所以這種通信方式應(yīng)用較廣泛。在單片機(jī)中主要是采用異步通信方式。,10,行業(yè)相關(guān),2同步通信SYNC,在同步通信中,數(shù)據(jù)或字符開始處是用一同步字符來指示(一般約定為l2個字符),以實(shí)現(xiàn)發(fā)送端和接收端同步,一旦檢測到約定同步字符,下面就連續(xù)、順序地發(fā)送和接收數(shù)據(jù)。,11,行業(yè)相關(guān),由于同步通信數(shù)據(jù)塊傳送時去掉了每個數(shù)字都必須具有的字符開始和結(jié)束的標(biāo)志,且它一次可以發(fā)送一個數(shù)據(jù)段(多個數(shù)據(jù)),因此,其速度高于異步通信;但這種方式要求接收和發(fā)送時鐘嚴(yán)格保持同步,在通信時通常要求有同步時鐘信號,對硬件結(jié)構(gòu)要求較高。由于這種方式易于進(jìn)行串行外圍擴(kuò)展,所以目前很多型號的單片機(jī)都增加了串行同步
6、通信接口,如目前已得到廣泛應(yīng)用的I2C串行總線和SPI串行接口等。,12,行業(yè)相關(guān),712 串行通信的數(shù)據(jù)傳送速率,傳送速率是指數(shù)據(jù)傳送的速度。用b/s或bps(比特秒)表示,稱為比特率。在二進(jìn)制的情況下,比特率與波特率數(shù)值相等,因而在單片機(jī)的串行通信中,常稱為波特率。 假如數(shù)據(jù)傳送的速率為120個字符每秒,每個字符由1個起始位、8個數(shù)據(jù)位和1個停止位組成,則其傳送波特率為: 10b120s1200bs1200波特 每一位的傳送時間即為波特率的倒數(shù):,13,行業(yè)相關(guān),異步通信的數(shù)據(jù)傳送速率一般為50b/s100kb/s,常用于計(jì)算機(jī)到CRT終端,以及雙機(jī)或多機(jī)之間的通信等。,14,行業(yè)相關(guān),7
7、13 串行通信的方式,在串行通信中,數(shù)據(jù)是在兩機(jī)之間傳送的。按照數(shù)據(jù)傳送方向,串行通信可分為單工(Simplex)制式、半雙工(half duplex)制式和全雙工(full duplex)制式。,15,行業(yè)相關(guān),圖72 串行通信方式示意圖 (1)單工制式 在單工制式下,數(shù)據(jù)在甲機(jī)和乙機(jī)之間只允許單方向傳送。兩機(jī)之間只需1條數(shù)據(jù)線。,16,行業(yè)相關(guān),(2)半雙工制式 在半雙工制式下,數(shù)據(jù)在甲機(jī)和乙機(jī)之間允許雙方向傳送,但它們之間只有一個通信回路,接收和發(fā)送不能同時進(jìn)行,只能分時發(fā)送和接收(即甲機(jī)發(fā)送,乙機(jī)接收,或者乙機(jī)發(fā)送,甲機(jī)接收),因而兩機(jī)之間只需1條數(shù)據(jù)線。,17,行業(yè)相關(guān),(3)全雙工
8、制式 在全雙工制式下,甲、乙兩機(jī)之間數(shù)據(jù)的發(fā)送和接收可以同時進(jìn)行,稱為“全雙工傳送”。全雙工形式的串行通信必須使用2條數(shù)據(jù)線。 不管哪種形式的串行通信,在兩機(jī)之間均應(yīng)有公共地線。,18,行業(yè)相關(guān),* 信號的調(diào)制與解調(diào),當(dāng)異步通信的距離在15m之內(nèi)時,計(jì)算機(jī)之間可以直接進(jìn)行通信。而當(dāng)傳輸距離較遠(yuǎn)時,通常是用電話線傳送。由于電話線頻帶不夠?qū)?,再加上遠(yuǎn)距離傳輸時信號不可避免地衰減,因而使信號發(fā)生明顯的畸變。 在發(fā)送時要用調(diào)制器(modulator)把數(shù)字信號轉(zhuǎn)換為模擬信號,并加以放大再傳送,這個過程叫做調(diào)制。在接收時,再用解調(diào)器(demodulator)檢測此模擬信號,并把它轉(zhuǎn)換成數(shù)字信號再送入計(jì)算
9、機(jī)接口,這個過程即解調(diào)。,19,行業(yè)相關(guān),714 通信協(xié)議,通信協(xié)議是指在計(jì)算機(jī)之間進(jìn)行數(shù)據(jù)傳輸時的一些約定,包括通信方式、波特率、命令碼的約定等。為保證計(jì)算機(jī)之間能準(zhǔn)確、可靠地通信,相互之間必須遵循統(tǒng)一的通信協(xié)議。在通信之前一定要先設(shè)置好通信協(xié)議。,20,行業(yè)相關(guān),72 80C51串行口簡介,80C51的串行口是一個可編程的全雙工串行通信接口,通過軟件編程它可以作通用異步接收和發(fā)送器UART(Universal Asynchronous ReceiverTransmitter)用,也可作同步移位寄存器用。其幀格式可有8位、10位和11位,并能設(shè)置各種波特率,使用靈活方便。,21,行業(yè)相關(guān),7
10、21 串行口結(jié)構(gòu)與工作原理,80C51串行口主要由接收與發(fā)送緩沖寄存器SBUF、輸入移位寄存器以及串行控制寄存器SCON等組成。波特率發(fā)生器可以利用定時器T1或T2控制發(fā)送和接收的速率。SCON用于存放串行口的控制和狀態(tài)信息;發(fā)送數(shù)據(jù)緩沖寄存器SBUF用于存放準(zhǔn)備發(fā)送出去的數(shù)據(jù);接收數(shù)據(jù)緩沖寄存器SBUF用于接收由外部輸入到輸入移位寄存器中的數(shù)據(jù)。80C51串行口正是通過對上述專用寄存器的設(shè)置、檢測與讀取來管理串行通信的。,22,行業(yè)相關(guān),圖73 串行口結(jié)構(gòu)框圖,23,行業(yè)相關(guān),在進(jìn)行串行通信時,外界數(shù)據(jù)通過引腳RXD(P3.0)輸入。輸入數(shù)據(jù)首先逐位進(jìn)入輸入移位寄存器,由串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)
11、據(jù),然后再送入接收寄存器。在接收寄存器中采用了雙緩沖結(jié)構(gòu),以避免在接收到第2幀數(shù)據(jù)前,CPU未及時響應(yīng)接收寄存器前一幀的中斷請求,沒把前一幀數(shù)據(jù)讀走,而造成2幀數(shù)據(jù)重疊的錯誤。在發(fā)送時,串行數(shù)據(jù)通過引腳TXD(P3.1)輸出。由于CPU是主動的,因此不會產(chǎn)生寫重疊問題,一般不需要雙緩沖器結(jié)構(gòu)。要發(fā)送的數(shù)據(jù)通過發(fā)送控制器控制邏輯門電路逐位輸出。,24,行業(yè)相關(guān),722 串行口寄存器,與串行口工作有關(guān)的寄存器共有6個,分別是串行口控制寄存器SCON、接收與發(fā)送緩沖寄存器SBUF、電源控制寄存器PCON、中斷允許控制寄存器IE、中斷優(yōu)先級寄存器IP。,25,行業(yè)相關(guān),1串行口控制寄存器SCON,串行
12、口控制寄存器SCON用于串行通信的方式選擇、接收和發(fā)送控制,并可反映串行口的工作狀態(tài)。,26,行業(yè)相關(guān),SCON7和SCON6位 SM0和SM1串行方式選擇位 表71 串行口工作方式選擇,27,行業(yè)相關(guān),SCON.5位 SM2多機(jī)通信控制位。 在方式2和方式3中,SM2主要用于進(jìn)行多機(jī)通信控制。當(dāng)串行口以方式2或方式3接收時,如果SM2=1,允許多機(jī)通信,且接收到第9位RB8為0時,則RI不置1不接收主機(jī)發(fā)來的數(shù)據(jù);如果SM2=1,且RB8為1,則RI置1,產(chǎn)生中斷請求,將接收到的8位數(shù)據(jù)送入SBUF。當(dāng)SM2=0時,不論RB8為0還是1,都將收到的8位數(shù)據(jù)送入SBUF,并產(chǎn)生中斷。 在方式1
13、中,當(dāng)處于接收狀態(tài)時,若SM2=1,則只有接收到有效的停止位時,RI才置1。在方式0中,SM2應(yīng)置0。,28,行業(yè)相關(guān),SCON.4位 REN允許串行接收位。 REN=1時,允許接收;REN=O時,禁止接收。由軟件置位或清除。,29,行業(yè)相關(guān),SCON.3位 TB8發(fā)送數(shù)據(jù)的第9位(D8)。 在方式2或方式3中,根據(jù)需要由軟件置位或復(fù)位。雙機(jī)通信時,它可約定作奇偶校驗(yàn)位;在多機(jī)通信中,可作為區(qū)別地址幀或數(shù)據(jù)幀的標(biāo)識位。一般由指令設(shè)定地址幀時,設(shè)TB8為1;而設(shè)定數(shù)據(jù)幀時,設(shè)TB8為0。方式0和方式1中沒用該位。,30,行業(yè)相關(guān),SCON.2位 RB8接收數(shù)據(jù)的第9位(D8)。 在方式2或方式3
14、中,RB8的狀態(tài)與TB8相呼應(yīng),(如可以是約定的奇偶校驗(yàn)位,也可以是約定的地址/數(shù)據(jù)標(biāo)識位)。例如,當(dāng)SM2=1時,如果RB8為0,則說明收到的是數(shù)據(jù)幀。,31,行業(yè)相關(guān),SCON.1位 TI發(fā)送中斷標(biāo)志位。 在方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置位;在其他方式中,在發(fā)送停止位之初由硬件置位。TI=1時,可申請中斷,也可供軟件查詢用。在任何方式中,都必須由軟件來清除TI。 SCON.0位 RI接收中斷標(biāo)志位。 在方式0中,接收完8位數(shù)據(jù)后,由硬件置位;在其他方式中,在接收停止位的中間,由硬件置位。RI=1時,可申請中斷,也可供軟件查詢用。在任何方式中,都必須由軟件清除RI。,32,行業(yè)相關(guān),S
15、CON的低2位與中斷有關(guān)。 SCON的地址為98H,可以位尋址。復(fù)位時,SCON的所有位均清0。,33,行業(yè)相關(guān),2數(shù)據(jù)緩沖寄存器SBUF,數(shù)據(jù)緩沖寄存器SBUF實(shí)際上是2個寄存器:發(fā)送數(shù)據(jù)緩沖寄存器和接收數(shù)據(jù)緩沖寄存器。接收與發(fā)送緩沖寄存器SBUF采用同一個地址代碼99H,其寄存器名亦同樣為SBUF。CPU通過不同的操作命令,區(qū)別這2個寄存器,所以不會因?yàn)榈刂反a相同而產(chǎn)生錯誤。當(dāng)CPU發(fā)出寫SBUF命令時,即向發(fā)送緩沖寄存器中裝載新的信息,同時啟動數(shù)據(jù)串行發(fā)送;當(dāng)CPU發(fā)出讀SBUF命令時,即讀接收緩沖寄存器的內(nèi)容。,34,行業(yè)相關(guān),3電源控制寄存器PCON,電源控制寄存器PCON主要用于
16、電源控制,PCON的最高位SMOD是串行口的波特率倍增位:當(dāng)SMOD為1時,波特率加倍;當(dāng)SMOD為O時,波特率不變。,35,行業(yè)相關(guān),4中斷允許控制寄存器IE,中斷允許控制寄存器IE用于控制與管理單片機(jī)的中斷系統(tǒng)。 IE的ES位用于控制串行口的中斷: 當(dāng)ES=O時,禁止串行口中斷; 當(dāng)ES=1時,允許串行口中斷。,36,行業(yè)相關(guān),5中斷優(yōu)先級寄存器IP,中斷優(yōu)先級寄存器IP用于管理單片機(jī)中各中斷源中斷優(yōu)先級。 IP的PS位用于設(shè)置串行口中斷的優(yōu)先級: 當(dāng)PS=0時,串行口中斷為低優(yōu)先級; 當(dāng)PS=1時,串行口中斷為高優(yōu)先級。,37,行業(yè)相關(guān),723 80C51的幀格式,80C51串行口通過編
17、程可設(shè)置四種工作方式及三種幀格式。,38,行業(yè)相關(guān),方式0以8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。 方式1以10位為一幀傳輸,設(shè)有1個起始位“0”、8個數(shù)據(jù)位和1個停止位“1”。,39,行業(yè)相關(guān),方式2和3以11位為一幀傳輸,設(shè)有1個起始位“0”、8個數(shù)據(jù)位、1個可編程位(第9數(shù)據(jù)位)D8和1個停止位“1”。 可編程位D8由軟件置“1”或清“0”,該位可作檢驗(yàn)位,也可作它用。,40,行業(yè)相關(guān),724 波特率的設(shè)置,在串行通信前,首先要設(shè)置收發(fā)雙方對發(fā)送或接收的數(shù)據(jù)傳送速率,即波特率。通過軟件對80C51串行口編程可設(shè)定4種工作方式。這4種方式波特率的計(jì)算方法不同:方式0和方式
18、2的波特率是固定的,而方式1和方式3的波特率是可變的,由定時器T1或T2(AT89S52)的溢出率控制。,41,行業(yè)相關(guān),1 方式0和方式2的波特率,方式0中,每個機(jī)器周期發(fā)送或接收1位數(shù)據(jù), 且不受SMOD的影響。 方式2的波特率取決于PCON中SMOD之值。 當(dāng)SMOD0時,波特率為fosc的164; 若SMOD1,則波特率為fosc的132,即:,42,行業(yè)相關(guān),2方式1和方式3的波特率,80C51串行口方式1和方式3的波特率由定時器T1的溢出率與SMOD的值決定,即: T1溢出率取決于計(jì)數(shù)速率和定時器的預(yù)置值。 計(jì)數(shù)速率與TMOD寄存器中CT的狀態(tài)有關(guān)。 當(dāng)CT0時,計(jì)數(shù)速率fosc1
19、2; 當(dāng)CT1時,計(jì)數(shù)速率取決于外部輸入時鐘頻率。,43,行業(yè)相關(guān),當(dāng)定時器T1作波特率發(fā)生器使用時,通常是選用自動重裝載方式,即方式2。設(shè)計(jì)數(shù)初值為X,那么每過(256X)個機(jī)器周期,定時器1就會產(chǎn)生一次溢出。為了避免因溢出而產(chǎn)生不必要的中斷,此時應(yīng)禁止T1中斷。溢出周期為: 溢出率為溢出周期之倒數(shù),所以: 則定時器T1方式2的初始值為:,44,行業(yè)相關(guān),表7.2 定時器T1的常用波特率,45,行業(yè)相關(guān),【例1】已知80C51單片機(jī)時鐘振蕩頻率為11.0592MHz選用定時器T1工作方式2作波特率發(fā)生器,波特率為2400波特,求時間常數(shù)。 解:設(shè)波特率控制位SMOD0,定時器T1的時間常數(shù)為
20、: 所以TH1TL1F4H。,46,行業(yè)相關(guān),由于上述公式包含除法,所以當(dāng)晶振頻率與波特率不同時,計(jì)算值有時會有一定誤差。例如,如果晶振頻率為12MHz,波特率要求為2400,在SMOD=0時,TH1=F3H,波特率的實(shí)際計(jì)算值為2404,誤差為0.11。但如果2個單片機(jī)的波特率相同,例如均為2404,則不會影響通信;如果2個單片機(jī)的波特率誤差超過2.5,則可能會引起通信錯誤。,47,行業(yè)相關(guān),AT89S52單片機(jī)的定時器T2也可作為波特率發(fā)生器。,48,行業(yè)相關(guān),7.3 串行通信工作方式,通過軟件編程可使串行通信有4種工作方式。,49,行業(yè)相關(guān),731 方式0,在方式0下,串行口作同步移位寄
21、存器用,以8位數(shù)據(jù)為1幀,先發(fā)送或接收最低位,每個機(jī)器周期發(fā)送或接收一位,故其波特率是固定的,為fosc12。串行數(shù)據(jù)由RXD(P3.0)端輸入或輸出。同步移位脈沖由TXD(P3.1)端送出。這種方式常用于擴(kuò)展I/O口。采用不同的指令實(shí)現(xiàn)輸入或輸出。,50,行業(yè)相關(guān),(1)發(fā) 送 當(dāng)執(zhí)行“MOV SBUF,A”指令時,CPU將1字節(jié)的數(shù)據(jù)寫入發(fā)送緩沖寄存器SBUF(99H),串行口即把8位數(shù)據(jù)以fosc12的波特率從RXD端送出(低位在前)。發(fā)送完成后,置中斷標(biāo)志位TI為1。如要繼續(xù)發(fā)送應(yīng)將TI清0。,51,行業(yè)相關(guān),(2)接 收 由于REN是串行口允許接收控制位,因此在準(zhǔn)備接收時,首先要用軟
22、件置REN為1,使其允許接收;然后,執(zhí)行“MOV A,SBUF”指令,CPU即開始從RXD端以fosc12波特率輸入數(shù)據(jù)(低位在前),當(dāng)接收到8位數(shù)據(jù)時,置中斷標(biāo)志RI為1。讀取數(shù)據(jù)后,一定要將RI清0。,52,行業(yè)相關(guān),串行控制寄存器中,TB8和RB8位在方式0中未用。每當(dāng)發(fā)送或接收完8位數(shù)據(jù)時,由硬件將發(fā)送中斷TI或接收中斷RI標(biāo)志置位。不管是中斷方式還是查詢方式,都不會清除TI或RI標(biāo)志,必須用軟件清0。在方式0中,SM2位必須為0。,53,行業(yè)相關(guān),圖73 串行口結(jié)構(gòu)框圖,54,行業(yè)相關(guān),732 方式1,在方式1下,串行口為10位通用異步接口。發(fā)送或接收1幀數(shù)據(jù),包括1位起始位“0”、
23、8位數(shù)據(jù)位和1位停止位“1”,其傳送波特率可調(diào)。,55,行業(yè)相關(guān),(1)發(fā) 送 當(dāng)執(zhí)行“MOV SBUF,A”指令時,CPU將1字節(jié)的數(shù)據(jù)寫入發(fā)送緩沖寄存器SBUF(99H),就啟動發(fā)送器發(fā)送,數(shù)據(jù)從引腳TXD(P31)端輸出。當(dāng)發(fā)送完1幀數(shù)據(jù)后,TI標(biāo)志置1,在中斷方式下將申請中斷,通知CPU可以發(fā)送下一個數(shù)據(jù)。如要繼續(xù)發(fā)送,必須將TI清0。,56,行業(yè)相關(guān),圖73 串行口結(jié)構(gòu)框圖,57,行業(yè)相關(guān),(2)接 收 接收時,先使REN置1,使串行口處于允許接收狀態(tài),RI標(biāo)志為0,串行口采樣引腳RXD(P30)。當(dāng)采樣到1至0的跳變時,確認(rèn)是起始位“0”,就開始接收1幀數(shù)據(jù)。當(dāng)停止位到來時,RB8
24、位置1,同時,中斷標(biāo)志位RI也置1,在中斷方式下將申請中斷,通知CPU從SBUF取走接收到的1個數(shù)據(jù)。 不管是中斷方式,還是查詢方式,都不會清除TI或RI標(biāo)志,必須用軟件清0。,58,行業(yè)相關(guān),733 方式2和方式3,方式2和方式3均為11位異步通信方式,只是波特率的設(shè)置方法不同,其余完全相同。這兩種方式發(fā)送或接收1幀的信息包括1位起始位“0”、8位數(shù)據(jù)位、1位可編程位和1位停止位“1”。其信息傳送波特率與SMOD有關(guān)。,59,行業(yè)相關(guān),(1)發(fā) 送 發(fā)送前,首先根據(jù)通信協(xié)議由軟件設(shè)置TB8(如作奇偶校驗(yàn)位或地址數(shù)據(jù)標(biāo)識位),然后,將要發(fā)送的數(shù)據(jù)寫入SBUF即可啟動發(fā)送器。 發(fā)送過程是由執(zhí)行任
25、何一條以SBUF作為目的寄存器的指令而啟動的(寫SBUF指令),把8位數(shù)據(jù)裝入SBUF,同時,串行口還自動把TB8裝到發(fā)送移位寄存器的第9位數(shù)據(jù)位置上,并通知發(fā)送控制器要求進(jìn)行一次發(fā)送,然后即從TXD(P31)端輸出1幀數(shù)據(jù)。,60,行業(yè)相關(guān),圖73 串行口結(jié)構(gòu)框圖,61,行業(yè)相關(guān),(2)接 收 在接收時,先置位REN為1,使串行口處于允許接收狀態(tài),同時還要將RI清0。在滿足這個條件的前提下,再根據(jù)SM2的狀態(tài)(因?yàn)镾M2是方式2和方式3的多機(jī)通信控制位)和所接收到的RB8的狀態(tài),才能決定此串行口在信息到來后是否會使RI置1。如果RI置1,在中斷方式下將申請中斷,接收數(shù)據(jù)。 當(dāng)SM2=0時,不
26、管RB8為0還是為1,RI都置1,此串行口將接收發(fā)來的信息。 當(dāng)SM2=1,且RB8為1時,表示在多機(jī)通信情況下,接收的信息為地址幀,此時RI置1。串行口將接收發(fā)來的地址。 當(dāng)SM2=1,且RB8為0時,表示接收的信息為數(shù)據(jù)幀,但不是發(fā)給本從機(jī)的,此時RI不置1,因而SBUF中所接收的數(shù)據(jù)幀將丟失。,62,行業(yè)相關(guān),在方式2和方式3下,同樣不管是中斷方式,還是查詢方式,都不會清除TI或RI標(biāo)志。在發(fā)送和接收之后,也都必須用軟件清TI和RI位。,63,行業(yè)相關(guān),734 多機(jī)通信,80C51的方式2和方式3有一個專門的應(yīng)用領(lǐng)域,即多機(jī)通信。這一功能使它可以方便地應(yīng)用于集散式分布系統(tǒng)中。這種系統(tǒng)采用
27、一臺主機(jī)和多臺從機(jī)。,圖74 多機(jī)通信連接圖,64,行業(yè)相關(guān),多機(jī)通信的實(shí)現(xiàn),主要靠主、從機(jī)之間正確地設(shè)置與判斷多機(jī)通信控制位SM2和發(fā)送或接收的第9數(shù)據(jù)位(D8)。 在編程前,首先要給各從機(jī)定義地址編號,如分別為00H、01H、02H。當(dāng)主機(jī)想發(fā)送一數(shù)據(jù)塊給幾個從機(jī)中的一個時,它首先送出一個地址字節(jié),以辨認(rèn)從機(jī)。地址字節(jié)和數(shù)據(jù)字節(jié)可用第9數(shù)據(jù)位(TB8)來區(qū)別,地址為1,數(shù)據(jù)為0。所以,在主機(jī)發(fā)送地址幀時,地址數(shù)據(jù)標(biāo)識位TB8應(yīng)設(shè)置為“1”,以表示是地址幀。 如:MOVSCON,#0D8H;設(shè)串行口為方式3, TB8置“1”,準(zhǔn)備發(fā)地址,65,行業(yè)相關(guān),此時,所有的從機(jī)初始化時均置SM21,
28、使它們只處于接收地址幀的狀態(tài)。 如:MOVSCON,#0F0H;置串行口為方式3, SM21,允許接收 當(dāng)從機(jī)接收到從主機(jī)發(fā)來的信息后,第9位RB8若為“1”,則置位中斷標(biāo)志RI,并在中斷后判斷主機(jī)送來的地址與本從機(jī)地址是否相符。若相符,則被尋址的從機(jī)就清除其SM2標(biāo)志,即SM20,準(zhǔn)備接收即將從主機(jī)送來的數(shù)據(jù)幀;未被選中的從機(jī)仍保持SM21。,66,行業(yè)相關(guān),當(dāng)主機(jī)發(fā)送數(shù)據(jù)幀時,應(yīng)置TB80。此時,雖然各從機(jī)都能接收到,但由于TB80,所以只有SM20的那個被尋址的從機(jī)才能接收到數(shù)據(jù),那些未被選中的從機(jī)將不理睬進(jìn)入到串行口的數(shù)據(jù)字節(jié),繼續(xù)進(jìn)行它們自己的工作,直到一個新的地址字節(jié)到來,這樣就實(shí)
29、現(xiàn)了主機(jī)控制的主從機(jī)之間的通信。 綜上所述,通信只能在主從機(jī)之間進(jìn)行,從機(jī)之間的通信只有經(jīng)主機(jī)才能實(shí)現(xiàn)。,67,行業(yè)相關(guān),多機(jī)之間的通信過程可歸納如下: (1)主、從機(jī)均初始化為方式2或方式3,置SM21,允許中斷。 (2)主機(jī)置TB81,發(fā)送要尋址的從機(jī)地址。 (3)所有從機(jī)均接收主機(jī)發(fā)送的地址,并進(jìn)行地址比較。 (4)被尋址的從機(jī)確認(rèn)地址后,置本機(jī)SM20,向主機(jī)返回地址,供主機(jī)核對。 (5)核對無誤后,主機(jī)向被尋址的從機(jī)發(fā)送命令,通知從機(jī)接收或發(fā)送數(shù)據(jù)。 (6)通信只能在主、從機(jī)之間進(jìn)行,兩個從機(jī)之間的通信需通過主機(jī)作中介。 (7)本次通信結(jié)束后,主、從機(jī)重置SM21,主機(jī)可再對其他從機(jī)
30、尋址。,68,行業(yè)相關(guān),在實(shí)際應(yīng)用中,因?yàn)閱纹瑱C(jī)功能有限,因而在較大的測控系統(tǒng)中,常常把單片機(jī)應(yīng)用系統(tǒng)作為前端機(jī)(下位機(jī)或從機(jī))直接用于控制對象的數(shù)據(jù)采集與控制,而把PC機(jī)作為中央處理機(jī)(上位機(jī)或主機(jī))用于數(shù)據(jù)處理和對下位機(jī)的監(jiān)控管理。它們之間的信息交換主要是采用串行通信,此時單片機(jī)可直接利用其串行接口,而PC機(jī)可利用其配備的8250或8251、16450等可編程串行接口芯片。實(shí)現(xiàn)單片機(jī)與PC機(jī)串行通信的關(guān)鍵是在通信協(xié)議的約定上要一致,例如,應(yīng)設(shè)定相同的波特率及幀格式等。在正式工作之前,雙方應(yīng)先互發(fā)聯(lián)絡(luò)信號,以確保通信收發(fā)數(shù)據(jù)的準(zhǔn)確性。,69,行業(yè)相關(guān),74 串行口應(yīng)用舉例,本節(jié)將介紹串行口在
31、作IO擴(kuò)展及一般異步通信和多機(jī)通信中的應(yīng)用原理及實(shí)例。,70,行業(yè)相關(guān),741 用串行口擴(kuò)展IO口,串行口的方式0主要用于擴(kuò)展并行IO口。此處將給出實(shí)用線路和簡單的控制指令。,71,行業(yè)相關(guān),例7.1 用并行輸入8位移位寄存器74HC165擴(kuò)展16位并行輸入口。編程實(shí)現(xiàn)從16位擴(kuò)展口讀入20字節(jié)數(shù)據(jù),并把它們轉(zhuǎn)存到內(nèi)部RAM的50H63H中。,圖75 利用串行口擴(kuò)展輸入口,72,行業(yè)相關(guān),解:在此采用74HC165與單片機(jī)相連實(shí)現(xiàn)I/O口擴(kuò)展,是利用80C51的3根口線擴(kuò)展為16根輸入口線的實(shí)用電路,其由2塊74HC165串接而成。74HC165是并入串出移位寄存器(也可選用其他同樣功能的CM
32、OS器件)。圖中,CK為時鐘脈沖輸入端,D0D7為并行輸入端,SIN、QH分別為數(shù)據(jù)的輸入、輸出端。前級的數(shù)據(jù)輸出端QH與后級的信號輸入端SIN相連。S/L=0時,允許并行置入數(shù)據(jù);S/L=1時,允許串行移位。,73,行業(yè)相關(guān),MOVR7,#20;設(shè)置讀入字節(jié)數(shù) MOVR0,#50H;設(shè)片內(nèi)RAM指針 SETBF0;設(shè)置讀入字節(jié)奇偶數(shù)標(biāo)志 RCV0:CLRP1.0;允許并行置入數(shù)據(jù) SETBP1.0;允許串行移位 RCV1:MOVSCON,#10H;設(shè)串行口方式0并啟動接收 JNBRI,$;等待接收一幀數(shù)據(jù) CLRRI;清接收中斷標(biāo)志 MOVA,SBUF;取緩沖器數(shù)據(jù) MOVR0,A INCR
33、0 CPLF0 JBF0,RCV2;判是否接收完偶數(shù)幀,接收完則 DECR7 重新并行置入 SJMPRCV1;否則再接收一幀 RCV2:DJNZR7,RCV0;判是否已讀入預(yù)定的字節(jié)數(shù) ;對讀入數(shù)據(jù)進(jìn)行處理,74,行業(yè)相關(guān),程序中F0用來作讀入字節(jié)數(shù)的奇偶性標(biāo)志。由于每次由擴(kuò)展口并行置入到移位寄存器的是2個字節(jié)數(shù)據(jù),置入1次,串行口應(yīng)接收2幀數(shù)據(jù)。故已接收的數(shù)據(jù)字節(jié)數(shù)為奇數(shù)時F00,不再并行置入數(shù)據(jù)就直接啟動接收過程;否則F01,在啟動接收過程前,應(yīng)該先在外部移位寄存器中置入新的數(shù)據(jù)。,75,行業(yè)相關(guān),【例72】 用2片8位串入并出移位寄存器74HC164作擴(kuò)展輸出口。 編程使這16個發(fā)光二極
34、管交替為間隔點(diǎn)亮狀態(tài),循環(huán)交替時間為2s。,圖76 利用串行口擴(kuò)展輸出接口,76,行業(yè)相關(guān),74HC164是串行輸入、并行輸出移位寄存器。Q0Q7為并行輸出端;A、B為串行輸入端;CLR為清除端,零電平時,使74HC164輸出清“0”;CK為時鐘脈沖輸入端,在CK脈沖的上升沿作用下實(shí)現(xiàn)移位。在CK0,CLR1時,74HC164保持原來數(shù)據(jù)狀態(tài)。 由于74HC164無并行輸出控制端,在串行輸入過程中其輸出端的狀態(tài)會不斷變化,故在某些使用場合,在74HC164與輸出裝置之間還應(yīng)加上輸出可控的緩沖級(如74HC244),以便在串行輸入過程結(jié)束后再輸出。圖中的輸出裝置是16位發(fā)光二極管。由于74HC1
35、64在低電平輸出時允許通過的電流可達(dá)8mA,故不需再加驅(qū)動電路。,77,行業(yè)相關(guān),ST:MOVSCON,#00H;設(shè)串行口為方式0 MOVA,#55H;二極管間隔點(diǎn)亮初值 LP2:MOVR0,#2;輸出口字節(jié)數(shù) CLRP1.0;對74HC164清0 SETBP1.0;允許數(shù)據(jù)串行移位 LP1:MOVSBUF,A;啟動串行口發(fā)送 JNBTI,$;等待1幀發(fā)送結(jié)束 CLRTI;清串行口發(fā)送中斷標(biāo)志位 DJNZR0,LP1;判斷預(yù)定字節(jié)數(shù)發(fā)送完否 LCALLDEL2s;調(diào)延時2s子程序(略) CPLA;交替點(diǎn)亮二極管 SJMPLP2;循環(huán)顯示,78,行業(yè)相關(guān),從理論上講,74HC164或74HC16
36、5可以無限地串級上去,進(jìn)一步擴(kuò)展輸入輸出并行口,但這種擴(kuò)展方法,輸入輸出的速度不高,移位時鐘頻率為fosc12。若fosc=12MHz,則每移1位需1s。,79,行業(yè)相關(guān),742 用串行口進(jìn)行異步通信,圖77 雙機(jī)異步通信連接圖,80,行業(yè)相關(guān),【例73】 編程把甲機(jī)片內(nèi)RAM的60H7FH單元中的數(shù)據(jù)塊從串行口輸出。定義在工作方式3下發(fā)送,TB8用作奇偶校驗(yàn)位。采用定時器T1方式2作波特率發(fā)生器,波特率為4800,fosc=11.0592MHz,定時器初始預(yù)置值TH1=TL1=0FAH。 編程使乙機(jī)從甲機(jī)接收32個字節(jié)數(shù)據(jù)塊,并存入片外1000H101FH單元。接收過程中要求判奇偶校驗(yàn)標(biāo)志R
37、B8。若出錯,則置F0標(biāo)志為1,若正確則置F0標(biāo)志為0,然后返回。,81,行業(yè)相關(guān),解:編寫發(fā)送子程序如下: MOVTMOD,#20H;設(shè)置定時器T1為方式2 MOVTL1,#0FAH;設(shè)預(yù)置值 MOVTH1,#0FAH SETBTR1;啟動定時器T1 MOVSCON,#0C0H;設(shè)置串行口為方式3 MOVPCON,#00H ;SMOD0 MOVR0,#60H;設(shè)數(shù)據(jù)決指針 MOVR7,#20H;設(shè)數(shù)據(jù)長度20H TRS: MOVA,R0;取數(shù)據(jù)送至A MOVC,P MOVTB8,C;奇偶位P送至TB8 MOVSBUF,A;數(shù)據(jù)送至SBUF,啟動發(fā)送 WAIT:JNBTI,$;判1幀是否發(fā)送完
38、 CLRTI INCR0;更新數(shù)據(jù)單元 DJNZR7,TRS;循環(huán)發(fā)送至結(jié)束 RET;返回,82,行業(yè)相關(guān),在進(jìn)行雙機(jī)通信時,兩機(jī)應(yīng)用相同的工作方式和波特率,因而接收子程序編程如下: MOVTMOD,#20H;設(shè)置定時器T1為方式2 MOVTL1,#0FAH;設(shè)預(yù)置值 MOVTH1,#0FAH SETBTR1;啟動定時器T1 MOVSCON,#0C0H;設(shè)置串行口為方式3 MOVPCON,#00H;SMOD0 MOVDPTR,#1000H;設(shè)置數(shù)據(jù)塊指針 MOVR7,#20H;設(shè)數(shù)據(jù)塊長度 SETBREN;允許接收 WAIT:JNBRI,;判斷1幀是否接收完 CLRRI MOVA,SBUF;讀
39、入1幀數(shù)據(jù) JNBPSW.0,PZ;奇偶位P為0,則轉(zhuǎn) JNBRB8,ERR;P=1,RB8=0,則出錯 SJMPYES;二者全為1,則正確,83,行業(yè)相關(guān),PZ:JBRB8,ERR;二者全為0,則正確;P0,RB81,則出錯 YES:MOVXDPTR,A;正確,存放數(shù)據(jù) INCDPTR;修改地址指針 DJNZR7,WAIT;判斷數(shù)據(jù)塊接收完否 CLRPSW.5;接收正確,且接收完,清F0標(biāo)志 RET;返回 ERR:SETBPSW.5;出錯,則置F0標(biāo)志為1 RET;返回 上例是在方式3下進(jìn)行收發(fā),用奇偶位進(jìn)行校驗(yàn)。,84,行業(yè)相關(guān),85,行業(yè)相關(guān),在方式1下進(jìn)行雙機(jī)通信,用累加和進(jìn)行校驗(yàn)的方法。 【例74】 設(shè)甲機(jī)發(fā)送乙機(jī)接收,波特率為2400波特,兩機(jī)晶振均為6MHz。要求甲機(jī)將外部數(shù)據(jù)存儲器4000H40FFH
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度城市更新項(xiàng)目土地承包轉(zhuǎn)讓合同3篇
- 2025年度教育發(fā)展慈善捐贈執(zhí)行合同范本2篇
- 二零二五年度車場智能化改造工程合同4篇
- 二零二五年度不銹鋼建筑材料供應(yīng)與安裝合同3篇
- 2025年度船舶建造與國際貿(mào)易合同范本4篇
- 2025年煤炭購銷運(yùn)輸國際物流服務(wù)合同范本2篇
- 個體工商戶店面租賃合同示例2024年新版
- 基于銀納米線的柔性運(yùn)動傳感器制備與其應(yīng)用性能研究
- 二零二五年度成都小區(qū)社區(qū)養(yǎng)老服務(wù)中心運(yùn)營合同4篇
- 二零二五年度數(shù)字化車間承包運(yùn)營合同4篇
- 2023-2024學(xué)年度人教版一年級語文上冊寒假作業(yè)
- 培訓(xùn)如何上好一堂課
- 2024醫(yī)療銷售年度計(jì)劃
- 稅務(wù)局個人所得稅綜合所得匯算清繳
- 人教版語文1-6年級古詩詞
- 上學(xué)期高二期末語文試卷(含答案)
- 軟件運(yùn)維考核指標(biāo)
- 空氣動力學(xué)仿真技術(shù):格子玻爾茲曼方法(LBM)簡介
- 中學(xué)英語教學(xué)設(shè)計(jì)PPT完整全套教學(xué)課件
- 移動商務(wù)內(nèi)容運(yùn)營(吳洪貴)項(xiàng)目五 運(yùn)營效果監(jiān)測
- 比較思想政治教育學(xué)
評論
0/150
提交評論