第7章 AT89S51單片機(jī)的串行口_第1頁(yè)
第7章 AT89S51單片機(jī)的串行口_第2頁(yè)
第7章 AT89S51單片機(jī)的串行口_第3頁(yè)
第7章 AT89S51單片機(jī)的串行口_第4頁(yè)
第7章 AT89S51單片機(jī)的串行口_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第7章

AT89S51單片機(jī)的串行口12AT89S51單片機(jī)片內(nèi)串行口的基本工作原理與串行口有關(guān)的特殊功能寄存器串行口的4種工作方式串行口多機(jī)通信的工作原理串行通信中的各種接口標(biāo)準(zhǔn)雙機(jī)串行通信的軟件編程設(shè)計(jì)

內(nèi)容概要3AT89S51單片機(jī)片內(nèi)的串行口為全雙工的通用異步收發(fā)(UART)的串行口。

所謂全雙工就是兩個(gè)單片機(jī)之間串行數(shù)據(jù)可同時(shí)雙向傳輸。所謂異步通信,就是收、發(fā)雙方使用各自的時(shí)鐘控制發(fā)送和接收過(guò)程,這樣可省去連接收、發(fā)雙方的一條同步時(shí)鐘信號(hào)線,使得異步串行通信連接更加簡(jiǎn)單且容易實(shí)現(xiàn)。47.1串行口的結(jié)構(gòu)內(nèi)部結(jié)構(gòu)如圖7-1。有兩個(gè)物理上獨(dú)立的接收、發(fā)送緩沖器SBUF(屬于特殊功能寄存器),可同時(shí)發(fā)送、接收數(shù)據(jù)。

發(fā)送緩沖器只能寫(xiě)入不能讀出,接收緩沖器只能讀出不能寫(xiě)入,兩個(gè)緩沖器共用一個(gè)特殊功能寄存器字節(jié)地址(99H)。控制寄存器共有兩個(gè):特殊功能寄存器SCON和PCON。455圖7-1串行口的內(nèi)部結(jié)構(gòu)圖67.1.1串行口控制寄存器SCON字節(jié)地址98H,可位尋址,位地址為98H~9FH。格式如圖7-2所示。

圖7-2串行口控制寄存器SCON的格式介紹SCON中各位的功能。67(1)SM0、SM1——串行口4種工作方式選擇位SM0、SM1兩位編碼所對(duì)應(yīng)的4種工作方式見(jiàn)表7-1。8(2)SM2——多機(jī)通信控制位多機(jī)通信是在方式2和方式3下進(jìn)行。當(dāng)串口以方式2或方式3接收時(shí):當(dāng)SM2

=

1,則只有當(dāng)接收到的第9位數(shù)據(jù)(RB8)為“1”時(shí),才使RI置“1”,產(chǎn)生中斷請(qǐng)求,并將接收到的前8位數(shù)據(jù)送入SBUF。當(dāng)接收到的第9位數(shù)據(jù)(RB8)為“0”時(shí),則將接收到的前8位數(shù)據(jù)丟棄。當(dāng)SM2

=

0時(shí),則不論第9位數(shù)據(jù)是1還是0,都將前8位數(shù)據(jù)送入SBUF中,并使RI置1,產(chǎn)生中斷請(qǐng)求。在方式1時(shí),如果SM2

=

1,則只有收到有效的停止位時(shí)才會(huì)激活RI。在方式0時(shí),SM2必須為0。89(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ù),其值由軟件置“1”或清“0”。在雙機(jī)串行通信時(shí),一般作為奇偶校驗(yàn)位使用;在多機(jī)串行通信中用來(lái)表示主機(jī)發(fā)送的是地址幀還是數(shù)據(jù)幀,TB8=1為地址幀,TB8=0為數(shù)據(jù)幀。910(5)RB8——接收的第9位數(shù)據(jù)方式2和方式3,RB8存放接收到的第9位數(shù)據(jù)。在方式1,如SM2

=

0,RB8是接收到的停止位。在方式0,不使用RB8。(6)TI——發(fā)送中斷標(biāo)志位方式0,串行發(fā)送的第8位數(shù)據(jù)結(jié)束時(shí)TI由硬件置“1”,在其他方式中,串行口發(fā)送停止位的開(kāi)始時(shí)置TI為“1”。TI

=1,表示一幀數(shù)據(jù)發(fā)送結(jié)束。TI的狀態(tài)可供軟件查詢(xún),也可申請(qǐng)中斷。CPU響應(yīng)中斷后,在中斷服務(wù)程序中向SBUF寫(xiě)入要發(fā)送的下一幀數(shù)據(jù)。TI必須由軟件清“0”1011(7)RI——接收中斷標(biāo)志位

方式0時(shí),接收完第8位數(shù)據(jù)時(shí),RI由硬件置“1”。在其他工作方式中,串行接收到停止位時(shí),該位置“1”。RI

=

1,表示一幀數(shù)據(jù)接收完畢,并申請(qǐng)中斷,要求CPU從接收SBUF取走數(shù)據(jù)。該位的狀態(tài)也可供軟件查詢(xún)。RI必須由軟件清“0”。SCON的所有位都可進(jìn)行位操作清“0”或置“1”。127.1.2特殊功能寄存器PCON字節(jié)地址為87H,不能位尋址。格式如圖7-3所示。

