單片機(jī)教程--串口通信_第1頁
單片機(jī)教程--串口通信_第2頁
單片機(jī)教程--串口通信_第3頁
單片機(jī)教程--串口通信_第4頁
單片機(jī)教程--串口通信_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第9章:串口通信本章基本要求: ⑴基本概念 ⑵51的串行接口* ⑶串行接口的應(yīng)用*并行并行通信串行串行串行串行1位9.1 串行通信基礎(chǔ) 所謂“通信”是指計算機(jī)與其他設(shè)備之間進(jìn)行的信息交換。 通信的方式分為并行通信和串行通信兩種。

并行通信是構(gòu)成一組數(shù)據(jù)的各位同時進(jìn)行傳送,例如8位數(shù)據(jù)或16位數(shù)據(jù)并行傳送。 其特點(diǎn)是傳輸速度快,但當(dāng)距離較遠(yuǎn)、位數(shù)又多時導(dǎo)致了通信線路復(fù)雜且成本高。

串行通信是數(shù)據(jù)一位接一位地順序傳送。其特點(diǎn)是通信線路簡單,只要一對傳輸線就可以實(shí)現(xiàn)通信(如電話線),可大大地降低成本,適用于遠(yuǎn)距離通信。缺點(diǎn)是傳送速度慢。9.1 串行通信基礎(chǔ) 下圖為以上兩種通信方式的示意圖。由圖可知,假設(shè)并行傳送N位數(shù)據(jù)所需時間為T,那么串行傳送的時間至少為NT,實(shí)際上總是大于NT的。9.1 串行通信基礎(chǔ)9.1.1 串行通信的分類1、異步通信 異步傳送的特點(diǎn)是數(shù)據(jù)在線路上的傳送不連續(xù)。在傳送時,數(shù)據(jù)是以一個字符為單位進(jìn)行傳送的。它用一個起始位表示字符的開始,用停止位表示字符的結(jié)束。異步傳送的字符格式如圖所示。 ①字符幀:也叫數(shù)據(jù)幀,由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位4個部分組成。9.1 串行通信基礎(chǔ)9.1 串行通信基礎(chǔ) ②波特率:就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進(jìn)制位數(shù),單位:位/秒。 說明:要求發(fā)送端與接收端的波特率必須一致。波特率越高,傳送速度越快。例:設(shè)字符傳送的速率為120字符/秒,而每1個字符為10位,那么傳送的波特率為:10位/字符×120字符/秒=1200位/秒=1200波特。每1位二進(jìn)制位的傳送時間Td就是波特率的倒數(shù),例中:Td=1/1200=0.833ms9.1 串行通信基礎(chǔ)2、同步通信 在異步傳送中,每一個字符都要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,占用了一定的時間。為了提高傳送速度,有時就去掉這些標(biāo)志,而采用同步傳送,即1次傳送1組數(shù)據(jù)。在這1組數(shù)據(jù)的開始處要用同步字符SYN來加以指示,如圖示:9.1.2 串行通信的制式 串行通信的數(shù)據(jù)傳送方向有三種形式。9.1 串行通信基礎(chǔ)

1、單工制式(Simplex)

單工制式是指甲乙雙方通信時只能單向傳送數(shù)據(jù),發(fā)送方和接收方固定。單工:廣播9.1 串行通信基礎(chǔ)

2、半雙工制式半雙工制式是指通信雙方都具有發(fā)送器和接收器,既可發(fā)送也可接收,但不能同時接收和發(fā)送,發(fā)送時不能接收,接收時不能發(fā)送。半雙工:對講機(jī)9.1 串行通信基礎(chǔ)

