第8章 串行口及應(yīng)用_第1頁
第8章 串行口及應(yīng)用_第2頁
第8章 串行口及應(yīng)用_第3頁
第8章 串行口及應(yīng)用_第4頁
第8章 串行口及應(yīng)用_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2024/12/91第8章串行口及應(yīng)用(yìngyòng)

共七十七頁2024/12/92內(nèi)容(nèiróng)串行通信(tōngxìn)基礎(chǔ)知識(shí)8.180C51單片機(jī)的串行口8.2串行口的應(yīng)用8.3共七十七頁2024/12/938.1串行通信(tōngxìn)基礎(chǔ)知識(shí)8.1.1計(jì)算機(jī)對(duì)外通信(tōngxìn)方式計(jì)算機(jī)與計(jì)算機(jī)之間、計(jì)算機(jī)與外設(shè)之間的數(shù)據(jù)交換稱為通信。計(jì)算機(jī)通信有兩種基本方式:并行通信和串行通信。

數(shù)據(jù)的各位被同時(shí)傳送的通信方法稱為并行通信。

圖8-1并行通信收發(fā)設(shè)備連接示意圖圖8-2并行通信傳送時(shí)序圖并行通信的特點(diǎn)是控制簡單,傳輸速度快。由于傳輸線較多,長距離傳送時(shí)成本高且接收方的各位同時(shí)接收存在困難。。

共七十七頁2024/12/94串行通信(tōngxìn)是將數(shù)據(jù)字節(jié)分成一位一位的形式在一條傳輸線上逐個(gè)地傳送。串行通信具有傳輸線少,長距離傳送時(shí)成本低,抗干擾能力強(qiáng)等優(yōu)點(diǎn),對(duì)于單片機(jī)來說,其所占用的引腳資源少。但串行通信數(shù)據(jù)(shùjù)的傳送控制比并行通信復(fù)雜。共七十七頁2024/12/958.1.2串行通信(tōngxìn)的基本概念1.串行通信(tōngxìn)的方式(1)異步通信異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過程。為使雙方的收發(fā)協(xié)調(diào),要求發(fā)送和接收設(shè)備的時(shí)鐘盡可能一致。共七十七頁2024/12/96異步通信(tōngxìn)是以字符(構(gòu)成的幀)為單位進(jìn)行傳輸,字符與字符之間的間隙(時(shí)間間隔)是任意的,但每個(gè)字符中的各位是以固定的時(shí)間傳送的。

為了實(shí)現(xiàn)異步傳輸字符的同步,采用的辦法是使傳送的每一個(gè)字符都以起始位“0”開始(kāishǐ),以停止位“1”結(jié)束。這樣,傳送的每一個(gè)字符都用起始位來進(jìn)行收發(fā)雙方的同步。停止位和間隙作為時(shí)鐘頻率偏差的緩沖,即使雙方時(shí)鐘頻率略有偏差,總的數(shù)據(jù)流也不會(huì)因偏差的積累而導(dǎo)致數(shù)據(jù)錯(cuò)位。共七十七頁2024/12/97