12圖7-3特殊功能寄存器PCON的格式13下面介紹PCON中各位功能。僅最高位SMOD與串口有關(guān),其他各位的功能已在第2章的節(jié)電工作方式一節(jié)中作過(guò)介紹。SMOD:波特率選擇位例如,方式1的波特率計(jì)算公式為 方式1波特率

=

×

定時(shí)器T1的溢出率當(dāng)SMOD

=

1時(shí),要比SMOD

=

0時(shí)的波特率加倍,所以也稱(chēng)SMOD位為波特率倍增位。13147.2串行口的4種工作方式4種工作方式由特殊功能寄存器SCON中SM0、SM1位定義。7.2.1方式0方式0為同步移位寄存器輸入/輸出方式。該方式并不用于兩個(gè)AT89S51單片機(jī)之間的異步串行通信,而用于串行口外接移位寄存器,擴(kuò)展并行I/O口。8位數(shù)據(jù)為一幀,無(wú)起始位和停止位,先發(fā)送或接收最低位。波特率固定,為fosc/12。幀格式如圖7-4所示。圖7-4方式0的幀格式14151.方式0發(fā)送(1)方式0發(fā)送過(guò)程當(dāng)CPU執(zhí)行一條將數(shù)據(jù)寫(xiě)入發(fā)送緩沖器SBUF的指令時(shí),產(chǎn)生一個(gè)正脈沖,串行口開(kāi)始把SBUF中的8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完8位數(shù)據(jù),中斷標(biāo)志位TI置“1”。發(fā)送時(shí)序如圖7-5所示。151616圖7-5方式0發(fā)送時(shí)序17(2)方式0發(fā)送應(yīng)用舉例圖7-6所示為方式0發(fā)送的一個(gè)具體應(yīng)用,通過(guò)串行口外接8位串行輸入并行輸出移位寄存器74LS164,擴(kuò)展兩個(gè)8位并行輸出口的具體電路。方式0發(fā)送時(shí),串行數(shù)據(jù)由P3.0(RXD端)送出,移位脈沖由P3.1(TXD端)送出。在移位脈沖的作用下,串行口發(fā)送緩沖器的數(shù)據(jù)逐位地從P3.0串行移入74LS164中。1718圖7-6外接串入并出移位寄存器74LS164擴(kuò)展的并行輸出口18192.方式0接收(1)方式0接收過(guò)程方式0接收,REN為串行口允許接收控制位,REN=0,禁止接收;REN

=

1,允許接收。當(dāng)向SCON寄存器寫(xiě)入控制字(設(shè)置為方式0,并使REN位置1,同時(shí)RI

=

0)時(shí),產(chǎn)生一個(gè)正脈沖,串行口開(kāi)始接收數(shù)據(jù)。引腳RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號(hào)輸出端,接收器以fosc/12的固定波特率采樣RXD引腳的數(shù)據(jù)信息,當(dāng)接收完8位數(shù)據(jù)時(shí),中斷標(biāo)志RI置1,表示一幀數(shù)據(jù)接收完畢,可進(jìn)行下一幀數(shù)據(jù)的接收,時(shí)序如圖7-7所示。1920圖7-7方式0接收時(shí)序21(2)方式0接收應(yīng)用舉例圖7-8為串行口外接兩片8位并行輸入串行輸出的寄存器74LS165擴(kuò)展兩個(gè)8位并行輸入口的電路。當(dāng)74LS165的S/L*端由高到低跳變時(shí),并行輸入端的數(shù)據(jù)被置入寄存器;當(dāng)S/L*=

1,且時(shí)鐘禁止端(第15腳)為低電平時(shí),允許TXD(P3.1)串行移位脈沖輸入,這時(shí)在移位脈沖作用下,數(shù)據(jù)由右向左方向移動(dòng),以串行方式進(jìn)入串行口的接收緩沖器中。212222圖7-8擴(kuò)展74LS165作為并行輸入口23在圖7-8中:TXD(P3.1)作為移位脈沖輸出與所有75LS165的移位脈沖輸入端CP相連;RXD(P3.0)作為串行數(shù)據(jù)輸入端與74LS165的串行輸出端QH相連;P1.0與S/L*相連,用來(lái)控制74LS165的串行移位或并行輸入;74LS165的時(shí)鐘禁止端(第15腳)接地,表示允許時(shí)鐘輸入。當(dāng)擴(kuò)展多個(gè)8位輸入口時(shí),相鄰兩芯片的首尾(QH與SIN)相連。2324在方式0,SCON中的TB8、RB8位沒(méi)有用到,發(fā)送或接收完8位數(shù)據(jù)由硬件使TI或RI中斷標(biāo)志位置“1”,CPU響應(yīng)TI或RI中斷,在中斷服務(wù)程序中向發(fā)送SBUF中送入下一個(gè)要發(fā)送的數(shù)據(jù)或從接收SBUF中把接收到的1B存入內(nèi)部RAM中。注意,TI或RI標(biāo)志位必須由軟件清“0”,采用如下指令: CLR TI ;TI位清“0” CLR RI ;RI位清“0”方式0時(shí),SM2位(多機(jī)通信控制位)必須為0。24257.2.2方式1方式1為雙機(jī)串行通信方式,如圖7-9所示。當(dāng)SM0、SM1=01時(shí),串行口設(shè)為方式1的雙機(jī)串行通信。TXD腳和RXD腳分別用于發(fā)送和接收數(shù)據(jù)。