全雙工制式是指通信雙方均設(shè)有發(fā)送器和接收器,并且信道劃分為發(fā)送信道和接收信道,因此全雙工制式可實(shí)現(xiàn)甲乙雙方同時發(fā)送和接收數(shù)據(jù),發(fā)送時能接收,接收時也能發(fā)送。3、全雙工制式雙工:電話9.1 串行通信基礎(chǔ)9.1.3 調(diào)制解調(diào)器 計算機(jī)通信是一種數(shù)字信號的通信,如圖所示。它要求傳送線的頻帶很寬,而在長距離通訊時,通常是利用電話線來傳送的,該線不可能有這樣寬的頻帶。如果用數(shù)字信號經(jīng)過傳送線直接通訊,信號就會畸變。9.1 串行通信基礎(chǔ) 因此要在發(fā)送端用調(diào)制器(Modulator)把數(shù)字信號轉(zhuǎn)換為模擬信號,在接收端用解調(diào)器(Demodulator)檢測此模擬信號,再把它轉(zhuǎn)換成數(shù)字信號,如圖所示。9.2 MCS-51單片機(jī)串行接口 51單片機(jī)內(nèi)部有一個功能很強(qiáng)的全雙工串行口,可同時發(fā)送和接收數(shù)據(jù)。它有四種工作方式,可供不同場合使用。波特率由軟件設(shè)置,通過片內(nèi)的定時/計數(shù)器產(chǎn)生。接收、發(fā)送均可工作在查詢方式或中斷方式,使用十分靈活。 51的串行口除了用于數(shù)據(jù)通信外,還可以非常方便地構(gòu)成1個或多個并行輸入/輸出口或作串并轉(zhuǎn)換,用來驅(qū)動鍵盤與顯示器。51單片機(jī)的串行接口硬件結(jié)構(gòu)SBUF(發(fā))SBUF(收)發(fā)送控制器TI接收控制器RI移位寄存器波特率發(fā)生器T1+A累加器移位寄存器RxDP3.0TxDP3.1去申請中斷引腳引腳CPU內(nèi)部1、發(fā)送和接收電路

①SBUF是兩個在物理上獨(dú)立的接收、發(fā)送緩沖器,可同時發(fā)送、接收數(shù)據(jù)。兩個緩沖器只用一個字節(jié)地址99H,可通過指令對SBUF的讀寫來區(qū)別是對接收緩沖器的操作還是對發(fā)送緩沖器的操作。

MOVSBUF,A;CPU寫SBUF,就是修改發(fā)送緩沖器;

MOVA,SBUF;CPU讀SBUF,就是讀接收緩沖器。串行口對外也有兩條獨(dú)立的收發(fā)信號線RXD(P3.0)和TXD(P3.1),因此可以同時發(fā)送、接收數(shù)據(jù),實(shí)現(xiàn)全雙工傳送。9.2 MCS-51單片機(jī)串行接口

②發(fā)送和接收過程都是在發(fā)送和接收時鐘控制下進(jìn)行的,必須與設(shè)定的波特率保持一致。 一般,51單片機(jī)的串口時鐘是由內(nèi)部定時器的溢出率經(jīng)16分頻后提供。2、串行口控制寄存器SCON、PCON SCON用來控制串行口的工作方式和狀態(tài)(可位尋址)。在復(fù)位時所有位被清0,字地址為98H。PCON主要是為CHMOS型單片機(jī)的電源控制而設(shè)置的專用寄存器,單元地址為87H,不能位尋址。 SCON、PCON的格式和內(nèi)容如下圖。9.2 MCS-51單片機(jī)串行接口串行口控制寄存器SCON(98H)1、SM0、SM1控制串行口方式

2、SM2允許方式2、3的多機(jī)通訊特征位

在方式2、3中若SM2=1→表示接收的第九位數(shù)據(jù)(RB8)為1時,激活RI。

在方式0,1中SM2必須為0。

SM0

SM1工作方式功能簡述波特率00方式08位同步移位寄存器fosc/1201方式110位UART可變10方式211位UARTfosc/32或/6411方式311位UART可變

3、REN允許串行接收位,由軟件置/復(fù)位1:允許接收0:不允許接收4、TB8在方式2、3中要發(fā)送的第九位數(shù)據(jù),由軟件置/復(fù)位

5、RB8在方式2、3中是接收的第九位數(shù)據(jù)在方式0中不用RB8。串行口控制寄存器SCON(98H)6、RI接收中斷標(biāo)志(必須由軟件清除)

在方式0中串行接收到第8位結(jié)束時自動置位。在方式1、2、3中串行接收到停止位的中間時置位。

1111111SBUF11111111RxD1RI=17、TI發(fā)送中斷標(biāo)志(必須由軟件清除)

在方式0中串行發(fā)送第8位結(jié)束時自動置位。在方式1、2、3中串行發(fā)送停止位的開始時置位。串行口控制寄存器SCON(98H)

電源控制寄存器PCONPCOND7D6D5D4D3D2D1D0位名稱SMOD———GF1GF0PDIDLSMOD=1,串行口波特率加倍。PCON寄存器不能進(jìn)行位尋址。?