異步通信的每幀數(shù)據(jù)由4部分組成:起始位(占1位)、字符代碼(dàimǎ)數(shù)據(jù)位(占5~8位)、奇偶校驗(yàn)位(占1位,也可以沒有校驗(yàn)位)和停止位(占1或2位)。圖8-6中給出的是7位數(shù)據(jù)位、1位奇偶校驗(yàn)位和一位停止位,加上固定的1位起始位,共10位組成一個(gè)傳輸幀。傳送時(shí)數(shù)據(jù)的低位在前,高位在后。字符之間允許有不定長度的空閑位。起始位“0”作為聯(lián)絡(luò)信號(hào),它告訴接收方傳送的開始,接下來的是數(shù)據(jù)位和奇偶校驗(yàn)位、停止位、“1”表示一個(gè)字符的結(jié)束。異步通信的特點(diǎn)是不要求收發(fā)(shōufā)雙方時(shí)鐘的嚴(yán)格一致,實(shí)現(xiàn)容易,設(shè)備開銷較小,但每個(gè)字符要附加起止位、停止位,各幀之間還有間隔,因此傳輸效率不高。共七十七頁2024/12/98(2)同步(tóngbù)通信同步通信時(shí)要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,使雙方(shuāngfāng)達(dá)到完全同步。此時(shí),傳輸數(shù)據(jù)的位之間的距離均為“位間隔”的整數(shù)倍,同時(shí)傳送的字符間不留間隙,即保持位同步關(guān)系,也保持字符同步關(guān)系。共七十七頁2024/12/992.串行通信的傳輸(chuánshū)方向串行通信根據(jù)數(shù)據(jù)傳輸?shù)姆较蚣皶r(shí)間關(guān)系(guānxì)可分為單工、半雙工和全雙工。傳輸方向示意圖如圖8-10所示。(1)單工:是指數(shù)據(jù)傳輸僅能沿一個(gè)方向,不能實(shí)現(xiàn)反向傳輸。(2)半雙工:是指數(shù)據(jù)傳輸可以沿兩個(gè)方向,但需要分時(shí)進(jìn)行。(3)全雙工:是指數(shù)據(jù)可以同時(shí)進(jìn)行雙向傳輸。共七十七頁2024/12/9103.串行通信(tōngxìn)的錯(cuò)誤校驗(yàn)在通信過程中往往(wǎngwǎng)要對(duì)數(shù)據(jù)傳送的正確與否進(jìn)行校驗(yàn)。校驗(yàn)是保證準(zhǔn)確無誤傳輸數(shù)據(jù)的關(guān)鍵。常用的校驗(yàn)方法有奇偶校驗(yàn)、代碼和校驗(yàn)及循環(huán)冗余碼校驗(yàn)。(1)奇偶校驗(yàn)在發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)位尾隨的1位為奇偶校驗(yàn)位(1或0)。當(dāng)約定為奇校驗(yàn)時(shí),數(shù)據(jù)位與校驗(yàn)位中“1”的個(gè)數(shù)之和應(yīng)為奇數(shù);當(dāng)約定為偶校驗(yàn)時(shí),數(shù)據(jù)位與校驗(yàn)位中“1”的個(gè)數(shù)之和應(yīng)為偶數(shù)。接收方與發(fā)送方的校驗(yàn)方式應(yīng)一致。接收字符時(shí),對(duì)“1”的個(gè)數(shù)進(jìn)行校驗(yàn),若發(fā)現(xiàn)收、發(fā)雙方不一致,則說明數(shù)據(jù)傳輸過程中出現(xiàn)了差錯(cuò)。(2)代碼和校驗(yàn)代碼和校驗(yàn)是發(fā)送方將所發(fā)數(shù)據(jù)塊求和(或各字節(jié)異或),產(chǎn)生一個(gè)字節(jié)的校驗(yàn)字符(校驗(yàn)和)附加到數(shù)據(jù)塊末尾。接收方接收數(shù)據(jù)同時(shí)對(duì)數(shù)據(jù)塊(除校驗(yàn)字節(jié)外)求和(或各字節(jié)異或),將所得的結(jié)果與發(fā)送方的“校驗(yàn)和”進(jìn)行比較,相符則無差錯(cuò),否則即認(rèn)為傳送過程中出現(xiàn)了差錯(cuò)。(3)循環(huán)冗余校驗(yàn)這種校驗(yàn)是通過某種數(shù)學(xué)運(yùn)算實(shí)現(xiàn)有效信息與校驗(yàn)位之間的循環(huán)校驗(yàn),常用于對(duì)磁盤信息的傳輸、存儲(chǔ)區(qū)的完整性校驗(yàn)等。這種校驗(yàn)方法糾錯(cuò)能力強(qiáng),廣泛應(yīng)用于同步通信中。共七十七頁2024/12/9114.信號(hào)(xìnhào)的調(diào)制與解調(diào)計(jì)算機(jī)的通信要求傳送的是數(shù)字信號(hào)。在遠(yuǎn)程數(shù)據(jù)通信時(shí),通常要借用公用電話網(wǎng)。但是電話網(wǎng)是為300~3400Hz的音頻模擬信號(hào)設(shè)計(jì)的,對(duì)二進(jìn)制數(shù)據(jù)的傳輸是不合適的。為此,在發(fā)送時(shí)需要(xūyào)對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行調(diào)制,使之適合在電話網(wǎng)上傳輸。在接收時(shí),需要(xūyào)進(jìn)行解調(diào),以將模擬信號(hào)還原成數(shù)字信號(hào)。共七十七頁2024/12/912利用調(diào)制器(Modulator)

把數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),然后送到通信線路上去,再由解調(diào)器(Demodulator)

把從通信線路上收到的模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)。由于通信是雙向的,調(diào)制器和解調(diào)器合并在一個(gè)(yīɡè)裝置中,這就是調(diào)制解調(diào)器MODEM。如圖8-11所示。圖中,調(diào)制器和解調(diào)器是進(jìn)行(jìnxíng)數(shù)據(jù)通信所需的設(shè)備,因此把它叫做數(shù)據(jù)通信設(shè)備(DataCommunicationsEquipment,簡稱DCE)。計(jì)算機(jī)是終端設(shè)備(DataTerminalEquipment,簡稱DTE),通信線路是電話線,也可以是專用線。共七十七頁2024/12/9135.波特率(BaudRade)在異步通信中,發(fā)送方和接收方必須保持(bǎochí)相同的波特率才能實(shí)現(xiàn)正確的數(shù)據(jù)傳送。

波特率是指單位時(shí)間內(nèi)傳送的信息量,即每秒鐘傳送的二進(jìn)制位數(shù)(也稱為比特率),單位是bps,即位/秒。波特率越高,數(shù)據(jù)傳輸速度越快,但和字符的實(shí)際傳輸速率不同。字符的傳輸速率是指每秒鐘內(nèi)所傳輸字符幀數(shù),和字符格式有關(guān)。常用的標(biāo)準(zhǔn)波特率是:110波特、300波特、600波特、1200波特、2400波特、4800波特、9600波特和19200波特等。例如,在異步通信中使用1位起始位,8位數(shù)據(jù)位,無奇偶校驗(yàn)位,1位停止位,即一幀數(shù)據(jù)長度位10bit,如果要求數(shù)據(jù)傳送的速率是1秒送120幀字符,則傳送波特率為1200波特。共七十七頁2024/12/9146.串行通信(tōngxìn)的協(xié)議通信協(xié)議是指單片機(jī)之間進(jìn)行信息傳輸時(shí)的一些約定,約定的內(nèi)容包括數(shù)據(jù)格式、同步方式、波特率、校驗(yàn)方式等。為了保證計(jì)算機(jī)之間能夠準(zhǔn)確、可靠(kěkào)地通信,相互之間必須遵循統(tǒng)一的協(xié)議,在通信之前一定要設(shè)置好。共七十七頁2024/12/9158.1.3串行通信接口標(biāo)準(zhǔn)(biāozhǔn)從本質(zhì)說,通信是CPU與外部設(shè)備間交換信息的一種方式。所有的串行通信接口電路都是以并行數(shù)據(jù)形式與CPU連接、而以串行數(shù)據(jù)形式與外部設(shè)備進(jìn)行數(shù)據(jù)傳送。它們(tāmen)的基本功能都是從外部設(shè)備接收串行數(shù)據(jù),轉(zhuǎn)換為并行數(shù)據(jù)后傳送給CPU;或從CPU接收并行數(shù)據(jù),轉(zhuǎn)換成串行數(shù)據(jù)后輸出給外部設(shè)備。能夠?qū)崿F(xiàn)異步通信的硬件電路稱為通用異步接收器/發(fā)送器