25圖7-9方式1雙機(jī)串行通信的連接電路26方式1一幀數(shù)據(jù)為10位,1個(gè)起始位(0),8個(gè)數(shù)據(jù)位,1個(gè)停止位(1),先發(fā)送或接收最低位。幀格式如圖7-10所示。

圖7-10方式1的幀格式方式1為波特率可變的8位異步通信接口。波特率由下式確定:

方式1波特率

=

×定時(shí)器T1的溢出率式中,SMOD為PCON寄存器的最高位的值(0或1)。26271.方式1發(fā)送方式1輸出時(shí),數(shù)據(jù)位由TXD端輸出,發(fā)送一幀信息為10位:1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫(xiě)SBUF的指令,就啟動(dòng)發(fā)送。發(fā)送時(shí)序見(jiàn)圖7-11。圖7-11中TX時(shí)鐘的頻率就是發(fā)送的波特率。發(fā)送開(kāi)始時(shí),內(nèi)部發(fā)送控制信號(hào)變?yōu)橛行?,將起始位向TXD腳(P3.1)輸出,此后每經(jīng)過(guò)一個(gè)TX時(shí)鐘周期,便產(chǎn)生一個(gè)移位脈沖,并由TXD引腳輸出一個(gè)數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,中斷標(biāo)志位TI置1。2728

28圖7-11方式1發(fā)送時(shí)序292.方式1接收方式1接收時(shí)(REN

=

1),數(shù)據(jù)從RXD(P3.0)引腳輸入。當(dāng)檢測(cè)到起始位的負(fù)跳變,則開(kāi)始接收。接收時(shí)序見(jiàn)圖7-12。接收時(shí),定時(shí)控制信號(hào)有兩種,一種是接收移位時(shí)鐘(RX時(shí)鐘),它的頻率和傳送的波特率相同,另一種是位檢測(cè)器采樣脈沖,頻率是RX時(shí)鐘的16倍。以波特率的16倍速率采樣RXD腳狀態(tài)。當(dāng)采樣到RXD端從1到0的負(fù)跳變時(shí)就啟動(dòng)檢測(cè)器,接收的值是3次連續(xù)采樣(第7、8、9個(gè)脈沖時(shí)采樣)取兩次相同的值,以確認(rèn)起始位(負(fù)跳變)的開(kāi)始,較好地消除干擾引起的影響。2930圖7-12方式1接收時(shí)序3131當(dāng)確認(rèn)起始位有效時(shí),開(kāi)始接收一幀信息。每一位數(shù)據(jù),也都進(jìn)行3次連續(xù)采樣(第7、8、9個(gè)脈沖采樣),接收的值是3次采樣中至少兩次相同的值。當(dāng)一幀數(shù)據(jù)接收完畢后,同時(shí)滿足以下兩個(gè)條件,接收才有效。(1)RI

=

0,即上一幀數(shù)據(jù)接收完成時(shí),RI

=

1發(fā)出的中斷請(qǐng)求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說(shuō)明“接收SBUF”已空。(2)SM2

=

0或收到的停止位

=

1(方式1時(shí),停止位已進(jìn)入RB8),則將接收到的數(shù)據(jù)裝入SBUF和RB8(裝入的是停止位),且中斷標(biāo)志RI置“1”。若不同時(shí)滿足兩個(gè)條件,收的數(shù)據(jù)不能裝入SBUF,該幀數(shù)據(jù)將丟棄。327.2.3方式2方式2和方式3,為9位異步通信接口。每幀數(shù)據(jù)為11位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控為1或0的第9位數(shù)據(jù)和1位停止位。方式2、方式3幀格式如圖7-13所示。

3233圖7-13方式2、方式3的幀格式341.方式2發(fā)送發(fā)送前,先根據(jù)通信協(xié)議由軟件設(shè)置TB8(如奇偶校驗(yàn)位或多機(jī)通信的地址/數(shù)據(jù)標(biāo)志位),然后將要發(fā)送的數(shù)據(jù)寫(xiě)入SBUF,即啟動(dòng)發(fā)送。TB8自動(dòng)裝入第9位數(shù)據(jù)位,逐一發(fā)送。發(fā)送完畢,使TI位置“1”。發(fā)送時(shí)序如圖7-14所示。

3435圖7-14方式2和方式3發(fā)送時(shí)序36【例7-1】方式2發(fā)送在雙機(jī)串行通信中的應(yīng)用下面的發(fā)送中斷服務(wù)程序,以TB8作為奇偶校驗(yàn)位,偶校驗(yàn)發(fā)送。數(shù)據(jù)寫(xiě)入SBUF之前,先將數(shù)據(jù)的偶校驗(yàn)位寫(xiě)入TB8(設(shè)第2組的工作寄存器區(qū)的R0作為發(fā)送數(shù)據(jù)區(qū)地址指針)。36372.方式2接收SM0、SM1=10,且REN

=

