第7章 AT89C51單片機的串行口_第1頁
第7章 AT89C51單片機的串行口_第2頁
第7章 AT89C51單片機的串行口_第3頁
第7章 AT89C51單片機的串行口_第4頁
第7章 AT89C51單片機的串行口_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章AT89C51單片機的串行口全雙工的異步通訊串行口4種工作方式,波特率由片內(nèi)定時器/計數(shù)器控制。每發(fā)送或接收一幀數(shù)據(jù),均可發(fā)出中斷請求。除用于串行通訊,還可用來擴展并行I/O口。7.1串行口的結(jié)構(gòu)串行口內(nèi)部結(jié)構(gòu)如圖7-1,兩個物理上獨立地接收和發(fā)送緩沖器,可同時收、發(fā)數(shù)據(jù)(全雙工)。兩個緩沖器共用一個特殊功能寄存器字節(jié)地址:SBUF(99H)

控制寄存器共兩個:特殊功能寄存器SCON和PCON。7.1.1串行口控制寄存器SCON

字節(jié)地址98H,可位尋址,格式如圖7-2所示。

圖7-1(1)SM0、SM1——串行口4種工作方式的選擇位

表7-1串行口的4種工作方式SM0SM1方式 功能說明

000同步移位寄存器方式(用于擴展I/O口)0118位異步收發(fā),波特率可變(由定時器控制)1029位異步收發(fā),波特率為fosc/64或fosc/32113

9位異步收發(fā),波特率可變(由定時器控制)(2)SM2——多機通信控制位

用于方式2或方式3中。圖7-2當串行口以方式2或方式3接收時,如果SM2=1,只有當接收到的第9位數(shù)據(jù)(RB8)為“1”時,才將接收到的前8位數(shù)據(jù)送入SBUF,并置“1”RI,產(chǎn)生中斷請求;當接收到的第9位數(shù)據(jù)(RB8)為“0”時,則將接收到的前8位數(shù)據(jù)丟棄。如果SM2=0,則不論第9位數(shù)據(jù)是“1”還是“0”,都將前8位數(shù)據(jù)送入SBUF中,并置“1”RI,產(chǎn)生中斷請求。方式1時,如果SM2=1,則只有收到停止位時才會激活RI。方式0時,SM2必須為0。

(3)REN——允許串行接收位由軟件置“1”或清“0”。

REN=1

允許串行口接收數(shù)據(jù)。

REN=0

禁止串行口接收數(shù)據(jù)。

(4)TB8——發(fā)送的第9位數(shù)據(jù)方式2和3時,TB8是要發(fā)送的第9位數(shù)據(jù),可作為奇偶校驗位使用,也可作為地址幀或數(shù)據(jù)幀的標志。 1:地址幀0:數(shù)據(jù)幀(5)RB8——接收到的第9位數(shù)據(jù)方式2和3時,RB8存放接收到的第9位數(shù)據(jù)。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。

(6)TI——發(fā)送中斷標志位方式0時,串行發(fā)送第8位數(shù)據(jù)結(jié)束時由硬件置“1”,其它工作方式,串行口發(fā)送停止位的開始時置TI=1,表示一幀數(shù)據(jù)發(fā)送結(jié)束,可供軟件查詢,也可申請中斷。CPU響應(yīng)中斷后,向SBUF寫入要發(fā)送的下一幀數(shù)據(jù)。TI必須由軟件清0。(7)RI——接收中斷標志位

方式0時,接收完第8位數(shù)據(jù)時,RI由硬件置1。其它工作方式,串行接收到停止位時,該位置“1”。RI=1,表示一幀數(shù)據(jù)接收完畢,并申請中斷。該位狀態(tài)也可軟件查詢。RI必須由軟件清“0”。7.1.2特殊功能寄存器PCON

字節(jié)地址為87H,沒有位尋址功能。

(1)SMOD—波特率選擇位例如:方式1的波特率的計算公式為:

方式1波特率=(2SMOD/32)×定時器T1的溢出率也稱SMOD位為波特率倍增位。(2)GF1、GF0—通用標志位這兩個標志位可供用戶使用,可用軟件置1或清0。兩個標志位用戶應(yīng)充分利用。 (3)PD—掉電方式位若PD=1,單片機進入掉電工作方式。圖7-3(4)IDL—待機方式位 IDL=1,單片機進入待機工作方式。 7.2串行口的4種工作方式7.2.1方式0

同步移位寄存器方式,常用于外接移位寄存器,以擴展并行I/O口。8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。波特率固定為fosc/12。

幀格式如下:1.方式0發(fā)送

當CPU執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令時,產(chǎn)生一個正脈沖,串行口即把SBUF中的8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完8位數(shù)據(jù)置“1”中斷標志位TI。時序如圖7-5所示。2.方式0接收

REN=1,接收數(shù)據(jù),REN=0,禁止接收。REN=1,允許接收。向串口的SCON寫入控制字(置為方式0,并置“1”REN位,同時RI=0)時,產(chǎn)生一個正脈沖,串行口即開始接收數(shù)據(jù)。RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號輸出端,接收器也以fosc/12的固定波特率采樣RXD引腳的數(shù)據(jù)信息,當收到8位數(shù)據(jù)時置“1”RI。表示一幀數(shù)據(jù)接收完,時序如下:圖7-5方式0下,SCON中的TB8、RB8位沒有用到,發(fā)送或接收完8位數(shù)據(jù)由硬件置“1”TI或RI,CPU響應(yīng)中斷。TI或RI須由用戶軟件清“0”,可用如下指令:

CLRTI ;TI位清“0” CLRRI ;RI位清“0”方式0時,SM2位必須為0。圖7-67.2.2方式1

SM0、SM1=01方式1一幀數(shù)據(jù)為10位,1個起始位(0),8個數(shù)據(jù)位,1個停止位(1),先發(fā)送或接收最低位。幀格式如圖7-7:方式1波特率=(2SMOD/32)×定時器T1的溢出率SMOD為PCON寄存器的最高位的值(0或1)。圖7-7

1.方式1發(fā)送

方式1輸出,數(shù)據(jù)由TXD輸出,一幀信息為10位,1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當執(zhí)行一條數(shù)據(jù)寫發(fā)送緩沖器SBUF的指令,就啟動發(fā)送。圖中TX時鐘是發(fā)送的波特率。發(fā)送開始時,內(nèi)部發(fā)送控制信號變?yōu)橛行А⑵鹗嘉幌騎XD輸出,此后,每經(jīng)過一個TX時鐘周期,便產(chǎn)生一個移位脈沖,并由TXD輸出一個數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,置“1”TI。方式1發(fā)送數(shù)據(jù)的時序,如圖7-8所示。2.方式1接收

數(shù)據(jù)從RXD(P3.0)腳輸入。當檢測到起始位的負跳變時,開始接收數(shù)據(jù)。定時控制信號有兩種):接收移位時鐘(RX時鐘,頻率和波特率相同)和位檢測器采樣脈沖(頻率是RX時鐘的16倍,1位數(shù)據(jù)期間,有16個采樣脈沖),當采樣到RXD端從1到0的跳變時就啟動檢測器,接收的值是3次連續(xù)采樣(第7、8、9個脈沖圖7-8時采樣)進行表決以確認是否是真正的起始位(負跳變)的開始。當一幀數(shù)據(jù)接收完,須同時滿足兩個條件,接收才真正有效。⑴RI=0,即上一幀數(shù)據(jù)接收完成時,RI=1發(fā)出的中斷請求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說明“接收SBUF”已空。⑵SM2=0或收到的停止位=1(方式1時,停止位已進入RB8),圖7-9則收到的數(shù)據(jù)裝入SBUF和RB8(RB8裝入停止位),且置“1”中斷標志RI。若這兩個條件不同時滿足,收到的數(shù)據(jù)將丟失。7.2.3方式29位異步通信接口。每幀數(shù)據(jù)均為11位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控的第9位數(shù)據(jù)和1位停止位。幀格式如圖7-10。方式2波特率=(2SMOD/64)×fosc

