LJY-第7章MCS-51的串行口課件_第1頁
LJY-第7章MCS-51的串行口課件_第2頁
LJY-第7章MCS-51的串行口課件_第3頁
LJY-第7章MCS-51的串行口課件_第4頁
LJY-第7章MCS-51的串行口課件_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章MCS-51的串行口7.1串行口的結(jié)構(gòu)7.2串行口的4種方式7.3多機(jī)通訊7.4波特率的制定方法7.5串行口的編程和應(yīng)用1第7章MCS-51的串行口7.1串行口的結(jié)構(gòu)1全雙工的異步通訊串行口。

雙工:接收、發(fā)送數(shù)據(jù)同時進(jìn)行。

異步通訊:收、發(fā)雙方?jīng)]有同步時鐘來控制收、發(fā)雙方同步傳送,而靠各自的時鐘來控制數(shù)據(jù)傳送。4種工作方式,波特率由片內(nèi)定時器/計(jì)數(shù)器控制。每發(fā)送或接收一幀數(shù)據(jù),均可發(fā)出中斷請求。除用于串行通訊,還可用來擴(kuò)展并行I/O口。2全雙工的異步通訊串行口。27.1串行口的結(jié)構(gòu)串行口內(nèi)部結(jié)構(gòu)如下圖,兩個物理上獨(dú)立地接收和發(fā)送緩沖器,可同時收、發(fā)數(shù)據(jù)。兩個數(shù)據(jù)緩沖器共用一個特殊功能寄存器字節(jié)地址:SBUF(99H)。

控制寄存器共兩個:特殊功能寄存器SCON和PCON。37.1串行口的結(jié)構(gòu)37.1.1串行口控制寄存器SCON

字節(jié)地址98H,可位尋址,格式如圖所示。(1)SM0、SM1——串行口4種工作方式的選擇位表串行口的4種工作方式SM0SM1方式 功能說明

000同步移位寄存器方式(用于擴(kuò)展I/O口)0118位異步收發(fā),波特率可變(由定時器控制)1029位異步收發(fā),波特率為fosc/64或fosc/321139位異步收發(fā),波特率可變(由定時器控制)47.1.1串行口控制寄存器SCON4(2)SM2——多機(jī)通信控制位用于方式2或方式3中。當(dāng)串行口以方式2或方式3接收時,

如果SM2=1,只有當(dāng)接收到的第9位數(shù)據(jù)(RB8)為“1”時,才將接收到的前8位數(shù)據(jù)送入SBUF,并置“1”RI,產(chǎn)生中斷請求;當(dāng)接收到的第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。5(2)SM2——多機(jī)通信控制位5(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ù),可作為奇偶校驗(yàn)位使用,也可作為地址幀或數(shù)據(jù)幀的標(biāo)志。 =1為地址幀,=0為數(shù)據(jù)幀(5)RB8——接收到的第9位數(shù)據(jù) 方式2和3時,RB8存放接收到的第9位數(shù)據(jù)。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。6(3)REN——允許串行接收位6(6)TI——發(fā)送中斷標(biāo)志位方式0時,串行發(fā)送第8位數(shù)據(jù)結(jié)束時由硬件置“1”, 其它工作方式,串行口發(fā)送停止位的開始時置“1”。

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

RI=1,表示一幀數(shù)據(jù)接收完畢,并申請中斷,要求CPU從接收SBUF取走數(shù)據(jù)。該位的狀態(tài)也可供軟件查詢。RI必須由軟件清“0”。7(6)TI——發(fā)送中斷標(biāo)志位77.1.2特殊功能寄存器PCON

字節(jié)地址為87H,沒有位尋址功能。SMOD:波特率選擇位。例如:方式1的波特率的計(jì)算公式為:方式1波特率=(2SMOD/32)×定時器T1的溢出率當(dāng)SMOD=1時,要比SMOD=0時的波特率加倍,也稱SMOD位為波特率倍增位。87.1.2特殊功能寄存器PCON87.2串行口的4種工作方式7.2.1方式0同步移位寄存器輸入輸出方式,常用于外接移位寄存器,以擴(kuò)展并行I/O口。8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。波特率固定為fosc/12。幀格式如下:97.2串行口的4種工作方式7.2.1方式091.方式0發(fā)送