1時(shí),以方式2接收數(shù)據(jù)。數(shù)據(jù)由RXD端輸入,接收11位信息。當(dāng)位檢測(cè)邏輯采樣到RXD的負(fù)跳變,判斷起始位有效,便開(kāi)始接收一幀信息。在接收完第9位數(shù)據(jù)后,需滿足以下兩個(gè)條件,才能將接收到的數(shù)據(jù)送入SBUF(接收緩沖器)。(1)RI

=

0,意味著接收緩沖器為空。(2)SM2

=

0或接收到的第9位數(shù)據(jù)位RB8

=

1。當(dāng)滿足上述兩個(gè)條件時(shí),收到的數(shù)據(jù)送SBUF(接收緩沖器),第9位數(shù)據(jù)送入RB8,且RI置“1”。若不滿足這兩個(gè)條件,接收的信息將被丟棄。串行口方式2和方式3接收時(shí)序如圖7-15所示。373838圖7-15方式2和方式3接收時(shí)序39【例7-2】方式2接收在雙機(jī)通信中的應(yīng)用。本例對(duì)例7-1發(fā)送的數(shù)據(jù)進(jìn)行偶校驗(yàn)接收,程序如下(設(shè)1組寄存器區(qū)的R0為數(shù)據(jù)緩沖區(qū)指針)。394040417.2.4方式3SM0、SM1=11時(shí),方式3。為波特率可變的9位異步通信方式,除了波特率外,方式3和方式2相同。方式3發(fā)送和接收時(shí)序如圖7-14和圖7-15所示。方式3的波特率由下式確定:41427.3多機(jī)通信多個(gè)單片機(jī)可利用串行口進(jìn)行多機(jī)通信,經(jīng)常采用如圖7-16所示的主從式結(jié)構(gòu)。系統(tǒng)中有1個(gè)主機(jī)(單片機(jī)或其他有串行接口的微機(jī))和多個(gè)單片機(jī)組成的從機(jī)系統(tǒng)。主機(jī)的RXD與所有從機(jī)的TXD端相連,TXD與所有從機(jī)的RXD端相連。從機(jī)地址分別為01H、02H和03H。42圖7-16多機(jī)通信系統(tǒng)示意圖43主從式是指多機(jī)系統(tǒng)中,只有一個(gè)主機(jī),其余全是從機(jī)。主機(jī)發(fā)送的信息可以被所有從機(jī)接收,任何一個(gè)從機(jī)發(fā)送的信息,只能由主機(jī)接收。從機(jī)和從機(jī)之間不能進(jìn)行直接通信,只能經(jīng)主機(jī)才能實(shí)現(xiàn)。多機(jī)通信的工作原理:要保證主機(jī)與所選擇的從機(jī)通信,須保證串口有識(shí)別功能。SCON中的SM2位就是為滿足這一條件設(shè)置的多機(jī)通信控制位。其工作原理是在串行口以方式2(或方式3)接收時(shí),若SM2

=

1,則表示進(jìn)行多機(jī)通信,可能以下兩種情況:4344(1)從機(jī)接收到的主機(jī)發(fā)來(lái)的第9位數(shù)據(jù)RB8=1時(shí),前8位數(shù)據(jù)才裝入SBUF,并置中斷標(biāo)志RI

=

1,向CPU發(fā)出中斷請(qǐng)求。在中斷服務(wù)程序中,從機(jī)把接收到的SBUF中的數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū)中。(2)從機(jī)接收到的第9位數(shù)據(jù)RB8=0時(shí),則不產(chǎn)生中斷標(biāo)志RI=1,不引起中斷,從機(jī)不接收主機(jī)發(fā)來(lái)的數(shù)據(jù)。若SM2

=

0,則接收的第9位數(shù)據(jù)不論是0還是1,從機(jī)都將產(chǎn)生RI

=

1中斷標(biāo)志,接收到的數(shù)據(jù)裝入SBUF中。45應(yīng)用這一特性,可實(shí)現(xiàn)AT89S51單片機(jī)的多機(jī)通信。多機(jī)通信的工作過(guò)程:(1)各從機(jī)初始化程序允許從機(jī)的串行口中斷,將串行口編程為方式2或方式3接收,即9位異步通信方式,且SM2和REN位置“1”,使從機(jī)處于多機(jī)通信且只接收地址幀的狀態(tài)。4546(2)在主機(jī)和某個(gè)從機(jī)通信之前,先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))發(fā)送給各個(gè)從機(jī),接著才傳送數(shù)據(jù)(或命令),主機(jī)發(fā)出的地址幀信息的第9位為1,數(shù)據(jù)(或命令)幀的第9位為0。當(dāng)主機(jī)向各從機(jī)發(fā)送地址幀時(shí),各從機(jī)的串行口接收到的第9位信息RB8為1,且由于各從機(jī)的SM2=1,則RI置“1”,各從機(jī)響應(yīng)中斷,在中斷服務(wù)子程序中,判斷主機(jī)送來(lái)的地址是否和本機(jī)地址相符合,若為本機(jī)地址,則該從機(jī)SM2位清“0”,準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若地址不相符,則保持SM2

=

1。47(3)接著主機(jī)發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀的第9位為0。此時(shí)各從機(jī)接收到的RB8

=