圖7-101.方式2發(fā)送發(fā)送前,先根據(jù)通訊協(xié)議由軟件設(shè)置TB8(例如,雙機通訊時的奇偶校驗位或多機通訊時的地址/數(shù)據(jù)的標志位)。方式2發(fā)送數(shù)據(jù)波形如圖7-11所示。

圖7-11例7-1

方式2發(fā)送在雙機通信中的應(yīng)用。下面的發(fā)送中斷服務(wù)程序,是在雙機通信中,以TB8作為奇偶校驗位,處理方法為數(shù)據(jù)寫入SBUF之前,先將數(shù)據(jù)的奇偶校驗位寫入TB8,以保證采用偶校驗發(fā)送。

PIPTI:PUSHPSW;現(xiàn)場保護

PUSHAcc

SETBRS1;選擇第2組工作寄存器區(qū)

CLRRS0CLRTI;發(fā)送中斷標志清“0”

MOVA,@R0;取數(shù)據(jù)

MOVC,P ;校驗位送TB8,采用偶校驗

MOVTB8,C MOVSBUF,A ;啟動發(fā)送

INCR0 ;數(shù)據(jù)指針加1

POPAcc ;恢復(fù)現(xiàn)場

POPPSW RETI ;中斷返回2.方式2接收

SM0、SM1=10,且REN=1。數(shù)據(jù)由RXD端輸入,接收11位信息。當位檢測到RXD從1到0的負跳變,并判斷起始位有效后,開始收一幀信息。在接收器完第9位數(shù)據(jù)后,需滿足兩個條件,才能將接收到的數(shù)據(jù)送入SBUF。(1)RI=0,意味著接收緩沖器為空。(2)SM2=0或接收到的第9位數(shù)據(jù)位RB8=1時。當上述兩個條件滿足時,接收到的數(shù)據(jù)送入SBUF(接收緩沖器),第9位數(shù)據(jù)送入RB8,并置“1”RI。若不滿足兩個條件,接收的信息將被丟棄。方式2接收數(shù)據(jù)的時序如圖7-12所示。

例7-2

方式2接收在雙機通信中的應(yīng)用。圖7-12本例與上例相對應(yīng)。若第9位數(shù)據(jù)為校驗位,在接收程序中作偶校驗處理,設(shè)1組寄存器區(qū)的R0為數(shù)據(jù)緩沖器指針。

PIRI: PUSHPSW PUSHAcc SETBRS0 ;選擇1組寄存器區(qū) CLRRS1 CLRRI MOVA,SBUF ;收到數(shù)據(jù)送A MOVC,P JNCL1 ;C=0。跳L1 JNBRB8,ERP ;ERP為出錯處理程序

AJMPL2L1: JBRB8,ERP ;RB8=1,跳ERPL2: MOV@R0,A INCR0 POPAcc POPPSW

ERP: ……… ;出錯處理程序段 ………

RETI7.2.4方式3SM0、SM1=11,串口為方式3。波特率可變的9位異步通訊方式,除波特率外,方式3和方式2相同。方式3的時序見方式2。

方式3波特率=(2SMOD/32)×定時器T1的溢出率7.3多機通信的工作原理