(UniversalAsynchronousReceive/Transmitter,簡稱UART)。能夠?qū)崿F(xiàn)同步通信的硬件電路稱為通用同步接收器/發(fā)送器

(UniversalSynchronousReceive/Transmitter,簡稱USRT)。共七十七頁2024/12/916所謂接口標(biāo)準(zhǔn),就是明確的定義若干條信號(hào)線,使接口電路(diànlù)標(biāo)準(zhǔn)化、通用化。采用標(biāo)準(zhǔn)接口,可以方便地把計(jì)算機(jī)、外部設(shè)備和測(cè)量儀器等有機(jī)的聯(lián)系起來,并實(shí)現(xiàn)其間的通信。在單片機(jī)控制系統(tǒng)中,常用的串行通信接口標(biāo)準(zhǔn)有:RS-232C、RS-422A、RS-485等總線接口標(biāo)準(zhǔn)。共七十七頁2024/12/9171.RS-232C總線(zǒnɡxiàn)

RS-232C標(biāo)準(zhǔn)(協(xié)議)的全稱是EIA-RS-232C標(biāo)準(zhǔn),其中EIA(ElectronicIndustryAssociation)代表美國電子工業(yè)協(xié)會(huì),RS(RecommendedStandard)代表推薦標(biāo)準(zhǔn),232是標(biāo)識(shí)號(hào),C代表RS232的最早一次修改(1969)。1969年修訂為RS-232C,1987年修訂為EIA-232D,1991年修訂為EIA-232E,1997年又修訂為EIA-232E。由于修改的不多,所以(suǒyǐ)人們習(xí)慣于早期的名字“RS-232C”。RS-232C定義了數(shù)據(jù)終端設(shè)備(DTE)與數(shù)據(jù)通信設(shè)備(DCE)之間的物理接口標(biāo)準(zhǔn)。接口標(biāo)準(zhǔn)包括機(jī)械特性、功能特性和電氣特性幾方面內(nèi)容。共七十七頁2024/12/918(1)機(jī)械(jīxiè)特性

RS-232C接口規(guī)定使用25針連接器,連接器的尺寸及每個(gè)插針的排列位置都有明確的定義。一般的應(yīng)用中并不一定用到RS-232C標(biāo)準(zhǔn)的全部信號(hào)線,所以在實(shí)際(shíjì)應(yīng)用中常常使用9針連接器替代25針連接器。計(jì)算機(jī)的COM1和COM2使用的是9針連接器。連接器引腳定義如圖8-12所示。圖中所示為陽頭定義,通常用于計(jì)算機(jī)側(cè),對(duì)應(yīng)的陰頭用于連接線側(cè)。圖8-12DB-25(陽頭)和DB-9(陽頭)連接器定義共七十七頁2024/12/919(2)功能(gōngnéng)特性

RS-232C接口(jiēkǒu)的主要信號(hào)線的功能定義如表8-1所示。表8-1RS-232C接口的主要信號(hào)線的功能定義共七十七頁2024/12/920(3)電氣(diànqì)特性

RS-232C采用負(fù)邏輯電平(diànpínɡ),規(guī)定邏輯1為DC-3V~-15V,邏輯0為DC+3V~+15V。-3V~+3V為過渡區(qū),不作定義。注意:RS-232C的邏輯電平與通常的TTL和MOS電平不兼容。為了實(shí)現(xiàn)與TTL或MOS電路的連接,要外加電平轉(zhuǎn)換電路。RS-232C發(fā)送方和接收方之間的信號(hào)線采用多芯信號(hào)線,要求多芯信號(hào)線的總負(fù)載電容不能超過2500pF。

通常,RS-232C的傳輸距離為幾十米,傳輸速率小于20Kbps。共七十七頁2024/12/921(4)過程(guòchéng)特性

過程特性規(guī)定了信號(hào)之間的時(shí)序關(guān)系,以便正確地接收和發(fā)送數(shù)據(jù)。如果通信雙方均具備RS-232C接口,則二者可以直接連接(liánjiē),不必考慮電平轉(zhuǎn)換問題。但是對(duì)于單片機(jī)與計(jì)算機(jī)通過RS-232C的連接,必須考慮電平轉(zhuǎn)換問題,因?yàn)?0C51系列單片機(jī)串行口不是標(biāo)準(zhǔn)RS-232C接口。共七十七頁2024/12/922共七十七頁2024/12/923(5)RS-232C電平與TTL電平轉(zhuǎn)換驅(qū)動(dòng)(qūdònɡ)電路

80C51單片機(jī)串行口與PC機(jī)的RS-232C接口不能直接對(duì)接,必須進(jìn)行電平轉(zhuǎn)換,常見的TTL到RS-232C的電平轉(zhuǎn)換器有MC1488、MC1489和MAX232等芯片。MC1488輸入為TTL電平,輸出為RS232電平;MC1489輸入為RS-232電平,輸出為TTL電平。MC1488的供電(ɡònɡdiàn)電壓為±12V,MC1489的供電電壓為+5V。MC1488和MC1489的邏輯功能如圖8-15所示。共七十七頁2024/12/924MC1488和MC1489與RS-232電平(diànpínɡ)轉(zhuǎn)換如圖8-16所示。共七十七頁2024/12/925近來(jìnlái)一些系統(tǒng)中,愈來愈多地采用了自升壓電平轉(zhuǎn)換電路。各廠商生產(chǎn)的此類芯片雖然不同,但原理類似,并可代換。其主要功能是在單+5V電源下,有TTL信號(hào)輸入到RS-232C輸出的功能,也有RS-232C輸入到TTL輸出的功能。如RS-232C雙工發(fā)送器/接收器接口電路MAX232,它能滿足RS-232C的電氣規(guī)范,且僅需要+5V電源,內(nèi)置電子泵電壓轉(zhuǎn)換器將+5V轉(zhuǎn)換成-10V~+10V。該芯片與TTL/CMOS電平兼容,片內(nèi)有2個(gè)發(fā)送器,2個(gè)接收器,使用比較方便。MAX232芯片封裝如圖8-17所示,采用MAX232芯片實(shí)現(xiàn)TTL電平和RS232電平轉(zhuǎn)換的電路如圖8-18所示。共七十七頁2024/12/926(6)采用RS-232C接口存在(cúnzài)的問題