當(dāng)CPU執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令時,產(chǎn)生一個正脈沖,串行口即把SBUF中的8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完8位數(shù)據(jù)置“1”中斷標(biāo)志位TI。101.方式0發(fā)送102.方式0接收 方式0接收時,REN為串行口接收允許接收控制位,REN=0,禁止接收;REN=1,允許接收。 當(dāng)CPU向串行口的SCON寄存器寫入控制字(置為方式0,并置“1”REN位,同時RI=0)時,產(chǎn)生一個正脈沖,串行口即開始接收數(shù)據(jù)。引腳RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號輸出端,接收器也以fosc/12的固定波特率采樣RXD引腳的數(shù)據(jù)信息,當(dāng)接收到8位數(shù)據(jù)時置“1”中斷標(biāo)志RI。表示數(shù)據(jù)接收完畢,可接收下一幀數(shù)據(jù)的。112.方式0接收11方式0下:1)SCON中的TB8、RB8位沒有用到2)發(fā)送或接收完8位數(shù)據(jù)由硬件置“1”TI或RI中斷標(biāo)志位,CPU響應(yīng)中斷。3)TI或RI標(biāo)志位須由用戶軟件清“0”: CLRTI ;TI位清“0” CLRRI ;RI位清“0”4)方式0時,SM2位(多機(jī)通訊控制位)必須為0。12方式0下:12方式0下:接收、發(fā)送的移位時鐘均由單片機(jī)TXD端輸出13方式0下:13例:利用串行口工作方式0擴(kuò)展出8位并行I/O口,驅(qū)動共陽LED數(shù)碼管顯示0—9。ABCLKhgfedcbaCLR+5VVCCTxDRxD51單片機(jī)74LS164共陽LED數(shù)碼管14例:利用串行口工作方式0擴(kuò)展出8位并行I/O口,驅(qū)動共陽LE根據(jù)上圖編寫的通過串行口和74LS164驅(qū)動共陽LED數(shù)碼管(查表)顯示0-9數(shù)字的子程序:DSPLY:MOVDPTR,#TABLEMOVCA,@A+DPTRMOVSBUF,AJNBTI,$CLRTIRETTABLE:DB0C0H,0F9H,0A4HDB0B0H,99H,92HDB82H,0F8H,80H,90Hhgfedcba累加器A110000000C0H=“0”101100000B0H=“3”共陽極hgfedcbaabcdgefh15根據(jù)上圖編寫的通過串行口和hgfedcba累加7.2.2方式1

SM0、SM1=01。用于數(shù)據(jù)的串行發(fā)送和接收。TXD腳和RXD腳分別用于發(fā)送和接收數(shù)據(jù)。方式1收發(fā)一幀的數(shù)據(jù)為10位,1個起始位(0),8個數(shù)據(jù)位,1個停止位(1),先發(fā)送或接收最低位。幀格式如圖所示。波特率由下式確定:方式1波特率=(2SMOD/32)×定時器T1的溢出率SMOD為PCON寄存器的最高位的值(0或1)。

167.2.2方式1波特率由下式確定:161.方式1發(fā)送

方式1輸出時,數(shù)據(jù)位由TXD端輸出,一幀信息為10位,1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫發(fā)送緩沖器SBUF的指令,就啟動發(fā)送。圖中TX時鐘的頻率就是發(fā)送的波特率。發(fā)送開始時,內(nèi)部發(fā)送控制信號變?yōu)橛行?。將起始位向TXD輸出,此后,每經(jīng)過一個TX時鐘周期,便產(chǎn)生一個移位脈沖,并由TXD輸出一個數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,置“1”中斷標(biāo)志位TI,然后失效。171.方式1發(fā)送171.方式1發(fā)送