0。只有與前面地址相符合的從機(jī)(即SM2位已清“0”的從機(jī))才能激活中斷標(biāo)志位RI,從而進(jìn)入中斷服務(wù)程序,接收主機(jī)發(fā)來(lái)的數(shù)據(jù)(或命令);與主機(jī)發(fā)來(lái)的地址不相符的從機(jī),由于SM2保持為1,又RB8

=

0,因此不能激活中斷標(biāo)志RI,就不能接受主機(jī)發(fā)來(lái)的數(shù)據(jù)幀。4748從而保證主機(jī)與從機(jī)間通信的正確性。此時(shí)主機(jī)與建立聯(lián)系的從機(jī)已經(jīng)設(shè)置為單機(jī)通信模式,即在整個(gè)通信中,通信的雙方都要保持發(fā)送數(shù)據(jù)的第9位(即TB8位)為0,防止其他的從機(jī)誤接收數(shù)據(jù)。(4)結(jié)束數(shù)據(jù)通信并為下一次的多機(jī)通信做好準(zhǔn)備。在多機(jī)系統(tǒng),每個(gè)從機(jī)都被賦予唯一的地址。例如,圖7-16三個(gè)從機(jī)的地址可設(shè)為:01H、02H、03H。還要預(yù)留1~2個(gè)“廣播地址”,它是所有從機(jī)共有的地址,例如將“廣播地址”設(shè)為00H。當(dāng)主機(jī)與從機(jī)的數(shù)據(jù)通信結(jié)束后,一定要將從機(jī)再設(shè)置為多機(jī)通信模式,以便進(jìn)行下一次的多機(jī)通信。49這時(shí)要求與主機(jī)正在進(jìn)行數(shù)據(jù)傳輸?shù)膹臋C(jī)必須隨時(shí)注意,一旦接收的數(shù)據(jù)第9位(RB8)為“1”,說(shuō)明主機(jī)傳送的不再是數(shù)據(jù),而是地址,這個(gè)地址就有可能是“廣播地址”。當(dāng)收到“廣播地址”后,便將從機(jī)的通信模式再設(shè)置成多機(jī)模式,為下一次的多機(jī)通信做好準(zhǔn)備。49507.4波特率的制定方法串行通信,收、發(fā)雙方發(fā)送或接收的波特率必須一致。4種工作方式。方式0和方式2的波特率是固定的;方式1和方式3的波特率是可變的,由T1溢出率確定。7.4.1波特率的定義波特率的定義:串行口每秒發(fā)送(或接收)的位數(shù)。設(shè)發(fā)送一位所需要的時(shí)間為T(mén),則波特率為1/T。定時(shí)器的不同工作方式,得到的波特率的范圍不一樣,這是由T1在不同工作方式下計(jì)數(shù)位數(shù)的不同所決定。50517.4.2定時(shí)器T1產(chǎn)生波特率的計(jì)算與串行口的工作方式有關(guān)。(1)方式0時(shí),波特率固定為時(shí)鐘頻率fosc的1/12,不受SMOD位值的影響。若fosc

=

12MHz,波特率為1Mbit/s。(2)方式2時(shí),波特率僅與SMOD位的值有關(guān)。

若fosc

=

12MHz:

SMOD

=

0,波特率

=

187.5kbit/s;SMOD

=

1,波特率

為375kbit/s。(3)方式1或方式3定時(shí),常用T1作為波特率發(fā)生器,其關(guān)系式為5152由式(7-1)見(jiàn),T1溢出率和SMOD的值共同決定波特率。在實(shí)際設(shè)定波特率時(shí),T1常設(shè)置為方式2定時(shí)(自動(dòng)裝初值),即TL1作為8位計(jì)數(shù)器,TH1存放備用初值。這種方式操作方便,也避免因軟件重裝初值帶來(lái)的定時(shí)誤差。設(shè)定時(shí)器T1方式2的初值為X,則有

52(7-1)(7-2)53將式(7-2)代入式(7-1),則有(7-3)由式(7-3)可見(jiàn),波特率隨fosc、SMOD和初值X而變化。實(shí)際使用時(shí),經(jīng)常根據(jù)已知波特率和時(shí)鐘頻率fosc來(lái)計(jì)算T1的初值X。為避免繁雜的初值計(jì)算,常用的波特率和初值X間的關(guān)系常列成表7-2的形式,以供查用。5354

表7-2 用定時(shí)器T1產(chǎn)生的常用波特率5455對(duì)表7-2有兩點(diǎn)需要注意:(1)在使用的時(shí)鐘振蕩頻率fosc為12MHz或6MHz時(shí),將初值X和fosc帶入式(7-3)中計(jì)算出的波特率有一定誤差。消除誤差可采用時(shí)鐘頻率11.0592MHz。(2)如果選用很低的波特率,如波特率選為55,可將定時(shí)器T1設(shè)置為方式1定時(shí)。但在這種情況下,T1溢出時(shí),需在中斷服務(wù)程序中重新裝入初值。中斷響應(yīng)時(shí)間和執(zhí)行指令時(shí)間會(huì)使波特率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。5556【例7-3】

若時(shí)鐘頻率為11.0592MHz,選用T1的方式2定時(shí)作為波特率發(fā)生器,波特率為2

400bit/s,求初值。設(shè)T1為方式2定時(shí),選SMOD