1)接口的信號(hào)電平值較高,易損壞(sǔnhuài)接口電路的芯片,又因?yàn)榕cTTL電平不兼容,故需使用電平轉(zhuǎn)換電路方能與TTL電路連接;2)傳輸速率較低,在異步傳輸時(shí),波特率為20kbps;3)接口使用一根信號(hào)線和一根信號(hào)返回線而構(gòu)成共地的傳輸形式,這種共地傳輸容易產(chǎn)生共模干擾,所以抗噪聲干擾性弱,為了提高信噪比,RS-232C總線標(biāo)準(zhǔn)不得不采用比較大的電壓擺幅。4)傳輸距離有限,最大傳輸距離標(biāo)準(zhǔn)值為15m,實(shí)際上也只能在50m左右。共七十七頁2024/12/9272.RS-422A接口(jiēkǒu)串行通信標(biāo)準(zhǔn)RS-422A是平衡型電壓數(shù)字(shùzì)接口電路的電氣標(biāo)準(zhǔn)。圖8-19RS-422A平衡驅(qū)動(dòng)差分接收電路RS-422A電路由發(fā)送器、平衡連接電纜、電纜終端負(fù)載、接收器等部分組成。電路中規(guī)定只許有一個(gè)發(fā)送器,可有多個(gè)接收器。RS-422A與RS-232C的主要區(qū)別是,收發(fā)雙方的信號(hào)地不再共用。另外,每個(gè)方向用于傳輸數(shù)據(jù)的是兩條平衡導(dǎo)線。所謂“平衡”,是指輸出驅(qū)動(dòng)器為雙端平衡驅(qū)動(dòng)器。如果其中一條線為邏輯“1”狀態(tài),另一條線就為邏輯“0”,比采用單端不平衡驅(qū)動(dòng)對(duì)電壓的放大倍數(shù)大一倍。驅(qū)動(dòng)器輸出允許范圍是±2~±6V。共七十七頁2024/12/928差分電路能從地線干擾中拾取有效信號(hào),差分接收器可以分辨200mV以上的電位差。若傳輸過程(guòchéng)中混入了干擾和噪聲,由于差分放大器的作用,可使干擾和噪聲相互抵消。因此可以避免或大大減弱地線干擾和電磁干擾的影響。RS-422A與RS-232C相比,信號(hào)傳輸距離遠(yuǎn),速度快。傳輸距離為120m時(shí),傳輸速率可達(dá)l0Mbps。降低傳輸速率(90Kbps)時(shí),傳輸距離可達(dá)1200m。

RS-422A與TTL電平轉(zhuǎn)換常用的芯片為傳輸線驅(qū)動(dòng)器SN75174或MC3487和傳輸線接收器SN75175或MC3486。共七十七頁2024/12/9293.RS-485接口(jiēkǒu)RS-485是RS-422A的變型(biànxínɡ):RS-422A用于全雙工,而RS-485用于半雙工。RS-485接口示意圖如圖8-20所示。RS-485是一種多發(fā)送器標(biāo)準(zhǔn),在通信線路上最多可以使用32對(duì)差分驅(qū)動(dòng)器接收器。如果在一個(gè)網(wǎng)絡(luò)中連接的設(shè)備超過32個(gè),還可以使用中間繼電器。RS-485的信號(hào)傳輸采用兩線間的電壓來表示邏輯1和邏輯0。由于發(fā)送方需要兩根傳輸線,接收方也需要兩根傳輸線。傳輸線采用差動(dòng)信道,所以它的干擾抑制性極好。又因?yàn)樗淖杩沟?,無接地問題,所以傳輸距離可達(dá)1200m,傳輸速率可達(dá)1Mbps。圖8-20RS-485接口示意圖共七十七頁2024/12/930

RS-485是一點(diǎn)對(duì)多點(diǎn)的通信接口,一般采用雙絞線的結(jié)構(gòu)。普通的PC機(jī)一般不帶RS485接口,因此要使用RS-232C/RS-485轉(zhuǎn)換器。對(duì)于單片機(jī)可以通過芯片MAX485來完成TTL/RS-485的電平轉(zhuǎn)換。在計(jì)算機(jī)和單片機(jī)組成的RS-485通信系統(tǒng)中,下位機(jī)由單片機(jī)系統(tǒng)組成,主要完成工業(yè)現(xiàn)場(chǎng)信號(hào)的采集和控制。上位機(jī)為普通的PC機(jī),負(fù)責(zé)監(jiān)視下位機(jī)的運(yùn)行狀態(tài),并對(duì)其狀態(tài)信息進(jìn)行集中處理,以圖文方式顯示下位機(jī)的工作(gōngzuò)狀態(tài)以及工業(yè)現(xiàn)場(chǎng)被控設(shè)備的工作(gōngzuò)狀況。系統(tǒng)中各節(jié)點(diǎn)(包括上位機(jī))的識(shí)別是通過設(shè)置不同的站地址來實(shí)現(xiàn)的,廣泛使用于集散控制系統(tǒng)中。共七十七頁2024/12/931

RS-485采用一對(duì)雙絞線,輸入/輸出信號(hào)不能同時(shí)進(jìn)行(半雙工),MAX485芯片的發(fā)送和接收功能轉(zhuǎn)換是由芯片的和DE端控制(kòngzhì)的。