SMOD:在串行口工作方式1、2、3中,是波特率加倍位=1時,波特率加倍=0時,波特率不加倍。(在PCON中只有這一個位與串口有關(guān))

9.2.2 串行口的工作方式 51的串行口有四種工作方式,它是由SCON中的SM0、SM1來定義的,如下表和下屏表格所示。9.2 MCS-51單片機(jī)串行接口SM0

SM1工作方式功能簡述波特率00方式08位同步移位寄存器fosc/1201方式110位UART可變10方式211位UARTfosc/32或/6411方式311位UART可變SM0SM1工作方式說明波特率00方式0(擴(kuò)展I/O口)移位輸入/輸出(用于擴(kuò)展I/O引腳)方式為fosc(振蕩頻率)的1/12。01方式1(常用)波特率可變的8位異步串行通信方式0方式2(不常用)波特率固定的9位異步串行通信方式1方式3(常用)波特率可變的9位異步串行通信方式9.2 MCS-51單片機(jī)串行接口1、方式0 為同步移位寄存器方式,其波特率是固定的,為fosc(振蕩頻率)的1/12。

①方式0發(fā)送:數(shù)據(jù)從RXD引腳串行輸出,TXD引腳輸出同步脈沖。當(dāng)1個數(shù)據(jù)寫入串行口發(fā)送緩沖器時,串行口將8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳輸出,從低位到高位。發(fā)送完后置中斷標(biāo)志TI為1,呈中斷請求狀態(tài),在再次發(fā)送數(shù)據(jù)之前,必須用軟件將TI清0。9.2 MCS-51單片機(jī)串行接口②方式0接收:在滿足REN=1(允許接收)、RI=0的條件下,串行口處于方式0輸入。此時,RXD為數(shù)據(jù)輸入端,TXD為同步信號輸出端,接收器也以fosc/12的波特率采樣RXD引腳輸入的數(shù)據(jù)信息。當(dāng)接收器接收完8位數(shù)據(jù)后,置中斷標(biāo)志RI=1為請求中斷,在再次接收之前,必須用軟件將RI清0。9.2 MCS-51單片機(jī)串行接口 說明: 在方式0工作時,必須使SCON寄存器中的SM2位為“0”,這并不影響TB8位和RB8位。方式0發(fā)送或接收完8位數(shù)據(jù)后由硬件置位TI或RI中斷請求標(biāo)志,CPU在響應(yīng)中斷后要用軟件清除TI或RI標(biāo)志。若串行口要作為并行口輸入輸出,這時必須設(shè)置“串入并出“或”并入串出”的移位寄存器來配合使用(如74HC164或74HC165等)。9.2 MCS-51單片機(jī)串行接口2、方式1 該方式為波特率可變的8位異步通信接口。

①方式1發(fā)送:數(shù)據(jù)位由TXD端輸出,發(fā)送1幀信息為10位,其中1位起始位、8位數(shù)據(jù)位(先低位后高位)和一個停止位“1”。 CPU執(zhí)行1條數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令,就啟動發(fā)送器發(fā)送。當(dāng)發(fā)送完數(shù)據(jù),就置中斷標(biāo)志TI為1。

9.2 MCS-51單片機(jī)串行接口 方式1所傳送的波特率取決于定時器T1的溢出率和特殊功能寄存器PCON中SMOD的值,即方式1的波特率=(2SMOD/32)×定時器T1的溢出率。 ②方式1接收:當(dāng)串行口置為方式1,且REN=1時,串行口處于方式1輸入狀態(tài)。它以所選波特率的16倍的速率采樣RXD引腳狀態(tài)。9.2 MCS-51單片機(jī)串行接口3、方式2 該方式為11位異步通信接口。