=

0。將已知條件帶入式(7-3)中

從中解得X

=

244

=

F4H。只要把F4H裝入TH1和TL1,則T1產(chǎn)生的波特率為2400bit/s。該結(jié)果也可直接從表7-2中查到。這里時(shí)鐘振蕩頻率選為11.0592MHz,就可使初值為整數(shù),從而產(chǎn)生精確的波特率。56577.5串行口的應(yīng)用利用AT89S51單片機(jī)的串行口可以實(shí)現(xiàn)AT89S51單片機(jī)之間的點(diǎn)對(duì)點(diǎn)串行通信、多機(jī)通信以及AT89S51單片機(jī)與PC機(jī)間的單機(jī)或多機(jī)通信。限于篇幅,本節(jié)僅介紹AT89S51單片機(jī)之間的雙機(jī)串行通信的硬件接口和軟件設(shè)計(jì)。7.5.1串行通信接口標(biāo)準(zhǔn)AT89S51串行口的輸入、輸出均為T(mén)TL電平。抗干擾性差,傳輸距離短,傳輸速率低。為提高串行通信的可靠性,增大串行通信的距離和提高傳輸速率,都采用標(biāo)準(zhǔn)串行接口,如RS-232、RS-422A、RS-485等。根據(jù)通信距離和抗干擾性要求,可選擇TTL電平傳輸、RS-232C、RS-422A、RS-485串口進(jìn)行串行數(shù)據(jù)傳輸。57581.TTL電平通信接口如果兩個(gè)單片機(jī)相距在1.5m之內(nèi),它們的串行口可直接相連,接口如圖7-9所示。甲機(jī)RXD與乙機(jī)TXD端相連,乙機(jī)RXD與甲機(jī)TXD端相連。2.RS-232C雙機(jī)通信接口RS-232C標(biāo)準(zhǔn)規(guī)定電纜長(zhǎng)度限定在≤15m,如果雙機(jī)通信距離在1.5m~15m之間時(shí),可利用RS-232C標(biāo)準(zhǔn)接口實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的雙機(jī)通信,接口電路如圖7-17所示。RS-232C的最高數(shù)傳速率為20kbit/s。足以覆蓋個(gè)人計(jì)算機(jī)使用的50~9600bit/s范圍。傳送的數(shù)字量采用負(fù)邏輯,且與地對(duì)稱(chēng)。其中:邏輯“1”:-3~-15V;邏輯“0”:+3~+15V。

5859圖7-17RS-232C雙機(jī)通信接口電路60由于單片機(jī)的引腳為T(mén)TL電平,與RS-232C標(biāo)準(zhǔn)的電平互不兼容,所以單片機(jī)使用RS-232C標(biāo)準(zhǔn)串行通信時(shí),必須進(jìn)行TTL電平與RS-232C標(biāo)準(zhǔn)電平之間的轉(zhuǎn)換。電平轉(zhuǎn)換常采用美國(guó)MAXIM(美信)公司的MAX232A,它是串行全雙工發(fā)送器/接收器接口電路芯片,可實(shí)現(xiàn)TTL電平到RS-232C電平、RS-232C電平到TTL電平的轉(zhuǎn)換。MAX232A的引腳見(jiàn)圖7-18,內(nèi)部結(jié)構(gòu)及外部元件如圖7-19所示。芯片內(nèi)部有自升壓的電平倍增電路,可將+5V轉(zhuǎn)換成-10V~+10V,滿足了RS-232C標(biāo)準(zhǔn)對(duì)邏輯“1”和邏輯“0”的電平要求。工作時(shí)僅需單一的+5V電源。其片內(nèi)有2個(gè)發(fā)送器,2個(gè)接收器,有TTL信號(hào)輸入/RS-232C輸出的功能,以及RS-232C輸入/TTL輸出的功能。