方式1發(fā)送數(shù)據(jù)的時序,如圖所示。181.方式1發(fā)送182.方式1接收數(shù)據(jù)從RXD(P3.0)引腳輸入。當(dāng)檢測到起始位的負(fù)跳變時,則開始接收。定時控制信號有兩種:一種是接收移位時鐘(RX時鐘),它的頻率和傳送的波特率相同。另一種是位檢測器采樣脈沖,它的頻率是RX時鐘的16倍。也就是在1位數(shù)據(jù)期間,有16個采樣脈沖,以波特率的16倍的速率采樣RXD引腳狀態(tài),當(dāng)采樣到RXD端從1到0的跳變時就啟動檢測器,接收的值是3次連續(xù)采樣(第7、8、9個脈沖時采樣)取其中兩次相同的值,以確認(rèn)是否是真正的起始位(負(fù)跳變)的開始。192.方式1接收192.方式1接收202.方式1接收202121當(dāng)一幀數(shù)據(jù)接收完畢以后,必須同時滿足以下兩個條件,這次接收才真正有效。⑴RI=0,即上一幀數(shù)據(jù)接收完成時,RI=1發(fā)出的中斷請求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說明“接收SBUF”已空。⑵SM2=0或SM2=1且收到的停止位=1(方式1時,停止位已進(jìn)入RB8),則收到的數(shù)據(jù)裝入SBUF和RB8(RB8裝入停止位),且置“1”中斷標(biāo)志RI。若這兩個條件不同時滿足,收到的數(shù)據(jù)不能裝入SBUF,該幀數(shù)據(jù)將丟失。22當(dāng)一幀數(shù)據(jù)接收完畢以后,必須同時滿足以下兩個條件,這次接收才7.2.3方式29位異步通信接口。每幀數(shù)據(jù)均為11位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控的第9位數(shù)據(jù)和1位停止位。幀格式見下圖。(TB8)方式2的波特率由下式確定:方式2波特率=(2SMOD/64)×fosc237.2.3方式2方式2的波特率由下式確定:231.方式2發(fā)送發(fā)送前,先根據(jù)通訊協(xié)議由軟件設(shè)置TB8(例如,雙機(jī)通訊時的奇偶校驗(yàn)位或多機(jī)通訊時的地址/數(shù)據(jù)的標(biāo)志位)。方式2發(fā)送數(shù)據(jù)波形如圖所示。241.方式2發(fā)送24例7-1方式2發(fā)送在雙機(jī)通訊中的應(yīng)用。在雙機(jī)通訊中,以TB8作為奇偶校驗(yàn)位,處理方法為數(shù)據(jù)寫入SBUF之前,先將數(shù)據(jù)的奇偶校驗(yàn)位寫入TB8,以保證采用偶校驗(yàn)發(fā)送。PIPTI:PUSHPSW;現(xiàn)場保護(hù)PUSHAccSETBRS1;選擇第2組工作寄存器區(qū)CLRRS0CLRTI;發(fā)送中斷標(biāo)志清“0”MOVA,@R0;取數(shù)據(jù) MOVC,P;校驗(yàn)位送TB8,采用偶校驗(yàn)MOVTB8,CMOVSBUF,A;啟動發(fā)送INCR0;數(shù)據(jù)指針加1POPAcc;恢復(fù)現(xiàn)場 POPPSW RETI ;中斷返回25例7-1方式2發(fā)送在雙機(jī)通訊中的應(yīng)用。252.方式2接收

SM0、SM1=10,且REN=1。數(shù)據(jù)由RXD端輸入,接收11位信息。當(dāng)位檢測邏輯采樣到RXD引腳從1到0的負(fù)跳變,并判斷起始位有效后,便開始接收一幀信息。在接收器完第9位數(shù)據(jù)后,需滿足以下兩個條件,才能將接收到的數(shù)據(jù)送入SBUF。(1)RI=0,意味著接收緩沖器為空。(2)SM2=0或當(dāng)SM2=1時,接收到第9位數(shù)據(jù)位RB8=1。當(dāng)上述兩個條件滿足時,接收到的數(shù)據(jù)送入SBUF(接收緩沖器),第9位數(shù)據(jù)送入RB8,并置“1”RI。若不滿足這兩個條件,接收的信息將被丟棄。262.方式2接收262.方式2接收

串行口方式2接收數(shù)據(jù)的時序波形如圖所示。272.方式2接收27例7-2方式2接收在雙機(jī)通訊中的應(yīng)用。若附加的第9位數(shù)據(jù)為校驗(yàn)位,偶校驗(yàn)處理,R0為數(shù)據(jù)指針。PIRI: PUSHPSW PUSHAcc SETBRS0 ;選擇1組寄存器區(qū) CLRRS1

CLRRI

MOVA,SBUF;收到數(shù)據(jù)送A MOVC,P ;P=1奇數(shù),P=0偶數(shù) JNCL1 JNBRB8,ERP;ERP為出錯處理程序 AJMPL2L1: JBRB8,ERPL2: MOV@R0,A INCR0 POPAcc POPPSW

ERP: ………;出錯處理程序段 RETI28例7-2方式2接收在雙機(jī)通訊中的應(yīng)用。287.2.4方式3

當(dāng)SM0、SM1=11,串行口工作在方式3。方式3為波特率可變的9位異步通訊方式,除波特率外,方式3和方式2相同。方式3發(fā)送和接收數(shù)據(jù)的時序波形見方式2的圖。方式3的波特率由下式確定:方式3波特率=(2SMOD/32)×定時器T1的溢出率297.2.4方式329 多個MCS-51單片機(jī)可利用串行口可進(jìn)行多機(jī)通訊。要保證主機(jī)與所選擇的從機(jī)實(shí)現(xiàn)可靠地通訊,必須保證串行口具有識別功能。 串行口控制寄存器SCON中的SM2位就是滿足這一條件而設(shè)置的多機(jī)通訊控制位。原理是在串行口以方式2(或方式3)接收時,若SM2=1,表示置多機(jī)通訊功能位,這時出現(xiàn)兩種可能情況:

(1)接收到的第9位數(shù)據(jù)為1時,數(shù)據(jù)才裝入SBUF,并置中斷標(biāo)志RI=1向CPU發(fā)出中斷請求;