①方式2發(fā)送:發(fā)送數(shù)據(jù)由TXD端輸出,發(fā)送1幀信息為11位,其中1位起始位(0)、8位數(shù)據(jù)位(先低位后高位)、1位可控位為1或0的第9位數(shù)據(jù)、1位停止位。附加的第9位數(shù)據(jù)為SCON中的TB8,它由軟件置位或清0,可作為多機(jī)通信中地址/數(shù)據(jù)信息的標(biāo)志位,也可作為數(shù)據(jù)的奇偶校驗(yàn)位。9.2 MCS-51單片機(jī)串行接口PIPL: PUSH PSW ;保護(hù)現(xiàn)場 PUSH ACC CLR TI ;清0發(fā)送中斷標(biāo)志 MOV A,@R0 ;取數(shù)據(jù) MOV C,P ;奇偶位送C MOV TB8,C ;奇偶位送TB8 MOV SBUF,A ;數(shù)據(jù)寫入發(fā)送緩沖器,啟動發(fā)送 INC R0 ;數(shù)據(jù)指針加1 POP ACC ;恢復(fù)現(xiàn)場 POP PSW RETI ;中斷返回9.2 MCS-51單片機(jī)串行接口方式2中使用TB8作為發(fā)送數(shù)據(jù)的奇偶校驗(yàn)位,發(fā)送程序如下:

②方式2接收:當(dāng)串行口置為方式2,且REN=1時,串行口以方式2接收數(shù)據(jù)。方式2的接收與方式1基本相似。數(shù)據(jù)由RXD端輸入,接收11位信息,其中1位起始位(0)、8位數(shù)據(jù)位、1位附加的第9位數(shù)據(jù)、1位停止位(1)。 方式2的波特率=(2SMOD/64)×fosc 若附加的第9位數(shù)據(jù)為奇偶校驗(yàn)位,在接收中斷服務(wù)程序中應(yīng)作檢驗(yàn)處理,參考程序如下:9.2 MCS-51單片機(jī)串行接口PIPL: PUSH PSW ;保護(hù)現(xiàn)場 PUSH ACC CLR RI ;清0接收中斷標(biāo)志 MOV A,SUBF ;接收數(shù)據(jù) MOV C,P ;取奇偶校驗(yàn)位 JNC L1 ;偶校驗(yàn)時轉(zhuǎn)L1 JNB RB8,ERR ;奇校驗(yàn)時RB8為0轉(zhuǎn)出錯處理 SJMP L2L1: JB RB8,ERR ;偶校驗(yàn)時RB8為1轉(zhuǎn)出錯處理L2: MOV @R0,A ;奇偶校驗(yàn)對時存入數(shù)據(jù) INC R0 ;修改指針 POP ACC ;恢復(fù)現(xiàn)場 POP PSW RETI ;中斷返回ERR: … ;出錯處理 RETI ;中斷返回9.2 MCS-51單片機(jī)串行接口方式2中使用RB8作為接收數(shù)據(jù)的奇偶校驗(yàn)位,接收程序如下:4、方式3 方式3為波特率可變的9位異步通信方式,除了波特率有所區(qū)別之外,其余方式都與方式2相同。 方式3的波特率=(2SMOD/32)×(定時器T1的溢出率)9.2 MCS-51單片機(jī)串行接口9.2.3 串行口的通信波特率 串行通信的四種工作方式對應(yīng)著三種波特率。

①對于方式0,波特率是固定的,為單片機(jī)時鐘的十二分之一,即fosc/12。

②對于方式2,波特率有兩種可供選擇,即fosc/32和fosc/64。對應(yīng)于以下公式: 波特率=fosc×2SMOD/649.2 MCS-51單片機(jī)串行接口

③對于方式1和方式3,波特率都由定時器T1的溢出率來決定,使用下面公式: 波特率=(2SMOD/32)×(定時器T1的溢出率) 而定時器T1的溢出率則和所采用的定時器工作方式有關(guān),并可用以下公式表示: 定時器T1的溢出率=fosc/12×(2n-X) 其中X為定時器T1的計數(shù)初值,n為定時器T1的位數(shù),對于定時器方式0,取n=13;對于定時器方式1,取n=16;對于定時器方式2、3,取n=8。9.2 MCS-51單片機(jī)串行接口 常用波特率和定時器T1初值9.2 MCS-51單片機(jī)串行接口 注意:如果選定的波特率對應(yīng)的初值C不是整數(shù),則實(shí)際波特率與標(biāo)準(zhǔn)值就存在偏差,若晶振頻率為12MHz,則標(biāo)準(zhǔn)波特率9600對應(yīng)的初值C為252.745(SMOD1為0時的計算值),由于初值C只能取最接近計算值的整數(shù),因此,C取253(FDH)。而當(dāng)C=253時,實(shí)際波特率為10417,與理論值相對誤差為:約5.7%。