RE=0時(shí),允許接收;RE=1時(shí),接收端R高阻。DE=1時(shí),允許發(fā)送;DE=0時(shí),發(fā)送端A和B高阻。在單片機(jī)系統(tǒng)中常把和DE接在一起用單片機(jī)的一個(gè)I/O線控制收發(fā)。圖8-22中當(dāng)P1.0=1時(shí)經(jīng)反相器為0,MAX485處于接收狀態(tài),當(dāng)P1.0=0時(shí)經(jīng)反相器為1,MAX485處于發(fā)送狀態(tài)。由于單片機(jī)各端口復(fù)位后處于高電平狀態(tài),圖8-22中P1.0=1經(jīng)反相器保證了上電時(shí)MAX485處于接收狀態(tài)。RS-232C串口對(duì)單片機(jī)串口接收和發(fā)送是透明的,無須控制。RS-485串口需由單片機(jī)控制收發(fā)。圖8-22中發(fā)送數(shù)據(jù)時(shí)P1.0=0,接收數(shù)據(jù)時(shí)P1.0=1。共七十七頁2024/12/932

MCS-51單片機(jī)內(nèi)部有1個(gè)功能很強(qiáng)的全雙工串行口,可同時(shí)發(fā)送(fāsònɡ)和接收數(shù)據(jù)。它有4種工作方式,可供不同場(chǎng)合使用。波特率由軟件設(shè)置,通過片內(nèi)的定時(shí)/計(jì)數(shù)器產(chǎn)生。接收、發(fā)送均可工作在查詢方式或中斷方式,使用十分靈活。8.280C51單片機(jī)的串行口共七十七頁2024/12/9338.2.1串行口的結(jié)構(gòu)(jiégòu)串行口內(nèi)部結(jié)構(gòu)如上圖,兩個(gè)物理上獨(dú)立的接收和發(fā)送(fāsònɡ)緩沖器,可同時(shí)收、發(fā)數(shù)據(jù)。兩個(gè)緩沖器共用一個(gè)特殊功能寄存器字節(jié)地址:SBUF(99H)。

控制寄存器共兩個(gè):特殊功能寄存器SCON和PCON。共七十七頁2024/12/934SBUF是兩個(gè)在物理上獨(dú)立的接收、發(fā)送緩沖器,可同時(shí)發(fā)送、接收數(shù)據(jù)。兩個(gè)緩沖器只用一個(gè)字節(jié)地址(dìzhǐ)99H,可通過指令對(duì)SBUF的讀寫來區(qū)別是對(duì)接收緩沖器的操作還是對(duì)發(fā)送緩沖器的操作。CPU寫SBUF,就是修改發(fā)送緩沖器;讀SBUF,就是讀接收緩沖器。串行口對(duì)外也有兩條獨(dú)立的收發(fā)信號(hào)線RXD(P3.0)和TXD(P3.1),因此可以同時(shí)發(fā)送、接收數(shù)據(jù),實(shí)現(xiàn)全雙工傳送。串行口數(shù)據(jù)(shùjù)緩沖器SBUF共七十七頁2024/12/935串行口控制(kòngzhì)寄存器SCONSCON寄存器用來控制串行口的工作方式與狀態(tài),它可以位尋址。在復(fù)位(fùwèi)時(shí)所有位被清0,字節(jié)地址為98H。SCON的格式為:共七十七頁2024/12/936SM0、SM1——串行口4種工作方式的選擇(xuǎnzé)位

SM0SM1方式 功能說明

000

移位寄存器方式(用于擴(kuò)展并行I/O口)

0118位異步收發(fā),波特率可變(由定時(shí)器控制)

1029位異步收發(fā),波特率為fosc/64或fosc/321139位異步收發(fā),波特率可變(由定時(shí)器控制)共七十七頁2024/12/937SM2——多機(jī)通信控制(kòngzhì)位

用于方式2或方式3中。當(dāng)串行口以方式2或方式3接收時(shí),如果SM2=1,只有當(dāng)接收到的第9位數(shù)據(jù)(RB8)為“1”時(shí),才將接收到的前8位數(shù)據(jù)送入SBUF,并置“1”RI,產(chǎn)生中斷請(qǐng)求;當(dāng)接收到的第9位數(shù)據(jù)(RB8)為“0”時(shí),則將接收到的前8位數(shù)據(jù)丟棄。如果SM2=0,則不論第9位數(shù)據(jù)是“1”還是“0”,都將前8位數(shù)據(jù)送入SBUF中,并置“1”RI,產(chǎn)生中斷請(qǐng)求。在方式1時(shí),如果SM2=1,則只有收到停止位時(shí)才會(huì)激活RI。在方式0時(shí),SM2必須為0。共七十七頁2024/12/938

REN——允許串行接收位由軟件(ruǎnjiàn)置“1”或清“0”。

REN=1

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

REN=0

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

TB8——發(fā)送的第9位數(shù)據(jù)方式2和3時(shí),TB8是要發(fā)送的第9位數(shù)據(jù),可作為奇偶校驗(yàn)位使用,也可作為地址幀或數(shù)據(jù)幀的標(biāo)志。

=1為地址幀,=0為數(shù)據(jù)幀

RB8——接收到的第9位數(shù)據(jù)方式2和3時(shí),RB8存放接收到的第9位數(shù)據(jù)。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。共七十七頁2024/12/939

TI——發(fā)送中斷標(biāo)志位

串行完一幀信息,由硬件置“1”,TI必須由軟件清“0”。

RI——接收中斷標(biāo)志位