(2)接收到的第9位數(shù)據(jù)為0時,則不產(chǎn)生中斷標(biāo)志,信息將拋棄。 若SM2=0,則接收的第9位數(shù)據(jù)不論是0還是1,都產(chǎn)生RI=1中斷標(biāo)志,接收到的數(shù)據(jù)裝入SBUF中。應(yīng)用上述特性,便可實(shí)現(xiàn)MCS-51的多機(jī)通訊7.3多機(jī)通訊30 多個MCS-51單片機(jī)可利用串行口可進(jìn)行多機(jī)通訊。要保證主主機(jī)的RXD與所有從機(jī)的TXD端相連,TXD與所有從機(jī)的RXD端相連。從機(jī)的地址分別為00H、01H和02H。多機(jī)通訊工作過程:(1)從機(jī)串行口編程為方式2或方式3接收,且置“1”SM2和REN位,使從機(jī)只處于多機(jī)通訊且接收地址幀的狀態(tài)。

主機(jī):SM2=0,①TB8=1(都能收到) 從機(jī):①SM2=131主機(jī)的RXD與所有從機(jī)的TXD端相連,TXD與所有從機(jī)的RX(2)在主機(jī)先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))發(fā)送給各從機(jī),接著才傳送數(shù)據(jù)或命令,主機(jī)發(fā)出的地址信息的第9位為1,數(shù)據(jù)(包括命令)信息的第9位為0。當(dāng)主機(jī)向各從機(jī)發(fā)送地址時,各從機(jī)的串行口接收到的第9位信息RB8為1,且由于SM2=1,則置“1”中斷標(biāo)志位RI,各從機(jī)8031響應(yīng)中斷,執(zhí)行中斷服務(wù)程序。在中斷服務(wù)子程序中,判斷主機(jī)送來的地址是否和本機(jī)地址相符合,若為本機(jī)地址,則該從機(jī)清“0”SM2位,準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若地址不相符,則保持SM2=1狀態(tài)。 主機(jī):SM2=0,TB8=1SBUF:通訊從機(jī)地址 從機(jī):SM2=1所有從機(jī)均可以接收32(2)在主機(jī)先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))發(fā)送給各從機(jī)(3)接著主機(jī)發(fā)送數(shù)據(jù)幀,此時各從機(jī)串行口接收到的RB8=0,只有與前面地址相符合的從機(jī)系統(tǒng)(即已清“0”SM2位的從機(jī))才能激活中斷標(biāo)志位RI,從而進(jìn)入中斷服務(wù)程序,在中斷服務(wù)程序中接收主機(jī)的數(shù)據(jù)(或命令);

其它的從機(jī)因SM2保持為1,又RB8=0不激活中斷標(biāo)志RI,不能進(jìn)入中斷,所接收的數(shù)據(jù)丟失不作處理,從而保證主機(jī)和從機(jī)間通訊的正確性。主機(jī):SM2=0,②TB8=0 符合地址從機(jī):②SM2=0可以接收主機(jī)數(shù)據(jù)不符合地址從機(jī):SM2=1所有從機(jī)均可以接收前圖所示的多機(jī)系統(tǒng)是主從式,由主機(jī)控制多機(jī)之間的通訊,從機(jī)和從機(jī)的通訊只能經(jīng)主機(jī)才能實(shí)現(xiàn)。33(3)接著主機(jī)發(fā)送數(shù)據(jù)幀,此時各從機(jī)串行口接收到337.4波特率的制定方法方式0和方式2的波特率是固定的;方式1和方式3波特率可由定時器T1的溢出率來確定。7.4.1波特率的定義定義:串行口每秒鐘發(fā)送(或接收)的位數(shù)稱為波特率。對于定時器的不同工作方式,得到的波特率的范圍不一樣,因?yàn)?,?jì)數(shù)位數(shù)的不同。347.4波特率的制定方法方式0和方式2的波特率是固定的;7.4波特率的制定方法7.4.2定時器T1產(chǎn)生波特率的計(jì)算(1)方式0,波特率固定為時鐘頻率fosc的1/12,且不受SMOD位的值的影響。若fosc=12MHz,波特率為fosc/12即1Mb/s。(2)方式2,波特率與SMOD位的值有關(guān)。方式2波特率=(2SMOD/64)×fosc若fosc=12MHz:SMOD=0波特率=187.5kb/s;SMOD=1波特率=375kb/s357.4波特率的制定方法35(3)串行口工作在方式1或方式3時,常用定時器T1作為波特率發(fā)生器,其波特率為: 波特率=(2SMOD/32)×T1的溢出率實(shí)際設(shè)定波特率時,T1常設(shè)置為方式2定時(自動裝初值)這種方式不僅操作方便,也可避免因軟件重裝初值而帶來的定時誤差。實(shí)際使用時,經(jīng)常根據(jù)已知波特率和時鐘頻率來計(jì)算T1的初值X。公式:為避免煩雜的初值計(jì)算,常用的波特率和初值X間的關(guān)系列成表7-2(P148),以供查用。36(3)串行口工作在方式1或方式3時,常用定時器T1作為波特率表7-2有兩點(diǎn)需要注意:(1)時鐘振蕩頻率為12MHz或6MHz時,表中初值X和相應(yīng)的波特率之間有一定誤差。例如,F(xiàn)DH的對應(yīng)的理論值是10416波特。(時鐘6MHz),與9600波特相差816波特,消除誤差可以調(diào)整時鐘振蕩頻率fosc實(shí)現(xiàn)。例如采用的時鐘振蕩頻率為11.0592MHz(推薦使用)。(2)如果串行通訊選用很低的波特率,例如,波特率選為55,可將定時器T1設(shè)置為方式1定時。但在這種情況下,T1溢出時,需用在中斷服務(wù)程序中重新裝入初值。中斷響應(yīng)時間和執(zhí)行指令時間會使波特率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。(選擇高一點(diǎn)的波特率)37表7-2有兩點(diǎn)需要注意:37例7-3若8031單片機(jī)的時鐘振蕩頻率為11.0592MHz,選用T1為方式2定時作為波特率發(fā)生器,波特率為2400b/s,求初值。X=244=F4H這里時鐘振蕩頻率選為11.0592MHz,就可使初值為整數(shù),從而產(chǎn)生精確的波特率。38例7-3若8031單片機(jī)的時鐘振蕩頻率為11.0592MH7.5串行口的編程和應(yīng)用7.5.1串行口方式1應(yīng)用編程(雙機(jī)通訊)