9.2 MCS-51單片機(jī)串行接口 實(shí)踐表明:當(dāng)兩個串行通信設(shè)備之間的波特率誤差超過2.5%時,串行通信將無法進(jìn)行,且通信速率越高,發(fā)送、接收波特率的允許誤差范圍就越小。因此,當(dāng)單片機(jī)控制系統(tǒng)需要與PC機(jī)通信時,單片機(jī)控制系統(tǒng)的晶振頻率fosc往往不是整數(shù)(如6MHz、12MHz),而是某一特定值,如11.0592MHz就是常用的一種晶振頻率之一。9.2 MCS-51單片機(jī)串行接口9.3 MCS-51串行口的應(yīng)用

串行口的編程 串行口需初始化后,才能完成數(shù)據(jù)的輸入、輸出。其初始化過程如下:

①按選定串行口的操作方式設(shè)定SCON的SM0、SM1兩位二進(jìn)制編碼。 ②對于操作方式2或3,應(yīng)根據(jù)需要在TB8中寫入待發(fā)送的第9位數(shù)據(jù)。 ③若選定的操作方式不是方式0,還需設(shè)定接收/發(fā)送的波特率。設(shè)定SMOD的狀態(tài),以控制波特率是否加倍。若選定操作方式1或3,則應(yīng)對定時器T1進(jìn)行初始化以設(shè)定其溢出率。9.3.1 串口在方式0下的應(yīng)用 當(dāng)串行口工作于方式0時,串行口本身相當(dāng)于“并入串出”(發(fā)送狀態(tài))或“串入并出”(接收狀態(tài))的移位寄存器。8位串行數(shù)據(jù)b0~b7依次從RDX(P3.0)引腳輸出或輸入,移位脈沖信號來自TXD(P3.1)引腳,輸出/輸入移位脈沖頻率固定為系統(tǒng)時鐘頻率fosc的12分頻(對于8XC5X2芯片來說,在“6時鐘/機(jī)器周期”模式下,移位脈沖頻率是時鐘頻率fosc的6分頻),不可改變。9.3 MCS-51串行口的應(yīng)用1、方式0的串行輸出:使用74LS164,如下圖 最簡的程序可以寫為: MOV SCON,#00000000B ;定義串行工作方式 CLR TI ;清除發(fā)送中斷標(biāo)志 MOV SUBF,A ;輸出串行數(shù)據(jù)LOOP: JNB TI,LOOP ;等待一幀數(shù)據(jù)發(fā)送結(jié)束9.3 MCS-51串行口的應(yīng)用說明: 使用中斷方式時,在中斷處于開放狀態(tài)下(串行中斷允許ES為1,中斷允許EA為1),當(dāng)TI有效時,將產(chǎn)生串行中斷請求。值得注意是CPU響應(yīng)串行中斷后,不會自動清除TI,需要用“CLRTI”指令清除TI,以便輸出新的串行數(shù)據(jù)。 9.3 MCS-51串行口的應(yīng)用2、方式0的串行輸入:使用74LS165,如下圖 RxD引腳接74LS165芯片的串行數(shù)據(jù)輸出端,TxD引腳接74LS165芯片的移位脈沖CLK。其工作過程見如下說明:9.3 MCS-51串行口的應(yīng)用 說明:在接收中斷標(biāo)志RI為0(即無效,表明串行數(shù)據(jù)輸入緩沖器SBUF空)情況下,當(dāng)REN=1時,即可啟動串行接收過程:在移位脈沖(來自TXD引腳)作用下,165芯片并行數(shù)據(jù)b0~b7逐一移到RDX引腳,并保存到CPU內(nèi)的串行接收緩沖器內(nèi),當(dāng)接收到b7位數(shù)據(jù)時,串行接收中斷標(biāo)志RI為1,表明已接收了一幀數(shù)據(jù),CPU可以讀SBUF寄存器。這樣,在REN為1后,可通過查詢RI標(biāo)志來確定接收過程是否完成。當(dāng)然,在中斷處于開放狀態(tài)下(串行中斷允許ES為1,中斷允許EA為1),當(dāng)RI有效時,將產(chǎn)生串行中斷請求。注意:CPU響應(yīng)串行中斷后,不會自動清除RI,需要用“CLRRI”指令清除RI,以便接收新的數(shù)據(jù)。參考程序如下: MOV SCON,#00000000B ;定義串行工作方式0 CLR P1.7 ;輸出送數(shù)脈沖(允許165芯片 ;接收并鎖存并行輸入端數(shù)據(jù)) NOP SETB P1.7 ;延遲一個機(jī)器周期后, ;取消送數(shù)負(fù)脈沖 CLR RI ;清除接收中斷標(biāo)志RI SETB REN ;允許接收LOOP: JNB RI,LOOP ;等待一幀數(shù)據(jù)接收結(jié)束 MOV A,SBUF ;讀串行輸入數(shù)據(jù)9.3 MCS-51串行口的應(yīng)用9.3.2 串行口在其他方式下的應(yīng)用 在方式1、2、3下,串口用于異步通信,不同之處在幀格式和波特率的差異。 方式1為8位數(shù)據(jù)位,方式3為9位數(shù)據(jù)位,兩種方式的波特率都是受定時器T1的溢出率控制。 在用方式1或方式3實(shí)現(xiàn)串行異步通信時,初始化程序要設(shè)定串行口的工作方式,并對定時器T1進(jìn)行初始化,即設(shè)定定時器方式和定時器初值。此外,還要編寫發(fā)送子程序和接收子程序。9.3 MCS-51串行口的應(yīng)用1、方式1 當(dāng)SM1、SM0為01時,選中串行口工作在方式1,8位的異步串行通信方式,其中TXD是發(fā)送端,RXD是接收端。發(fā)送或接收一幀信息包括1位起始位(固定為0)、8位串行數(shù)據(jù)(低位在前,高位在后)和一位停止位(固定為1)共10位,波特率與定時器T1(或T2)溢出率、SMOD位有關(guān)(可變)。9.3 MCS-51串行口的應(yīng)用