61圖7-18MAX232A的引腳62圖7-19MAX232的內(nèi)部結(jié)構(gòu)及外部元件633.RS-422A雙機(jī)通信接口RS-232C有明顯缺點(diǎn):傳輸速率低、通信距離短、接口處信號(hào)容易產(chǎn)生串?dāng)_等。國(guó)際上又推出了RS-422A標(biāo)準(zhǔn)。與RS-232C的主要區(qū)別是,收發(fā)雙方的信號(hào)地不再共地,RS-422A采用了平衡驅(qū)動(dòng)和差分接收的方法。用于數(shù)據(jù)傳輸?shù)氖莾蓷l平衡導(dǎo)線,這相當(dāng)于兩個(gè)單端驅(qū)動(dòng)器。兩條線上傳輸?shù)男盘?hào)電平,當(dāng)一個(gè)表示邏輯“1”時(shí),另一條一定為邏輯“0”。若傳輸中,信號(hào)中混入干擾和噪聲(共模形式),由于差分接收器的作用,就能識(shí)別有用信號(hào)并正確接收傳輸?shù)男畔?,并使干擾和噪聲相互抵消。643.RS-422A雙機(jī)通信接口RS-232C有明顯缺點(diǎn):傳輸速率低、通信距離短、接口處信號(hào)容易產(chǎn)生串?dāng)_等。國(guó)際上又推出了RS-422A標(biāo)準(zhǔn)。與RS-232C的主要區(qū)別是,收發(fā)雙方的信號(hào)地不再共地,RS-422A采用了平衡驅(qū)動(dòng)和差分接收的方法。用于數(shù)據(jù)傳輸?shù)氖莾蓷l平衡導(dǎo)線,這相當(dāng)于兩個(gè)單端驅(qū)動(dòng)器。兩條線上傳輸?shù)男盘?hào)電平,當(dāng)一個(gè)表示邏輯“1”時(shí),另一條一定為邏輯“0”。若傳輸中,信號(hào)中混入干擾和噪聲(共模形式),由于差分接收器的作用,就能識(shí)別有用信號(hào)并正確接收傳輸?shù)男畔?,并使干擾和噪聲相互抵消。6465RS-422A能在長(zhǎng)距離、高速率下傳輸數(shù)據(jù)。它的最大傳輸率為10Mbit/s,電纜允許長(zhǎng)度為12m,如果采用較低傳輸速率時(shí),最大傳輸距離可達(dá)1219m。為了增加通信距離,可采用光電隔離,利用RS-422A標(biāo)準(zhǔn)進(jìn)行雙機(jī)通信的接口電路如圖7-20所示。圖中,每個(gè)通道的接收端都接有3個(gè)電阻R1、R2和R3,其中R1為傳輸線的匹配電阻,取值范圍在50Ω~1kΩ,其他兩個(gè)電阻是為了解決第一個(gè)數(shù)據(jù)的誤碼而設(shè)置的匹配電阻。為了起到隔離、抗干擾的作用,圖7-20中必須使用兩組獨(dú)立的電源。圖中的SN75174、SN75175是TTL電平到RS-422A電平與RS-422A電平到TTL電平的電平轉(zhuǎn)換芯片。656666圖7-20RS-422A雙機(jī)通信接口電路674.RS-485雙機(jī)通信接口RS-422A雙機(jī)通信需四芯傳輸線,這對(duì)長(zhǎng)距離通信很不經(jīng)濟(jì),故在工業(yè)現(xiàn)場(chǎng),通常采用雙絞線傳輸?shù)腞S-485串行通信接口,很容易實(shí)現(xiàn)多機(jī)通信。RS-485是RS-422A的變型,它與RS-422A的區(qū)別:RS-422A為全雙工,采用兩對(duì)平衡差分信號(hào)線;RS-485為半雙工,采用一對(duì)平衡差分信號(hào)線。RS-485對(duì)于多站互連是十分方便的,很容易實(shí)現(xiàn)多機(jī)通信。RS-485允許最多并聯(lián)32臺(tái)驅(qū)動(dòng)器和32臺(tái)接收器。圖7-21為RS-485通信接口電路。與RS-422A一樣,最大傳輸距離約為1219m,最大傳輸速率為10Mbit/s。676868圖7-21RS-485雙機(jī)通信接口電路69通信線路要采用平衡雙絞線。平衡雙絞線的長(zhǎng)度與傳輸速率成反比,在100kbit/s速率以下,才可能使用規(guī)定的最長(zhǎng)電纜。只有在很短的距離下才能獲得最大傳輸速率。一般100m長(zhǎng)雙絞線最大傳輸速率僅為1Mbit/s。圖7-21中,RS-485以雙向、半雙工的方式來(lái)實(shí)現(xiàn)雙機(jī)通信。在AT89S51單片機(jī)系統(tǒng)發(fā)送或接收數(shù)據(jù)前,應(yīng)先將SN75176的發(fā)送門(mén)或接收門(mén)打開(kāi),當(dāng)P1.0=1時(shí),發(fā)送門(mén)打開(kāi),接收門(mén)關(guān)閉;當(dāng)P1.0=0時(shí),接收門(mén)打開(kāi),發(fā)送門(mén)關(guān)閉。70圖7-21中的SN75176芯片內(nèi)集成了一個(gè)差分驅(qū)動(dòng)器和一個(gè)差分接收器,且兼有TTL電平到RS-485電平、RS-485電平到TTL電平的轉(zhuǎn)換功能。此外常用的RS-485接口芯片還有MAX485。7.5.2串行通信設(shè)計(jì)需要考慮的問(wèn)題單片機(jī)的串行通信接口設(shè)計(jì)時(shí),需考慮如下問(wèn)題。(1)首先確定通信雙方的數(shù)據(jù)傳輸速率。(2)由數(shù)據(jù)傳輸速率確定采用的串行通信接口標(biāo)準(zhǔn)。(3)在通信接口標(biāo)準(zhǔn)允許的范圍內(nèi)確定通信的波特率。為減小波特率的誤差,通常選用11.0592MHz的晶振頻率。7071(4)根據(jù)任務(wù)需要,確定收發(fā)雙方使用的通信協(xié)議。(5)通信線的選擇,這是要考慮的一個(gè)很重要的因素。通信線一般選用雙絞線較好,并根據(jù)傳輸?shù)木嚯x選擇纖芯的直徑。如果空間的干擾較多,還要選擇帶有屏蔽層的雙絞線。(6)通信協(xié)議確定后,進(jìn)行通信軟件編程,請(qǐng)見(jiàn)下面介紹。7.5.3雙機(jī)串行通信軟件編程串行口的方式1~3是用于串行通信的,下面介紹雙機(jī)串行通信軟件編程。應(yīng)當(dāng)說(shuō)明的是,下面介紹的雙機(jī)串行通信的編程實(shí)際上與上面介紹的各種串行標(biāo)準(zhǔn)的硬件接口電路無(wú)關(guān),因?yàn)椴捎貌煌臉?biāo)準(zhǔn)串行通信接口僅僅是由雙機(jī)串行通信距離、傳輸速率以及抗干擾性能來(lái)決定的。71721.串行口方式1應(yīng)用編程【例7-