是采用查詢還是中斷方式? 發(fā)送程序的設(shè)計(jì) 接收程序的設(shè)計(jì)7.5.2串行口方式2應(yīng)用編程

方式2的使用和方式3基本一樣(方式3的波特率要由用戶決定),所以具體使用方法可以參照方式3。7.5.3串行口方式3應(yīng)用編程(雙機(jī)通訊)397.5串行口的編程和應(yīng)用394040若SM2=1,表示置多機(jī)通訊功能位,這時出現(xiàn)兩種可能情況:

(1)接收到的第9位數(shù)據(jù)為1時,數(shù)據(jù)才裝入SBUF,并置中斷標(biāo)志RI=1向CPU發(fā)出中斷請求;

(2)接收到的第9位數(shù)據(jù)為0時,則不產(chǎn)生中斷標(biāo)志,信息將拋棄。41若SM2=1,表示置多機(jī)通訊功能位,這時出現(xiàn)兩種可能情況:442424343第7章MCS-51的串行口7.1串行口的結(jié)構(gòu)7.2串行口的4種方式7.3多機(jī)通訊7.4波特率的制定方法7.5串行口的編程和應(yīng)用44第7章MCS-51的串行口7.1串行口的結(jié)構(gòu)1全雙工的異步通訊串行口。

雙工:接收、發(fā)送數(shù)據(jù)同時進(jìn)行。

異步通訊:收、發(fā)雙方?jīng)]有同步時鐘來控制收、發(fā)雙方同步傳送,而靠各自的時鐘來控制數(shù)據(jù)傳送。4種工作方式,波特率由片內(nèi)定時器/計(jì)數(shù)器控制。每發(fā)送或接收一幀數(shù)據(jù),均可發(fā)出中斷請求。除用于串行通訊,還可用來擴(kuò)展并行I/O口。45全雙工的異步通訊串行口。27.1串行口的結(jié)構(gòu)串行口內(nèi)部結(jié)構(gòu)如下圖,兩個物理上獨(dú)立地接收和發(fā)送緩沖器,可同時收、發(fā)數(shù)據(jù)。兩個數(shù)據(jù)緩沖器共用一個特殊功能寄存器字節(jié)地址:SBUF(99H)。

控制寄存器共兩個:特殊功能寄存器SCON和PCON。467.1串行口的結(jié)構(gòu)37.1.1串行口控制寄存器SCON

字節(jié)地址98H,可位尋址,格式如圖所示。(1)SM0、SM1——串行口4種工作方式的選擇位表串行口的4種工作方式SM0SM1方式 功能說明

000同步移位寄存器方式(用于擴(kuò)展I/O口)0118位異步收發(fā),波特率可變(由定時器控制)1029位異步收發(fā),波特率為fosc/64或fosc/321139位異步收發(fā),波特率可變(由定時器控制)477.1.1串行口控制寄存器SCON4(2)SM2——多機(jī)通信控制位用于方式2或方式3中。當(dāng)串行口以方式2或方式3接收時,