①方式1的發(fā)送過程如下:在TI為0的情況下(表示當(dāng)前不處于發(fā)送狀態(tài),串行口發(fā)送控制電路處于空閑狀態(tài)),任何寫串行數(shù)據(jù)輸出緩沖器SBUF指令(如MOVSBUF,A)均會觸發(fā)串行發(fā)送過程:51串行口自動在8個串行數(shù)據(jù)位的前、后分別插入一個起始位(0)和一個停止位(1),構(gòu)成10位信息幀,然后按設(shè)定的波特率依次輸出起始位(0)、8個數(shù)據(jù)位(順序?yàn)閎0~b7)和停止位(1)。當(dāng)8位數(shù)據(jù)(即b7位)發(fā)送結(jié)束后(即開始發(fā)送停止位),串行口自動將發(fā)送中斷標(biāo)志TI置1。這樣執(zhí)行了寫SBUF寄存器操作后,可通過查詢TI標(biāo)志來確定發(fā)送過程是否已完成。若中斷處于開放狀態(tài)下,TI有效時,將產(chǎn)生串行中斷請求。9.3 MCS-51串行口的應(yīng)用 ②方式1的接收過程如下:在接收中斷標(biāo)志RI為0(即串行數(shù)據(jù)輸入緩沖器SBUF處于空閑狀態(tài))情況下,當(dāng)REN位為1時,串行口即處于接收狀態(tài)。在接收狀態(tài)下,存在兩個定時信號:一個是移位脈沖信號(即發(fā)送波特率);另一個是RXD引腳電平狀態(tài)檢測信號(也稱為數(shù)據(jù)檢測脈沖),它的頻率是移位脈沖的16倍。進(jìn)入接收狀態(tài)后,串行口便按數(shù)據(jù)檢測脈沖速率不斷檢測RXD引腳的電平狀態(tài),當(dāng)發(fā)現(xiàn)RXD引腳由高電平變?yōu)榈碗娖胶蟆砻靼l(fā)送端開始發(fā)送起始位(0),啟動接收過程,并復(fù)位接收波特率發(fā)生器,使數(shù)據(jù)檢測脈沖與接收移位脈沖保持同步,然后按設(shè)定波特率順序讀出數(shù)據(jù)位和停止位。9.3 MCS-51串行口的應(yīng)用 當(dāng)接收完一幀信息(即接收到停止位)后,如果RI位為0,便將“接收移位寄存器”中的內(nèi)容裝入串行數(shù)據(jù)輸入緩沖寄存器SBUF中,停止位裝入SCON寄存器的RB8位中,并將串行接收中斷標(biāo)志RI置1。這樣通過查詢RI標(biāo)志即可確定接收過程是否已完成。若中斷處于開放狀態(tài)下,RI有效時,也產(chǎn)生串行中斷請求。不過值得注意是CPU響應(yīng)串行中斷后,不會自動清除RI,需要用“CLRRI”指令清除RI,以便接收下一幀信息。9.3 MCS-51串行口的應(yīng)用2、方式2和方式3 當(dāng)SM0、SM1為10、11時,串行口工作于方式2、方式3。方式2和方式3都是9位異步串行通信口,區(qū)別是方式2的波特率固定為時鐘頻率的32或64分頻,不可變,因此不常用(原因是與其他串行通信設(shè)備連接困難)。而方式3的波特率與T1(或T2)定時器的溢出率、電源控制寄存器PCON的SMOD位有關(guān),可調(diào)。選擇不同的初值或晶振頻率,即可獲得常用的波特率,因此方式3較常用。下面以方式3為例,介紹串行口9位異步通信過程。9.3 MCS-51串行口的應(yīng)用