方式(fāngshì)0時(shí),接收完第8位數(shù)據(jù)時(shí),RI由硬件置1。其它工作方式,串行接收到停止位時(shí),該位置“1”。RI=1,表示一幀數(shù)據(jù)接收完畢,并申請(qǐng)中斷,CPU從接收SBUF取走數(shù)據(jù)。該位狀態(tài)也可軟件查詢。RI必須由軟件清“0”。共七十七頁2024/12/940PCON單元(dānyuán)地址為97H,不能位尋址。其內(nèi)容如下:SMODGF1GF0PDIDL

D7D6D5D4D3D2D1D0

PCON

87H最高位SMOD為串行口波特率選擇位,當(dāng)SMOD=1時(shí),方式(fāngshì)1、2、3的波特率加倍。電源控制寄存器PCON共七十七頁2024/12/9418.2.2

串行口的工作(gōngzuò)方式80C51單片機(jī)的串行口有4種工作方式,分別(fēnbié)是方式0、方式1、方式2和方式3。這些工作方式由SCON中的SM0、SMl兩位編碼決定。共七十七頁2024/12/942

1.方式(fāngshì)0同步移位寄存器輸入/輸出方式,常用于外接移位寄存器,以擴(kuò)展并行I/O口。

8位數(shù)據(jù)為一幀,不設(shè)起始位和停止(tíngzhǐ)位,先發(fā)送或接收最低位。波特率固定為fosc/12。幀格式如下: 圖8-24方式0幀格式共七十七頁2024/12/9431.方式0發(fā)送當(dāng)CPU執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令時(shí),產(chǎn)生一個(gè)正脈沖,串行口即把SBUF中的8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳串行輸出(shūchū),低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完8位數(shù)據(jù)置“1”中斷標(biāo)志位TI。時(shí)序如圖8-25所示。圖8-25方式0發(fā)送時(shí)序共七十七頁2024/12/944串行口擴(kuò)展并行輸出口時(shí),要有“串入并出”的移位寄存器配合(如74HC164或CD4094)。74HC164芯片引腳如圖8-26(a)所示。74HC164芯片各引腳功能如下(rúxià):Q0~Q7為并行輸出引腳;DSA、DSB為串行輸入引腳;

CR為清0引腳,低電平時(shí),使74HC164輸出清0;CP為時(shí)鐘脈沖輸入引腳,在CP脈沖的上升沿作用下實(shí)現(xiàn)移位。在CP=0,CR=1時(shí)74HC164保持原來數(shù)據(jù)狀態(tài)不變。

(a)8位串入/并出移位寄存器74HC164(b)串行口與74HC164配合圖8-2674HC164及其與單片機(jī)串行口的配合共七十七頁2024/12/945例8-1單片機(jī)與74HC164的電路連接如圖8-27所示,在74HC164的并行輸出引腳接了8只發(fā)光二極管,要求(yāoqiú)利用74HC164的串入并出功能,將發(fā)光二極管依次輪流點(diǎn)亮,并不斷循環(huán)。試編程。圖8-27例8-1電路連接圖共七十七頁2024/12/946解:分析:將串行口設(shè)置為方式0(SCON=0x00),利用移位寄存器實(shí)現(xiàn)串口數(shù)據(jù)發(fā)送,數(shù)據(jù)發(fā)送通過寫SBUF寄存器完成,寫入SBUF的8位數(shù)據(jù)通過RXD逐位發(fā)送,移位脈沖通過TXD發(fā)送,這些工作全部由硬件完成,而且(érqiě)發(fā)送完畢后,硬件會(huì)自動(dòng)將TI置位,因此,在設(shè)置好工作模式后,將待發(fā)送的字節(jié)寫入SBUF,然后等待TI置位即可。在發(fā)送下一字節(jié)前,TI要用軟件清零。設(shè)待發(fā)送的字節(jié)變量初值為0x80,將其通過_crol_函數(shù)循環(huán)移位并發(fā)送時(shí),寫入SBUF的字節(jié)將會(huì)是00000001、00000010、00000100、00001000、00010000、00100000、01000000、10000000,LED將會(huì)實(shí)現(xiàn)向上滾動(dòng)的顯示效果。共七十七頁2024/12/947程序設(shè)計(jì)(chénɡxùshèjì)如下:#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharvoidDelay(uintx)//延時(shí)子程序{uchari;while(x--){for(i=0;i<110;i++);}}voidmain()//主程序{ucharc=0x80;SCON=0x00;//串口為方式0,即移位寄存器輸入/輸出方式while(1){c=_crol_(c,1);//循環(huán)(xúnhuán)左移一位SBUF=c;//串行輸出while(TI==0);//等待發(fā)送結(jié)束TI=0;//TI清零Delay(400);//延時(shí),實(shí)現(xiàn)狀態(tài)維持

}}共七十七頁2024/12/9482.方式0接收

REN=1,接收數(shù)據(jù),REN=0,禁止接收。

REN=1,允許接收。向串口的SCON寫入控制字(置為方式0,并置“1”REN位,同時(shí)RI=0)時(shí),產(chǎn)生一個(gè)正脈沖,串行口即開始接收數(shù)據(jù)。RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號(hào)輸出端,接收器也以fosc/12的固定波特率采樣RXD引腳的數(shù)據(jù)信息,當(dāng)收到8位數(shù)據(jù)時(shí)置“1”RI,一幀數(shù)據(jù)接收完,可進(jìn)行下一幀數(shù)據(jù)的接受(jiēshòu),時(shí)序如圖8-28所示。圖8-28方式0接收時(shí)序共七十七頁2024/12/949方式0下,SCON中的TB8、RB8位沒有用到,發(fā)送或接收完8位數(shù)據(jù)由硬件置“1”TI或RI,CPU響應(yīng)中斷。TI或RI須由用戶軟件清“0”,可用如下(rúxià)指令:

CLRTI ;TI位清“0” CLRRI ;RI位清“0”方式0時(shí),SM2位必須為0。共七十七頁2024/12/950(a)8位并入/串出移位寄存器74HC165(b)串行口與74HC165配合圖8-2974HC165及其與單片機(jī)串行口的配合如果把能實(shí)現(xiàn)(shíxiàn)并入串出功能的移位寄存器(如74HC165或CD4014)與串行口配合使用,就可以把串行口變?yōu)椴⑿休斎肟谑褂?。共七十七?024/12/951例8-2電路(diànlù)連接如圖8-30所示,在AT89C51單片機(jī)串行口外接了一片8位并入/串出移位寄存器74HC165,P2口外接了8只發(fā)光二極管,74HC165并行輸入端連接8位撥碼開關(guān),要求編寫程序?qū)艽a開關(guān)的動(dòng)作用發(fā)光二極管表示出來,開關(guān)打在ON位置時(shí)二極管亮,打在OFF位置時(shí)二極管不亮。圖8-30例8-2電路連接圖共七十七頁2024/12/952程序設(shè)計(jì)(chénɡxùshèjì)如下:#include<reg51.h>sbitclk=P1^0;voiddelay(intN) //延時(shí)子程序{inti,j;for(i=0;i<N;i++)for(j=0;j<i;j++);}voidmain(){intxx; while(1) { clk=0;clk=1;//發(fā)送移位脈沖SCON=0x10;//允許串行口接收數(shù)據(jù)while(RI==0) //等待發(fā)送

{;}xx=SBUF;//讀取數(shù)據(jù)RI=0; //清除接收中斷(zhōngduàn)標(biāo)志P2=xx;delay(200);}}共七十七頁2024/12/953SM0、SM1=01方式1一幀數(shù)據(jù)為10位,1個(gè)起始位(0),8個(gè)數(shù)據(jù)位,1個(gè)停止位(1),先發(fā)送(fāsònɡ)或接收最低位。幀格式如下:2方式(fāngshì)1

方式1幀格式共七十七頁2024/12/954方式(fāngshì)1波特率=(2SMOD/32)×定時(shí)器T1的溢出率

SMOD為PCON寄存器的最高位的值(0或1)。式中,SMOD為PCON寄存器最高位(0或1)。定時(shí)器T1的溢出率就是溢出周期的倒數(shù),和所采用的定時(shí)器工作方式有關(guān)。當(dāng)定時(shí)器T1作為波特率發(fā)生器使用時(shí),通常選用工作方式2,這是由于方式2可以自動(dòng)(zìdòng)裝入定時(shí)時(shí)間常數(shù)(也即計(jì)數(shù)初值),可避免通過程序反復(fù)裝入初值所引起的定時(shí)誤差,使波特率更加穩(wěn)定,因此,這是一種最常用的方法。共七十七頁2024/12/955設(shè)計(jì)數(shù)的預(yù)置值(初始值)為x,那么每過256-x個(gè)機(jī)器周期,定時(shí)器溢出一次。為了避免因溢出而產(chǎn)生不必要的中斷,此時(shí)(cǐshí)應(yīng)禁止T1中斷。溢出周期為:溢出(yìchū)率為溢出(yìchū)周期的倒數(shù),所以共七十七頁2024/12/956在實(shí)際使用時(shí),總是先確定(quèdìng)波特率,再計(jì)算定時(shí)器T1的計(jì)數(shù)初值(常在這種場(chǎng)合稱其為時(shí)間常數(shù)),然后進(jìn)行定時(shí)器的初始化。表8-3定時(shí)器T1工作于方式2時(shí)常用的波特率及計(jì)數(shù)初值共七十七頁2024/12/957(1)方式1發(fā)送(fāsònɡ)

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

(2)方式1接收

數(shù)據(jù)從RXD(P3.0)腳輸入。當(dāng)檢測(cè)到起始位的負(fù)跳變時(shí),開始接收數(shù)據(jù)。定時(shí)控制信號(hào)有兩種:接收移位時(shí)鐘(RX時(shí)鐘,頻率和波特率相同)和位檢測(cè)器采樣脈沖(頻率是RX時(shí)鐘的16倍,1位數(shù)據(jù)期間,有16個(gè)采樣脈沖),當(dāng)采樣到RXD端從1到0的跳變時(shí)就啟動(dòng)檢測(cè)器,接收的值是3次連續(xù)采樣(第7、8、9個(gè)脈沖時(shí)采樣)進(jìn)行表決以確認(rèn)是否是真正的起始位(負(fù)跳變)的開始。當(dāng)一幀數(shù)據(jù)接收完,須同時(shí)滿足兩個(gè)條件,接收才真正有效。⑴RI=0,即上一幀數(shù)據(jù)接收完成時(shí),RI=1發(fā)出的中斷請(qǐng)求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說明(shuōmíng)“接收SBUF”已空。⑵SM2=0或收到的停止位=1(方式1時(shí),停止位已進(jìn)入RB8),則收到的數(shù)據(jù)裝入SBUF和RB8(RB8裝入停止位),且置“1”中斷標(biāo)志RI。若這兩個(gè)條件不同時(shí)滿足,收到的數(shù)據(jù)將丟失。共七十七頁2024/12/959圖8-33方式1接收數(shù)據(jù)時(shí)的時(shí)序共七十七頁2024/12/960例8-3電路連接如圖8-34所示,有兩片AT89C51單片機(jī),要求甲單片機(jī)的K1按鍵次數(shù)可向乙單片機(jī)發(fā)送(fāsònɡ),并在乙單片機(jī)P0口所接的數(shù)碼管上顯示出來,顯示的數(shù)字范圍從0到9循環(huán)。試編程。圖8-34例8-3電路(diànlù)連接圖共七十七頁2024/12/961解:分析:兩單片機(jī)的串行口都工作在方式1。甲機(jī)負(fù)責(zé)(fùzé)對(duì)按鍵次數(shù)計(jì)數(shù),并將計(jì)數(shù)的次數(shù)通過串口發(fā)送給乙機(jī);乙機(jī)則負(fù)責(zé)(fùzé)接收甲方送來的數(shù)據(jù),并將其在數(shù)碼管上顯示出來,因此兩片單片機(jī)的程序要分別編寫。本例中兩單片機(jī)均工作在串口方式1(即10位異步通信模式)下,程序需要首先進(jìn)行串口初始化,主要任務(wù)是設(shè)置產(chǎn)生波特率的定時(shí)器1、串口控制和中斷控制,具體步驟如下:

①.設(shè)置串口模式(SCON);②.設(shè)置定時(shí)器1的工作方式(TMOD);③.計(jì)算定時(shí)器1的初值(THl/TLl);④.啟動(dòng)(qǐdòng)定時(shí)器1(TR1);⑤.如果串口工作在中斷方式,還必須設(shè)置IE允許ES中斷,并編寫中斷例程。本例甲機(jī)程序中設(shè)SCON=0x40(即01000000),乙機(jī)程序則設(shè)SCON=0x50(即01010000),兩者都將串口設(shè)為方式1,但后者還需將REN(允許接收)位設(shè)置為1,因?yàn)橐覚C(jī)要接收串口數(shù)據(jù),而甲機(jī)不需要接收數(shù)據(jù)。共七十七頁2024/12/962方式1下波特率由定時(shí)器1控制,讓定時(shí)器1工作在自動(dòng)重裝初值的方式2,波特率計(jì)算公式為:波特率=2SMOD×晶振頻率/[12×(256-THl)×32]設(shè)波特率為9600b/s,若fosc=11.0592MHz,波特率不倍增,即SMOD=0,PCON=0x00(SMOD為PCON的最高位)。由波特率計(jì)算公式可求得TH1=TL1=0xFD(即253)。本例中兩片單片機(jī)的串口均不工作在中斷方式,而是使用查詢方式,發(fā)送方通過循環(huán)查詢TI標(biāo)志判斷是否(shìfǒu)發(fā)送完成,接收方通過循環(huán)查詢RI標(biāo)志判斷是否接收到字節(jié)。因此發(fā)送前要將TI清零,接收前要將RI清零,如果發(fā)送成功,硬件會(huì)自動(dòng)將TI置1,如果接收到新字節(jié),硬件也會(huì)將RI置1。在每一次收/發(fā)時(shí)都要注意通過程序?qū)I和RI再次清零。共七十七頁2024/12/963甲機(jī)程序:#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitK1=P1^0;ucharNumX=0x0a;voidmain(){SCON=0x40;//串口工作(gōngzuò)在方式1TMOD=0x20;//T1工作在方式2,8位自動(dòng)重裝載方式PCON=0x00;//波特率不倍增TH1=0xfd;//波特率為9600b/sTL1=0xfd;TI=0;TR1=1;//啟動(dòng)定時(shí)器1while(1){if(K1==0)//按鍵按下,計(jì)數(shù)次數(shù)(cìshù)加1{while(K1==0);NumX=(NumX+1)%11;SBUF=NumX;//發(fā)送計(jì)數(shù)次數(shù)while(TI==0);TI=0;}}}共七十七頁2024/12/964乙機(jī)程序:#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voidmain(){P0=0x00;SCON=0x50;//串口工作在方式(fāngshì)1,允許接收數(shù)據(jù)TMOD=0x20;//T1工作在方式2,8位自動(dòng)重裝載方式PCON=0x00;//波特率不倍增TH1=0xfd;//波特率為9600b/sTL1=0xfd;RI=0;TR1=1;啟動(dòng)定時(shí)器1 while(1){if(RI){RI=0;if(SBUF>=0&&SBUF<=9)P0=DSY_CODE[SBUF];//顯示(xiǎnshì)接收的數(shù)據(jù)elseP0=0x00;}}}共七十七頁2024/12/9659位異步通信接口。每幀數(shù)據(jù)均為11位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控的第9位數(shù)據(jù)和1位停止(tíngzhǐ)位。幀格式如下:3方式(fāngshì)2方式2波特率=(2SMOD/64)×fosc

共七十七頁2024/12/966發(fā)送前,先根據(jù)通訊協(xié)議由軟件設(shè)置TB8(例如,雙機(jī)通訊時(shí)的奇偶校驗(yàn)位或多機(jī)通訊時(shí)的地址(dìzhǐ)/數(shù)據(jù)的標(biāo)志位)。方式2發(fā)送數(shù)據(jù)波形如圖所示。(1)方式(fāngshì)2發(fā)送方式2、3發(fā)送數(shù)據(jù)時(shí)序波形共七十七頁2024/12/967SM0、SM1=10,且REN=1。數(shù)據(jù)由RXD端輸入,接收11位信息。當(dāng)位檢測(cè)到RXD從1到0的負(fù)跳變,并判斷起始位有效后,開始收一幀信息(xìnxī)。在接收器完第9位數(shù)據(jù)后,需滿足兩個(gè)條件,才能將接收到的數(shù)據(jù)送入SBUF。(1)RI=0,意味著接收緩沖器為空。(2)SM2=0或接收到的第9位數(shù)據(jù)位RB8=1時(shí)。當(dāng)上述兩個(gè)條件滿足時(shí),接收到的數(shù)據(jù)送入SBUF(接收緩沖器),第9位數(shù)據(jù)送入RB8,并置“1”RI。若不滿足兩個(gè)條件,接收的信息將被丟棄。方式2接收數(shù)據(jù)的時(shí)序如圖所示。

(2)方式(fāngshì)2接收

共七十七頁2024/12/968方式(fāngshì)2接收數(shù)據(jù)的時(shí)序共七十七頁2024/12/969

SM0、SM1=11,串口為方式3。波特率可變的9位異步通訊方式,除波特率外,方式3和方式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論