如果SM2=1,只有當(dāng)接收到的第9位數(shù)據(jù)(RB8)為“1”時,才將接收到的前8位數(shù)據(jù)送入SBUF,并置“1”RI,產(chǎn)生中斷請求;當(dāng)接收到的第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。48(2)SM2——多機(jī)通信控制位5(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ù),可作為奇偶校驗(yàn)位使用,也可作為地址幀或數(shù)據(jù)幀的標(biāo)志。 =1為地址幀,=0為數(shù)據(jù)幀(5)RB8——接收到的第9位數(shù)據(jù) 方式2和3時,RB8存放接收到的第9位數(shù)據(jù)。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。49(3)REN——允許串行接收位6(6)TI——發(fā)送中斷標(biāo)志位方式0時,串行發(fā)送第8位數(shù)據(jù)結(jié)束時由硬件置“1”, 其它工作方式,串行口發(fā)送停止位的開始時置“1”。

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

RI=1,表示一幀數(shù)據(jù)接收完畢,并申請中斷,要求CPU從接收SBUF取走數(shù)據(jù)。該位的狀態(tài)也可供軟件查詢。RI必須由軟件清“0”。50(6)TI——發(fā)送中斷標(biāo)志位77.1.2特殊功能寄存器PCON

字節(jié)地址為87H,沒有位尋址功能。SMOD:波特率選擇位。例如:方式1的波特率的計(jì)算公式為:方式1波特率=(2SMOD/32)×定時器T1的溢出率當(dāng)SMOD=1時,要比SMOD=0時的波特率加倍,也稱SMOD位為波特率倍增位。517.1.2特殊功能寄存器PCON87.2串行口的4種工作方式7.2.1方式0同步移位寄存器輸入輸出方式,常用于外接移位寄存器,以擴(kuò)展并行I/O口。8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。波特率固定為fosc/12。幀格式如下:527.2串行口的4種工作方式7.2.1方式091.方式0發(fā)送

當(dāng)CPU執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令時,產(chǎn)生一個正脈沖,串行口即把SBUF中的8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完8位數(shù)據(jù)置“1”中斷標(biāo)志位TI。531.方式0發(fā)送102.方式0接收 方式0接收時,REN為串行口接收允許接收控制位,REN=0,禁止接收;REN=1,允許接收。 當(dāng)CPU向串行口的SCON寄存器寫入控制字(置為方式0,并置“1”REN位,同時RI=0)時,產(chǎn)生一個正脈沖,串行口即開始接收數(shù)據(jù)。引腳RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號輸出端,接收器也以fosc/12的固定波特率采樣RXD引腳的數(shù)據(jù)信息,當(dāng)接收到8位數(shù)據(jù)時置“1”中斷標(biāo)志RI。表示數(shù)據(jù)接收完畢,可接收下一幀數(shù)據(jù)的。542.方式0接收11方式0下:1)SCON中的TB8、RB8位沒有用到2)發(fā)送或接收完8位數(shù)據(jù)由硬件置“1”TI或RI中斷標(biāo)志位,CPU響應(yīng)中斷。3)TI或RI標(biāo)志位須由用戶軟件清“0”: CLRTI ;TI位清“0” CLRRI ;RI位清“0”4)方式0時,SM2位(多機(jī)通訊控制位)必須為0。55方式0下:12方式0下:接收、發(fā)送的移位時鐘均由單片機(jī)TXD端輸出56方式0下:13例:利用串行口工作方式0擴(kuò)展出8位并行I/O口,驅(qū)動共陽LED數(shù)碼管顯示0—9。ABCLKhgfedcbaCLR+5VVCCTxDRxD51單片機(jī)74LS164共陽LED數(shù)碼管57例:利用串行口工作方式0擴(kuò)展出8位并行I/O口,驅(qū)動共陽LE根據(jù)上圖編寫的通過串行口和74LS164驅(qū)動共陽LED數(shù)碼管(查表)顯示0-9數(shù)字的子程序:DSPLY:MOVDPTR,#TABLEMOVCA,@A+DPTRMOVSBUF,AJNBTI,$CLRTIRETTABLE:DB0C0H,0F9H,0A4HDB0B0H,99H,92HDB82H,0F8H,80H,90Hhgfedcba累加器A110000000C0H=“0”101100000B0H=“3”共陽極hgfedcbaabcdgefh58根據(jù)上圖編寫的通過串行口和hgfedcba累加7.2.2方式1

SM0、SM1=01。用于數(shù)據(jù)的串行發(fā)送和接收。TXD腳和RXD腳分別用于發(fā)送和接收數(shù)據(jù)。方式1收發(fā)一幀的數(shù)據(jù)為10位,1個起始位(0),8個數(shù)據(jù)位,1個停止位(1),先發(fā)送或接收最低位。幀格式如圖所示。波特率由下式確定:方式1波特率=(2SMOD/32)×定時器T1的溢出率SMOD為PCON寄存器的最高位的值(0或1)。

597.2.2方式1波特率由下式確定:161.方式1發(fā)送