①數(shù)據(jù)發(fā)送:其實(shí)方式3與方式1之間的區(qū)別是:方式3是9位的異步串行通信方式,一幀信息為11位,由一位起始位(0)、9位數(shù)據(jù)、一位停止位(1)組成。因方式3需要發(fā)送9位串行數(shù)據(jù),低8位存放在SBUF寄存器中,第9位(b8)存放在SCON寄存器的TB8位。因此,發(fā)送前必須先通過位傳送指令將第9位數(shù)據(jù)寫入SCON的TB8位,然后才能執(zhí)行寫串行數(shù)據(jù)發(fā)送緩沖寄存器SBUF,啟動發(fā)送過程。第9位(b8)內(nèi)容沒有規(guī)定,可以是數(shù)據(jù),也可以是奇偶校驗(yàn)位,在多機(jī)通信中,常作為數(shù)據(jù)/地址標(biāo)志或其他控制位。因此,串行口方式3應(yīng)用范圍更廣。9.3 MCS-51串行口的應(yīng)用

②數(shù)據(jù)接收:在方式3中,當(dāng)REN位為1時,使串行口進(jìn)入接收狀態(tài)。接收的信息從RXD引腳輸入,接收到的低8位數(shù)據(jù)存放在“移位寄存器”中,第9位(b8)存放在SCON寄存器的RB8中。在方式3下,啟動接收過程后,如果RI=0、SM2=0(單機(jī)方式),則接收到第9位(b8)數(shù)據(jù)后,串行口便將存放在移位寄存器中的8位數(shù)據(jù)裝入串行接收數(shù)據(jù)緩沖寄存器SBUF中,并自動將串行接收中斷標(biāo)志RI置1。如果不滿足RI=0、SM2=0條件,本次接收信息無效,接收到第9位數(shù)據(jù)后,不將“移位寄存器”內(nèi)容裝入SBUF特殊功能寄存器,RI也不會置1。9.3 MCS-51串行口的應(yīng)用 其中RI為0條件可提供“接收緩沖器SBUF空閑”信息,防止后接收數(shù)據(jù)覆蓋以前接收的數(shù)據(jù);而設(shè)置“SM2為1,接收的第9位數(shù)據(jù)必須1,接收才有效”條件為了實(shí)現(xiàn)多機(jī)通信(當(dāng)SM2為0,不論第9位數(shù)據(jù)為低電平還是高電平均能接收,是為了在非多機(jī)通信條件下,接收發(fā)送端的奇偶校驗(yàn)位)。 方式2、3的有效接收條件與方式1似乎不同,但實(shí)際上沒有區(qū)別。因?yàn)樵诜绞?中,串行口把停止位(1)作為第9位(即b8)寫入SCON寄存器的RB8位,而停止位總是1,因此在方式1中只要接收到停止位,RB8位就一定是1,滿足了“SM2為1時,RB8位為1”的接收條件,于是在方式1中,只要RI為0,就能正常接收。9.3 MCS-51串行口的應(yīng)用例:設(shè)甲乙機(jī)以串行方式1進(jìn)行數(shù)據(jù)傳送,fosc=11.0592MHz,波特率為1200b/s。甲機(jī)發(fā)送的16個數(shù)據(jù)存在內(nèi)RAM40H~4FH單元中,乙機(jī)接收后存在內(nèi)RAM50H為首地址的區(qū)域中。

T1初值=256-×=232=E8H3212×1200解: 串行方式1波特率取決于T1溢出率(設(shè)SMOD=0), 計

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論