4】

本例采用方式1進(jìn)行雙機(jī)串行通信,收、發(fā)雙方均采用11.0592MHz晶振,波特率為2

400bit/s,一幀信息為10位,第0位為起始位,第1~8位為數(shù)據(jù)位,最后1位為停止位。發(fā)送方(甲機(jī))把以78H、77H單元的內(nèi)容為首地址,以76H、75H單元內(nèi)容減1為末地址的數(shù)據(jù)塊通過(guò)串行口發(fā)送給接收方(乙機(jī))。下面介紹收發(fā)雙方串行發(fā)送、接收程序的設(shè)計(jì)。73(1)甲機(jī)發(fā)送程序甲機(jī)要發(fā)送的數(shù)據(jù)塊的地址為片外RAM的2000H~201FH。發(fā)送時(shí)先發(fā)數(shù)據(jù)塊的首末地址,然后再發(fā)送數(shù)據(jù)塊。甲機(jī)先采用查詢(xún)方式發(fā)4個(gè)字節(jié)的首末地址,然后再采用中斷方式發(fā)送數(shù)據(jù)塊,并采用比較末地址的方法,判斷數(shù)據(jù)塊是否發(fā)送結(jié)束。程序中用到了一個(gè)數(shù)據(jù)塊發(fā)送完畢標(biāo)志位F0,數(shù)據(jù)塊如發(fā)送完畢,則標(biāo)志位F0=1。中斷方式的發(fā)送程序如下:74747575767677(2)乙機(jī)接收程序乙機(jī)采用中斷方式接收,先接收甲機(jī)發(fā)送的4個(gè)字節(jié)的首末地址,然后存于片內(nèi)RAM的78H~75H單元中。接著再接收甲機(jī)發(fā)送的數(shù)據(jù)塊,乙機(jī)把接收到的數(shù)據(jù)塊存于片外RAM的2000H~201FH單元中。程序中使用了兩個(gè)標(biāo)志位F0和7FH:①標(biāo)志位F0=0,表示接收地址,F(xiàn)0=1接收數(shù)據(jù);②標(biāo)志位7FH=0,表示數(shù)據(jù)未接收完;7FH=1表示數(shù)據(jù)接收完畢。乙機(jī)接收程序如下:7778787979808081 INC 77H ;地址加1 MOV A,77H ;判當(dāng)前接收數(shù)據(jù)的地址是否向高8位進(jìn)位 JNZ END2 ;

INC 78HEND2: MOV A,76H CJNE A,78H,RETN;判是否最后一幀,不是則繼續(xù) MOV A,75H CJNE A,77H,RETN;是最后一幀則各種標(biāo)志位清0 CLR ES CLR EA SETB 7FH SJMP RETN ;跳入返回子程序區(qū) END

81822.串行口方式2應(yīng)用編程方式2和方式1有兩點(diǎn)不同之處。接收/發(fā)送11位信息,多出第9位程控位,該位可由用戶置TB8決定,這是一個(gè)不同點(diǎn)。另一不同點(diǎn)是方式2波特率變化范圍比方式1小, 方式2的波特率

=

振蕩器頻率/n。當(dāng)SMOD=0時(shí),n=64。當(dāng)SMOD=1時(shí),n=32。鑒于方式2的使用和方式3基本一樣(只是波特率不同),所以方式2的應(yīng)用,可參照下面的方式3編程。82833.串行口方式3應(yīng)用編程【例7-5】本例為AT89S51單片機(jī)用串行通信方式3進(jìn)行發(fā)送和接收的應(yīng)用實(shí)例。發(fā)送方(甲機(jī))采用查詢(xún)方式發(fā)送地址幀,采用中斷或查詢(xún)方式發(fā)送數(shù)據(jù),接收方(乙機(jī))采用中斷或查詢(xún)方式接收數(shù)據(jù)。發(fā)送和接收雙方均采用11.0592MHz的晶振,波特率為4800bit/s。甲機(jī)首先將存放在78H和77H單元中的地址發(fā)送給乙機(jī),然后發(fā)送256個(gè)數(shù)據(jù):00H~FFH。(1)甲機(jī)發(fā)送程序中斷方式的發(fā)送程序如下:

838484858586(2)乙機(jī)接收程序乙機(jī)把最先接收到的兩個(gè)字節(jié)數(shù)據(jù)(實(shí)質(zhì)是存放數(shù)據(jù)的首地址)送給數(shù)據(jù)指針DPTR,作為數(shù)據(jù)存放的首地址,然后將后續(xù)接收到的數(shù)據(jù)存放到以先前接收的數(shù)據(jù)為首地址的單元中去。乙機(jī)采用中斷方式的接收程序如下:868787888889

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論