方式1輸出時,數(shù)據(jù)位由TXD端輸出,一幀信息為10位,1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫發(fā)送緩沖器SBUF的指令,就啟動發(fā)送。圖中TX時鐘的頻率就是發(fā)送的波特率。發(fā)送開始時,內(nèi)部發(fā)送控制信號變?yōu)橛行?。將起始位向TXD輸出,此后,每經(jīng)過一個TX時鐘周期,便產(chǎn)生一個移位脈沖,并由TXD輸出一個數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,置“1”中斷標(biāo)志位TI,然后失效。601.方式1發(fā)送171.方式1發(fā)送

方式1發(fā)送數(shù)據(jù)的時序,如圖所示。611.方式1發(fā)送182.方式1接收數(shù)據(jù)從RXD(P3.0)引腳輸入。當(dāng)檢測到起始位的負(fù)跳變時,則開始接收。定時控制信號有兩種:一種是接收移位時鐘(RX時鐘),它的頻率和傳送的波特率相同。另一種是位檢測器采樣脈沖,它的頻率是RX時鐘的16倍。也就是在1位數(shù)據(jù)期間,有16個采樣脈沖,以波特率的16倍的速率采樣RXD引腳狀態(tài),當(dāng)采樣到RXD端從1到0的跳變時就啟動檢測器,接收的值是3次連續(xù)采樣(第7、8、9個脈沖時采樣)取其中兩次相同的值,以確認(rèn)是否是真正的起始位(負(fù)跳變)的開始。622.方式1接收192.方式1接收632.方式1接收206421當(dāng)一幀數(shù)據(jù)接收完畢以后,必須同時滿足以下兩個條件,這次接收才真正有效。⑴RI=0,即上一幀數(shù)據(jù)接收完成時,RI=1發(fā)出的中斷請求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說明“接收SBUF”已空。⑵SM2=0或SM2=1且收到的停止位=1(方式1時,停止位已進(jìn)入RB8),則收到的數(shù)據(jù)裝入SBUF和RB8(RB8裝入停止位),且置“1”中斷標(biāo)志RI。若這兩個條件不同時滿足,收到的數(shù)據(jù)不能裝入SBUF,該幀數(shù)據(jù)將丟失。65當(dāng)一幀數(shù)據(jù)接收完畢以后,必須同時滿足以下兩個條件,這次接收才7.2.3方式29位異步通信接口。每幀數(shù)據(jù)均為11位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控的第9位數(shù)據(jù)和1位停止位。幀格式見下圖。(TB8)方式2的波特率由下式確定:方式2波特率=(2SMOD/64)×fosc667.2.3方式2方式2的波特率由下式確定:231.方式2發(fā)送發(fā)送前,先根據(jù)通訊協(xié)議由軟件設(shè)置TB8(例如,雙機(jī)通訊時的奇偶校驗(yàn)位或多機(jī)通訊時的地址/數(shù)據(jù)的標(biāo)志位)。方式2發(fā)送數(shù)據(jù)波形如圖所示。671.方式2發(fā)送24例7-1方式2發(fā)送在雙機(jī)通訊中的應(yīng)用。在雙機(jī)通訊中,以TB8作為奇偶校驗(yàn)位,處理方法為數(shù)據(jù)寫入SBUF之前,先將數(shù)據(jù)的奇偶校驗(yàn)位寫入TB8,以保證采用偶校驗(yàn)發(fā)送。PIPTI:PUSHPSW;現(xiàn)場保護(hù)PUSHAccSETBRS1;選擇第2組工作寄存器區(qū)CLRRS0CLRTI;發(fā)送中斷標(biāo)志清“0”MOVA,@R0;取數(shù)據(jù) MOVC,P;校驗(yàn)位送TB8,采用偶校驗(yàn)MOVTB8,CMOVSBUF,A;啟動發(fā)送INCR0;數(shù)據(jù)指針加1POPAcc;恢復(fù)現(xiàn)場 POPPSW RETI ;中斷返回68例7-1方式2發(fā)送在雙機(jī)通訊中的應(yīng)用。252.方式2接收

SM0、SM1=10,且REN=1。數(shù)據(jù)由RXD端輸入,接收11位信息。當(dāng)位檢測邏輯采樣到RXD引腳從1到0的負(fù)跳變,并判斷起始位有效后,便開始接收一幀信息。在接收器完第9位數(shù)據(jù)后,需滿足以下兩個條件,才能將接收到的數(shù)據(jù)送入SBUF。(1)RI=0,意味著接收緩沖器為空。(2)SM2=0或當(dāng)SM2=1時,接收到第9位數(shù)據(jù)位RB8=1。當(dāng)上述兩個條件滿足時,接收到的數(shù)據(jù)送入SBUF(接收緩沖器),第9位數(shù)據(jù)送入RB8,并置“1”RI。若不滿足這兩個條件,接收的信息將被丟棄。692.方式2接收262.方式2接收