要保證主機與所選擇的從機實現(xiàn)可靠地通信,必須保證串口具有識別功能。SCON中的SM2位就是滿足這一條件而設(shè)置的多機通信控制位。原理:在串行口以方式2(或方式3)接收時,若SM2=1,表示置多機通信功能位,這時有兩種可能:(1)接收到的第9位數(shù)據(jù)為1時,數(shù)據(jù)才裝入SBUF,并置中斷標志RI=1向CPU發(fā)出中斷請求;(2)接收到的第9位數(shù)據(jù)為0時,則不產(chǎn)生中斷標志,信息將拋棄。若SM2=0,則接收的第9位數(shù)據(jù)不論是0還是1,都產(chǎn)生RI=1中斷標志,接收到的數(shù)據(jù)裝入SBUF中。上述特性,便可實現(xiàn)AT89C51的多機通信。設(shè)多機系統(tǒng)中有一主機和3個8031從機,如圖7-13。主機的RXD與從機的TXD相連,主機TXD與從機的RXD端相連。從機地址分別為00H、01H、02H。

圖7-13多機通信工作過程:(1)從機串行口編程為方式2或方式3接收,且置“1”SM2和REN位,使從機只處于多機通訊且接收地址幀的狀態(tài)。(2)主機先將從機地址(即準備接收數(shù)據(jù)的從機)發(fā)給各從機,主機發(fā)出的地址信息的第9位為1,各從機接收到的第9位信息RB8為1,且由于SM2=1,則置“1”RI,各從機響應(yīng)中斷,執(zhí)行中斷程序。在中斷服務(wù)子程序中,判主機送來的地址是否和本機地址相符合,相符則該從機清“0”SM2位,準備接收主機的數(shù)據(jù)或命令;若不符,則保持SM2=1狀態(tài)。(3)接著主機發(fā)送數(shù)據(jù)幀,此時各從機串行口接收到的RB8=0,只有地址相符合的從機系統(tǒng)(即已清“0”SM2位的從機)才能激活RI,從而進入中斷,在中斷程序中接收主機的數(shù)據(jù)(或命令);

其它的從機因SM2=1,又RB8=0不激活中斷標志RI,不能進入中斷,接收的數(shù)據(jù)丟失。圖7-13所示的多機系統(tǒng)是主從式,由主機控制多機之間的通信,從機和從機的通訊只能經(jīng)主機才能實現(xiàn)。7.4波特率的制定方法方式0、方式2的波特率是固定的;方式1、方式3波特率由定時器T1的溢出率來確定。7.4.1波特率的定義波特率的定義。對于定時器的不同工作方式,得到的波特率的范圍是不一樣的7.4.2定時器T1產(chǎn)生波特率的計算(1)方式0波特率=時鐘頻率fosc×1/12,不受SMOD位的值的影響。若fosc=12MHz,波特率為fosc/12即1Mb/s。(2)方式2波特率=(2SMOD/64)×fosc

若fosc=12MHz:SMOD=0

波特率=187.5kb/s;

SMOD=1

波特率=375kb/s

(3)方式1或方式3時,波特率為:

波特率=(2SMOD/64)×T1的溢出率實際設(shè)定波特率時,T1常設(shè)置為方式2定時(自動裝初值)這種方式不僅操作方便,也可避免因軟件重裝初值而帶來的定時誤差。實際使用時,為避免煩雜的初值計算,常用的波特率和初值X間的關(guān)系列成表7-2(P124),以供查用。表7-2有兩點需要注意:時鐘振蕩頻率為12MHz或6MHz時,表中初值X和相應(yīng)的波特率之間有一定誤差。例如,F(xiàn)DH的對應(yīng)的理論值是10416波特(時鐘6MHz)。與9600波特相差816波特,消除誤差可以調(diào)整時鐘振蕩頻率fosc實現(xiàn)。例如采用的時鐘振蕩頻率為11.0592MHz。(2)如果串行通訊選用很低的波特率,例如,波特率選為55,可將T1設(shè)置為方式1定時。但在T1溢出時,需用在中斷服務(wù)程序中重新裝入初值。中斷響應(yīng)時間和執(zhí)行指令時間會使波特率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。例7-3

若8031單片機的時鐘振蕩頻率為11.0592MHz,選用T1為方式2定時作為波特率發(fā)生器,波特率為2400b/s,求初值。

上述結(jié)果可直接從表7-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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論