串行口方式2接收數(shù)據(jù)的時序波形如圖所示。702.方式2接收27例7-2方式2接收在雙機(jī)通訊中的應(yīng)用。若附加的第9位數(shù)據(jù)為校驗(yàn)位,偶校驗(yàn)處理,R0為數(shù)據(jù)指針。PIRI: PUSHPSW PUSHAcc SETBRS0 ;選擇1組寄存器區(qū) CLRRS1

CLRRI

MOVA,SBUF;收到數(shù)據(jù)送A MOVC,P ;P=1奇數(shù),P=0偶數(shù) JNCL1 JNBRB8,ERP;ERP為出錯處理程序 AJMPL2L1: JBRB8,ERPL2: MOV@R0,A INCR0 POPAcc POPPSW

ERP: ………;出錯處理程序段 RETI71例7-2方式2接收在雙機(jī)通訊中的應(yīng)用。287.2.4方式3

當(dāng)SM0、SM1=11,串行口工作在方式3。方式3為波特率可變的9位異步通訊方式,除波特率外,方式3和方式2相同。方式3發(fā)送和接收數(shù)據(jù)的時序波形見方式2的圖。方式3的波特率由下式確定:方式3波特率=(2SMOD/32)×定時器T1的溢出率727.2.4方式329 多個MCS-51單片機(jī)可利用串行口可進(jìn)行多機(jī)通訊。要保證主機(jī)與所選擇的從機(jī)實(shí)現(xiàn)可靠地通訊,必須保證串行口具有識別功能。 串行口控制寄存器SCON中的SM2位就是滿足這一條件而設(shè)置的多機(jī)通訊控制位。原理是在串行口以方式2(或方式3)接收時,若SM2=1,表示置多機(jī)通訊功能位,這時出現(xiàn)兩種可能情況:

(1)接收到的第9位數(shù)據(jù)為1時,數(shù)據(jù)才裝入SBUF,并置中斷標(biāo)志RI=1向CPU發(fā)出中斷請求;

(2)接收到的第9位數(shù)據(jù)為0時,則不產(chǎn)生中斷標(biāo)志,信息將拋棄。 若SM2=0,則接收的第9位數(shù)據(jù)不論是0還是1,都產(chǎn)生RI=1中斷標(biāo)志,接收到的數(shù)據(jù)裝入SBUF中。應(yīng)用上述特性,便可實(shí)現(xiàn)MCS-51的多機(jī)通訊7.3多機(jī)通訊73 多個MCS-51單片機(jī)可利用串行口可進(jìn)行多機(jī)通訊。要保證主主機(jī)的RXD與所有從機(jī)的TXD端相連,TXD與所有從機(jī)的RXD端相連。從機(jī)的地址分別為00H、01H和02H。多機(jī)通訊工作過程:(1)從機(jī)串行口編程為方式2或方式3接收,且置“1”SM2和REN位,使從機(jī)只處于多機(jī)通訊且接收地址幀的狀態(tài)。

主機(jī):SM2=0,①TB8=1(都能收到) 從機(jī):①SM2=174主機(jī)的RXD與所有從機(jī)的TXD端相連,TXD與所有從機(jī)的RX(2)在主機(jī)先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))發(fā)送給各從機(jī),接著才傳送數(shù)據(jù)或命令,主機(jī)發(fā)出的地址信息的第9位為1,數(shù)據(jù)(包括命令)信息的第9位為0。當(dāng)主機(jī)向各從機(jī)發(fā)送地址時,各從機(jī)的串行口接收到的第9位信息RB8為1,且由于SM2=1,則置“1”中斷標(biāo)志位RI,各從機(jī)8031響應(yīng)中斷,執(zhí)行中斷服務(wù)程序。在中斷服務(wù)子程序中,判斷主機(jī)送來的地址是否和本機(jī)地址相符合,若為本機(jī)地址,則該從機(jī)清“0”SM2位,準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若地址不相符,則保持SM2=1狀態(tài)。 主機(jī):SM2=0,TB8=1SBUF:通訊從機(jī)地址 從機(jī):SM2=1所有從機(jī)均可以接收75(2)在主機(jī)先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))發(fā)送給各從機(jī)(3)接著主機(jī)發(fā)送數(shù)據(jù)幀,此時各從機(jī)串行口接收到的RB8=0,只有與前面地址相符合的從機(jī)系統(tǒng)(即已清“0”SM2位的從機(jī))才能激活中斷標(biāo)志位RI,從而進(jìn)入中斷服務(wù)程序,在中斷服務(wù)程序中接收主機(jī)的數(shù)據(jù)(或命令);

其它的從機(jī)因SM2保持為1,又RB8=0不激活中斷標(biāo)志RI,不能進(jìn)入中斷,所接收的數(shù)據(jù)丟失不作處理,從而保證主機(jī)和從機(jī)間

溫馨提示

  • 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

提交評論