《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目五_第1頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目五_第2頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目五_第3頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目五_第4頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目五_第5頁
已閱讀5頁,還剩96頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

模塊5單片機(jī)的串口通信設(shè)計(jì)5.1項(xiàng)目描述5.2項(xiàng)目目的與要求5.3項(xiàng)目支撐知識(shí)鏈接5.4項(xiàng)目實(shí)施項(xiàng)目小結(jié)項(xiàng)目拓展技能與練習(xí)

【項(xiàng)目導(dǎo)入】

由項(xiàng)目1可知,單片機(jī)的I/O端口中有一個(gè)可編程、全

雙工的串行口,它就是單片機(jī)與外界進(jìn)行交換信息的端口,本項(xiàng)目將學(xué)習(xí)單片機(jī)串行通信的相關(guān)知識(shí)和串口的結(jié)構(gòu)及

應(yīng)用。

【項(xiàng)目目標(biāo)】

1.知識(shí)目標(biāo)

(1)了解單片機(jī)串行通信的一些概念;

(2)掌握單片機(jī)串行口的結(jié)構(gòu)和工作原理;

(3)理解單片機(jī)串行口的工作方式;

(4)掌握串行通信的硬件設(shè)計(jì)。

2.能力目標(biāo)

(1)能根據(jù)系統(tǒng)的功能要求,對(duì)串口進(jìn)行設(shè)置;

(2)能根據(jù)功能模塊要求,對(duì)串口通信進(jìn)行設(shè)計(jì);

(3)學(xué)會(huì)串行口的初始化編程。

5.1項(xiàng)目描述

單片機(jī)與外界進(jìn)行信息的交換必然要用到通信協(xié)議,比如單片機(jī)與單片機(jī)的通信、單片機(jī)與PC的通信等。本項(xiàng)目通過設(shè)計(jì)一個(gè)由甲單片機(jī)(簡(jiǎn)稱甲機(jī))通過串口通信去控制乙單片機(jī)(簡(jiǎn)稱乙機(jī))LED燈的閃爍,來讓大家熟悉并掌握單片機(jī)的通信設(shè)計(jì)。

5.2項(xiàng)目目的與要求

本項(xiàng)目的設(shè)計(jì)目的是通過甲單片機(jī)的端口控制乙單片機(jī)I/O端口LED燈的閃爍。具體要求:通過按下甲單片機(jī)的開關(guān)次數(shù)來完成發(fā)送控制命令字符,乙單片機(jī)根據(jù)接收來自甲機(jī)傳送的信息來完成LED1閃爍、LED2閃爍、雙閃爍或停止閃爍等。在實(shí)施項(xiàng)目過程中,要掌握以下基本知識(shí)點(diǎn):

(1)串行通信的基本概念和工作原理;

(2)單片機(jī)的串行口結(jié)構(gòu);

(3)串口寄存器的功能及串口的工作方式;

(4)串口通信的應(yīng)用。

5.3項(xiàng)目支撐知識(shí)鏈接

5.3.1串行通信

1.概述

在實(shí)際應(yīng)用中,計(jì)算機(jī)與外部設(shè)備之間,計(jì)算機(jī)與計(jì)算機(jī)之間常常要進(jìn)行信息交換,所有這些信息的交換均稱為“通信”。通信的基本方式分為并行通信和串行通信兩種。并行通信是構(gòu)成數(shù)據(jù)信息的各位同時(shí)進(jìn)行傳送的通信方式,例如8位數(shù)據(jù)或16位數(shù)據(jù)并行傳送。圖5-1(a)為并行通信方式的示意圖,其特點(diǎn)是傳輸速度快,缺點(diǎn)是需要多條傳輸線,當(dāng)距離較遠(yuǎn)、位數(shù)又多時(shí),通信線路復(fù)雜且成本高。串行通信是數(shù)據(jù)一位接一位地順序傳送。圖5-1(b)為串行通信方式的示意圖。其特點(diǎn)是通信線路簡(jiǎn)單,只要一對(duì)傳輸線就可以實(shí)現(xiàn)通信(如電話線),從而大大降低了成本,特別適用于遠(yuǎn)距離通信,缺點(diǎn)是傳送速度慢。圖5-1通信的兩種基本方式由圖5-1可知,假設(shè)并行傳送N位數(shù)據(jù)所需時(shí)間為T,那么串行傳送的時(shí)間至少為NT,實(shí)際上總是大于NT。在串行通信中一個(gè)方向只有一根通信線,這根線既傳輸數(shù)據(jù)信息,又傳輸控制信息。為了加以區(qū)分,要對(duì)信息的格式進(jìn)行約定。信息格式有異步信息和同步信息兩種,與此對(duì)應(yīng),串行通信就分為異步通信和同步通信兩種方式。

1)異步通信方式

異步通信方式是一種常用的通信方式,以幀為發(fā)送單位。幀由四個(gè)部分組成:起始位、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位。起始位占1位,數(shù)據(jù)位占5~8位,奇偶校驗(yàn)位占1位(也可以沒有奇偶校驗(yàn)位),停止位占1或2位,如圖5-2所示。圖5-2中給出的是有8位數(shù)據(jù)位的幀格式,幀中有1位起始位、8位數(shù)據(jù)位、1位奇偶校驗(yàn)位、1位停止位,共11位。其中,起始位標(biāo)識(shí)數(shù)據(jù)發(fā)送開始,接下來是數(shù)據(jù)位和奇偶校驗(yàn)位,停止位標(biāo)識(shí)數(shù)據(jù)發(fā)送結(jié)束。數(shù)據(jù)傳送的基本過程是:傳送開始后,接收設(shè)備不斷檢測(cè)傳輸線,若在接收到一系列的“1”之后,檢測(cè)到一個(gè)“0”,說明接到一個(gè)幀的起始位,接著接收數(shù)據(jù)位和奇偶校驗(yàn)位,當(dāng)接收到停止位時(shí),說明幀傳送結(jié)束。將數(shù)據(jù)位拼成一個(gè)字節(jié),進(jìn)行奇偶校驗(yàn),驗(yàn)證無誤后表明正確收到一個(gè)字符。圖5-2異步通信原理示意圖由上述過程可見,異步通信是按字符傳輸?shù)?。異步通信的特點(diǎn)是不需要傳送同步脈沖,字符幀長(zhǎng)度也不受限制,故硬件結(jié)構(gòu)比同步通信方式簡(jiǎn)單;但因此種傳送方式中包含有起始位和停止位,故而降低了有效數(shù)據(jù)的傳輸速率。

2)同步通信方式

同步通信是一種比特同步的通信方式,要求發(fā)收雙方具有同頻同相的同步時(shí)鐘信號(hào),用同步起始位作為發(fā)送或接收數(shù)據(jù)的開始,如圖5-3所示。圖5-3同步通信示意圖圖5-3中給出的是同步通信方式的一幀數(shù)據(jù)。數(shù)據(jù)傳送的基本過程為:發(fā)送方先發(fā)送一個(gè)或兩個(gè)特殊字符,該字符稱為同步字符,當(dāng)發(fā)送方和接收方達(dá)到同步后,就一個(gè)接一個(gè)地發(fā)送一大塊數(shù)據(jù)。

使用同步通信方式可以實(shí)現(xiàn)高速度、大容量的數(shù)據(jù)傳送,其缺點(diǎn)是要求發(fā)送時(shí)鐘和接收時(shí)鐘保持嚴(yán)格同步。故發(fā)送時(shí)鐘除應(yīng)和發(fā)送比特率保持一致外,還應(yīng)把它同時(shí)傳送到接收端。

2.串行通信方式與波特率

1)串行通信方式

在串行通信中,數(shù)據(jù)是在兩個(gè)站之間進(jìn)行傳送的。按照數(shù)據(jù)傳送方向,串行通信可分為單工(simplex)、半雙工(halfduplex)和全雙工(fullduplex)三種方式。圖5-4為三種方式的示意圖。

(1)單工:指通信雙方只能進(jìn)行單方向傳輸。單工通信的通信線是單向的,發(fā)送端只有發(fā)送器,只能發(fā)送數(shù)據(jù);接收端只有接收器,只能接收數(shù)據(jù),如圖5-4(a)所示。

(2)半雙工:指通信雙方都能進(jìn)行數(shù)據(jù)傳輸,雙方都設(shè)有發(fā)送器和接收器,都能發(fā)送數(shù)據(jù)和接收數(shù)據(jù),但不能同

時(shí)進(jìn)行,即發(fā)送時(shí)不能接收,接收時(shí)不能發(fā)送,如圖5-4(b)所示。

(3)全雙工:是指通信雙方能同時(shí)進(jìn)行數(shù)據(jù)傳輸,雙方都設(shè)有發(fā)送器和接收器,能同時(shí)發(fā)送數(shù)據(jù)和接收數(shù)據(jù),如圖5-4(c)所示。圖5-4串行通信數(shù)據(jù)傳送方式

2)波特率

串行通信的快慢用波特率來表示。51系列單片機(jī)串行口有4種工作方式,波特率也隨之不同。波特率和幀格式可以通過軟件編程來設(shè)置。必須正確進(jìn)行波特率的設(shè)置,才能進(jìn)行可靠的數(shù)據(jù)通信。波特率是數(shù)據(jù)的傳送速率,指的是每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),單位為波特/秒(baud/s),也叫波特?cái)?shù),它是衡量異步通信的一個(gè)重要指標(biāo)。但波特率與字符的實(shí)際傳送速率不同,字符的實(shí)際傳送速率(字符幀/秒)是每秒內(nèi)所傳送的字符幀數(shù),和字符幀格式有關(guān)。波特率與字符的傳送速率(字符/秒)之間存在如下關(guān)系:波特率=位/字符×字符/秒=位/秒。每1位二進(jìn)制位的傳送時(shí)間Td就是波特率的倒數(shù)。

例如:假設(shè)字符傳送速度為360字符/s,每個(gè)字符又包含10位,試求此通信中的波特率及一位二進(jìn)制數(shù)的傳送時(shí)間。

波特率為一位二進(jìn)制數(shù)傳送的時(shí)間即為波特率的倒數(shù):

異步通信的傳送速率在50~19200位/s之間,常用于計(jì)算機(jī)到CRT終端,以及雙機(jī)和多機(jī)之間的通信。

3.信號(hào)的調(diào)制和解調(diào)

當(dāng)異步通信的距離在30m以內(nèi)時(shí),計(jì)算機(jī)之間可以直接通信。而當(dāng)傳輸距離較遠(yuǎn)時(shí),通常用電話線進(jìn)行傳送。電話線的帶寬限制以及信號(hào)傳送中的衰減會(huì)使信號(hào)發(fā)生明顯的畸變。所以,在這種情況下,發(fā)送時(shí)要用調(diào)制解調(diào)器(Modulator)把數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào),并加以放大再傳送,這個(gè)過程稱為調(diào)制。在接收時(shí),用解調(diào)器(Demodulator)檢測(cè)此模擬信號(hào),并把它轉(zhuǎn)換成數(shù)字信號(hào)再送入計(jì)算機(jī),這個(gè)過程稱為解調(diào)。

4.RS-232C串行通信協(xié)議

RS-232C由美國(guó)電子工業(yè)協(xié)會(huì)制定,是目前使用最多的一種異步串行通信總線標(biāo)準(zhǔn)。RS-232C定義了數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通信設(shè)備(DCE)之間的物理接口規(guī)范。采用標(biāo)準(zhǔn)接口后,能方便地把單片機(jī)和外設(shè)以及測(cè)量?jī)x器等有機(jī)地連接起來構(gòu)成一個(gè)控制系統(tǒng)。此串口協(xié)議適合短距離或調(diào)制解調(diào)的通信場(chǎng)合。

1)?RS-232C的電氣特性

該標(biāo)準(zhǔn)采用負(fù)邏輯,電平值為-3V~-15V的低電平表示邏輯“1”;電平值為?+3V~+15V的高電平表示邏輯“0”。RS-232C不能直接與TTL電路連接,使用時(shí)必須加上適當(dāng)?shù)碾娖睫D(zhuǎn)換電路,否則會(huì)燒壞。目前較常用的電平轉(zhuǎn)換芯片有MAX232、MC1488和MC1489等。

2)?RS-232C引腳

RS-232C接口采用的是9針連接和25針連接,具體如圖5-5所示。RS-232C的引腳定義見表5-1所示。圖5-5串行口

3)?RS-232C的通信距離和速度

RS-232C規(guī)定的最大負(fù)載電容為2500pF,這個(gè)電容限制了它的傳送距離和傳送速率。在不使用調(diào)制解調(diào)器(Modem)時(shí),它的可靠最大通信距離為15米。另外,它的接口最大傳輸速率為20k/s,它還提供以下傳輸速率:1200b/s、2400b/s、4800b/s、9600b/s和19200b/s。在使用RS-232C時(shí)要根據(jù)情況選擇它的傳輸速率。5.3.2單片機(jī)的串行口及工作方式

51單片機(jī)內(nèi)部含有一個(gè)可編程的全雙工通信串行接口(簡(jiǎn)稱串行口),該接口電路不僅能同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收,也可作為一個(gè)同步移位寄存器使用。該串行口通過引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界進(jìn)行通信。由三個(gè)特殊功能寄存器對(duì)串行口的接收和發(fā)送進(jìn)行控制,它們分別是串行口緩沖寄存器SBUF、串行口控制寄存器SCON和電源控制寄存器PCON。51系列單片機(jī)串行口內(nèi)部簡(jiǎn)化結(jié)構(gòu)示意圖如圖5-6所示。圖5-6串行口簡(jiǎn)化結(jié)構(gòu)串行發(fā)送和接收的速率與移位時(shí)鐘同步,定時(shí)器T1作為串行通信的波特率發(fā)生器,T1溢出率經(jīng)2分頻(或不分頻)后又經(jīng)16分頻作為串行發(fā)送或接收的移位時(shí)鐘。移位時(shí)鐘的速率即波特率。

(1)發(fā)送數(shù)據(jù)過程:CPU通過內(nèi)部總線將并行數(shù)據(jù)寫入發(fā)送SBUF。在發(fā)送控制電路的控制下,按設(shè)定好的波特率,每來一次移位脈沖,通過引腳TXD向外輸出一位。一幀數(shù)據(jù)發(fā)送結(jié)束后,向CPU發(fā)出中斷請(qǐng)求,TI位置1;CPU響應(yīng)中斷后,開始準(zhǔn)備發(fā)送下一幀數(shù)據(jù)。

(2)接收數(shù)據(jù)過程:CPU不停檢測(cè)引腳RXD上的信號(hào),當(dāng)信號(hào)中出現(xiàn)低電平時(shí),在接收控制電路的控制下,按設(shè)定好的波特率,每來一次移位脈沖,讀取外部設(shè)備發(fā)送的一位數(shù)據(jù)到移位寄存器。一幀數(shù)據(jù)傳輸結(jié)束后,數(shù)據(jù)被存入接收SBUF,同時(shí)向CPU發(fā)出中斷請(qǐng)求,RI位置1。CPU響應(yīng)中斷后,開始接收下一幀數(shù)據(jù)。

1.與串行口有關(guān)的寄存器

51系列單片機(jī)中有關(guān)串行通信的特殊功能寄存器有串行數(shù)據(jù)緩沖寄存器SBUF、串行控制寄存器SCON和電源控制寄存器PCON。

1)串行數(shù)據(jù)緩沖寄存器SBUF

串行數(shù)據(jù)緩沖寄存器SBUF是一個(gè)字節(jié)地址為99H的特殊功能寄存器,用來存放將要發(fā)送或接收到的數(shù)據(jù)。在物理結(jié)構(gòu)上,它對(duì)應(yīng)著發(fā)送緩沖寄存器和接收緩沖寄存器,它們共用同一個(gè)地址。CPU通過讀或?qū)憗韰^(qū)別究竟對(duì)哪一個(gè)緩沖寄存器進(jìn)行操作,即發(fā)送緩沖寄存器只能寫入不能讀出,接收緩沖寄存器只能讀出而不能寫入。當(dāng)CPU向SBUF發(fā)出“寫”命令時(shí),表示將A中數(shù)據(jù)寫入發(fā)送緩沖寄存器,同時(shí)也啟動(dòng)數(shù)據(jù)按一定的波特率發(fā)送;而當(dāng)執(zhí)行讀SBUF的命令時(shí),則表示將接收到的數(shù)據(jù)從接收緩沖寄存器讀出并送入A中。

2)串行控制寄存器SCON

串行控制寄存器SCON用于設(shè)置串行口的工作方式,監(jiān)視串行口的工作狀態(tài)、發(fā)送與接收的狀態(tài)控制等。它是一個(gè)既可進(jìn)行字節(jié)尋址又可進(jìn)行位尋址的特殊功能寄存器。

串行控制寄存器SCON的結(jié)構(gòu)和各位名稱、位地址如表5-2所示。各位功能說明如下:

(1)?SM0、SM1—串行口工作方式選擇位:串行口的工作方式及功能選擇由這兩位確定,具體如表5-3所示。

(2)?SM2—多機(jī)通信控制位:在方式2和方式3中,若SM2=1,且RB8(接收到的第九位數(shù)據(jù))=1時(shí),將接收到的前8位數(shù)據(jù)送入SBUF,并置位RI產(chǎn)生中斷請(qǐng)求,否則將接收到的8位數(shù)據(jù)丟棄;若SM2=0,則不論第九位數(shù)據(jù)為0還是為1,都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請(qǐng)求。在方式0中,SM2必須為0。

(3)?REN—允許接收控制位:REN位用于對(duì)串行數(shù)據(jù)的接收進(jìn)行控制:REN=0,禁止接收;REN=1,允許接收。該位由軟件置位或復(fù)位。

(4)?TB8—方式2和方式3中要發(fā)送的第9位數(shù)據(jù):在方式2和方式3時(shí),TB8是發(fā)送的第9位數(shù)據(jù)。該位由軟件置位或復(fù)位。TB8還可用作奇偶校驗(yàn)位,也可在多機(jī)通信中作為地址幀或數(shù)據(jù)幀的標(biāo)志位使用。

(5)?RB8—在方式2或方式3中,RB8存放已接收到的第9位數(shù)據(jù),作為奇偶校驗(yàn)位或地址幀/數(shù)據(jù)幀的標(biāo)志位;在方式1中,若SM2=0,則RB8是接收到的停止位。

(6)?TI—發(fā)送中斷標(biāo)志位:當(dāng)采用方式0時(shí),發(fā)送完第8位數(shù)據(jù)后,該位由硬件置位;在其他方式下,遇發(fā)送停止位時(shí),該位由硬件置位。因此TI=1,表示幀發(fā)送結(jié)束,可用軟件查詢TI位標(biāo)志,也可以請(qǐng)示中斷。TI位必須由軟件清0。

(7)?RI—接收中斷標(biāo)志位:當(dāng)采用方式0時(shí),接收完第8位數(shù)據(jù)后,該位由硬件置位;在其他方式下,當(dāng)接收到停止位時(shí),該位由硬件置位。因此RI=1,表示幀接收結(jié)束,可用軟件查詢RI位標(biāo)志,也可以請(qǐng)示中斷。RI位也必須由軟件清0。

3)電源控制寄存器PCON

PCON主要是為CHMOS型單片機(jī)電源控制而設(shè)置的專用寄存器。其中,最高位SMOD是串行口波特率的倍增位,在串行口方式1、方式2、方式3時(shí),波特率與SMOD有關(guān),當(dāng)SMOD=1時(shí)串行口波特率加倍。系統(tǒng)復(fù)位時(shí),SMOD=0。PCON寄存器不能進(jìn)行位尋址,其各位名稱如表5-4所示。

2.串行口的工作方式

89C51單片機(jī)串行通信共有4種工作方式,可有8位、10位、11位幀格式,是由串行控制寄存器SCON中SM0SM1來決定的,如表5-3所示。

1)串行工作方式0

在方式0下,串行口作為同步移位寄存器使用。這時(shí)以RXD端作為數(shù)據(jù)移位的輸入/輸出端,而由TXD端輸出移位脈沖。移位數(shù)據(jù)的發(fā)送和接收以8位為一幀,不設(shè)起始位和停止位,無論輸入/輸出,均低位在前高位在后。其幀格式如下:在移位時(shí)鐘脈沖(TXD)的控制下,將發(fā)送數(shù)據(jù)緩沖器的數(shù)據(jù)串行移到外接的移位寄存器,通過引腳RXD輸出;8位數(shù)據(jù)以fosc/12的固定頻率輸出,發(fā)送完一幀數(shù)據(jù)后,發(fā)送中斷標(biāo)志TI由硬件置位;接收數(shù)據(jù)時(shí),復(fù)位接收請(qǐng)求標(biāo)志RI=0,置位允許接收控制位REN=1,外接移位寄存器中的內(nèi)容首先移入內(nèi)部的輸入寄存器,然后寫入接收數(shù)據(jù)緩沖寄存器,此后RI置1。在方式0下,移位操作的波特率是固定的,為單片機(jī)晶振頻率的1/12。以fosc表示晶振頻率,則波特率=fosc/12,也就是一個(gè)機(jī)器周期進(jìn)行一次移位。若fosc=6MHz,則波特率為500kb/s,即2μs移位一次;若fosc?=?12MHz,則波特率為1Mb/s,即1μs移位一次。

2)串行工作方式1

方式1是一幀10位的異步串行通信方式,包括1個(gè)起始位、8個(gè)數(shù)據(jù)位和1個(gè)停止位,其幀格式如下:數(shù)據(jù)發(fā)送是由一條寫串行數(shù)據(jù)緩沖寄存器SBUF指令開始的。在串行口硬件自動(dòng)加入起始位和停止位,構(gòu)成一個(gè)完整的幀格式,然后在移位脈沖的作用下,由TXD端串行輸出。一個(gè)字符幀發(fā)送完后,使TXD輸出線維持在“1”(space)狀態(tài)下,并將串行控制寄存器SCON中的TI置1,表示一幀數(shù)據(jù)發(fā)送完畢;接收數(shù)據(jù)時(shí),SCON中的REN位應(yīng)處于允許接收狀態(tài)(REN=1)。在此前提下,串行口采樣RXD端,當(dāng)采樣到從1向0狀態(tài)的跳變時(shí),就認(rèn)定為已接收到起始位,隨后在移位脈沖的控制下,接收數(shù)據(jù)位和停止位。

【小提示】

(1)若RI=0,SM2=0,則8位數(shù)據(jù)裝入SBUF,停止位裝入RB8,置RI=1。

(2)若RI=0,SM2=1,且停止位為1,則結(jié)果與A相同。

(3)若RI=0,SM2=1,且停止位為0,則所接收數(shù)據(jù)丟失。

(4)若RI=1,則所接收數(shù)據(jù)丟失。上述不論出現(xiàn)哪種情況,檢測(cè)器都會(huì)重新檢測(cè)RXD端的負(fù)跳變,以便接收下一幀。

方式1的波特率是可變的,其波特率由定時(shí)器/計(jì)數(shù)器T1的計(jì)數(shù)溢出率來決定,其公式為:波特率=2SMOD×(T1溢出率)/32。其中,SMOD為PCON中最高位的值,SMOD=1表示波特率倍增。當(dāng)定時(shí)器/計(jì)數(shù)器T1用作波特率發(fā)生器時(shí),通常選用定時(shí)初值自動(dòng)重裝的工作方式2(注意:不要把定時(shí)器/計(jì)數(shù)器的工作方式與串行口的工作方式搞混淆),從而避免了通過程序反復(fù)裝入計(jì)數(shù)初值而引起的定時(shí)誤差,使得波特率更加穩(wěn)定。若T1不中斷,則T0可設(shè)置為方式3,借用T1的部分資源,拆成兩個(gè)獨(dú)立的8位定時(shí)器/計(jì)數(shù)器,以彌補(bǔ)T1被用作波特率發(fā)生器而少一個(gè)定時(shí)器/計(jì)數(shù)器的缺憾。若時(shí)鐘頻率為fosc,定時(shí)計(jì)數(shù)初值為T1初值,則波特率為

波特率=?在實(shí)際應(yīng)用中,通常是先確定波特率,后根據(jù)波特率求T1定時(shí)初值,因此上式又可寫為

T1的時(shí)間常數(shù)?=?

例如,89C51單片機(jī)控制系統(tǒng),晶振為12MHz,要求串口發(fā)送數(shù)據(jù)為8位,波特率為1200b/s,設(shè)SMOD=1,則T1的時(shí)間常數(shù)的計(jì)算如下:

T1的時(shí)間常數(shù)=?

=256-52.08=203.92≈0CCH

3)串行工作方式2和方式3

方式2是一幀11位的串行通信方式,即1個(gè)起始位、8個(gè)數(shù)據(jù)位、1個(gè)可編程位TB8/RB8和1個(gè)停止位,其幀格式如下:其中,可編程位TB8/RB8既可用作奇偶校驗(yàn)位,也可用作控制位(多機(jī)通信)用,其功能由用戶確定。發(fā)送數(shù)據(jù)時(shí),向SBUF寫入一個(gè)數(shù)據(jù)就啟動(dòng)串口發(fā)送,同時(shí)將TB8寫入輸出移位寄存器的第9位。開始時(shí),SEND和DATA都是低電平,把起始位輸出到TXD。以后每次移位,左邊移入0。當(dāng)TB8移到輸出位時(shí),其左邊是一個(gè)1和全0。檢測(cè)到此條件,再進(jìn)行最后一次移位,SEND=1,DATA=0,輸出停止位,置TI=1。接收數(shù)據(jù)時(shí),置REN?=?1。與方式1類似,起始位0移到輸入寄存器的最左邊時(shí),進(jìn)行最后一次移位。在RI=0,SM2=0或接收到的第9位為1時(shí),收到的一字節(jié)數(shù)據(jù)裝入SBUF,第9位進(jìn)入RB8,置RI=1,然后又開始檢測(cè)RXD端負(fù)跳變。方式3同樣是一幀11位的串行通信方式,其通信過程與方式2完全相同,所不同的僅在于波特率。方式2的波特率只有固定的兩種,而方式3的波特率則與方式1相同,即通過設(shè)置TI的初值來設(shè)定波特率。

3.串行口的工作方式應(yīng)用

單片機(jī)串口初始化需完成單片機(jī)串口工作方式選擇、波特率設(shè)置、波特率發(fā)生器設(shè)置等基本設(shè)置。例如,設(shè)置單片機(jī)晶振為11.0592MHz,串口波特率為9600baud/s,串口選擇工作方式1,定時(shí)器配置為工作方式2。初始化程序如下:voidUartInit(void)

{TMOD=(TMOD&0X0F)|0X20;//設(shè)置定時(shí)器T1為定時(shí)方式2

TH1=110592001/12/32/9600;//求波特率為9600baud/s時(shí)定時(shí)器初值

TL1=TH1;//啟動(dòng)T1計(jì)數(shù)器

TR1=1;

SCON=0x70;//設(shè)置串行工作方式1,允許接收

PCON=0x80;}

【例5-1】用89C51的串行口外接一片CD4094擴(kuò)展8位并行輸出,并行口每位接一發(fā)光二極管,要求發(fā)光二極管循環(huán)輪流亮,工作電路如圖5-7所示,請(qǐng)編寫程序。圖5-7CD4094擴(kuò)展輸出接口分析:CD4094是一片8位串行輸入/并行輸出的同步移位寄存器,CLK為同步脈沖輸入端,STB為選通控制端。STB=0時(shí),8位數(shù)據(jù)Q1~Q8關(guān)閉,允許數(shù)據(jù)輸入;STB=1時(shí),8位數(shù)據(jù)Q1~Q8輸出。系統(tǒng)采用方式0通信,以中斷方式工作。C51源程序如下:

#include<reg51.h>

#include<intrins.h> //包含頭文件

#defineunitunsignedchar

#defineunitunsignedint

sbitP1_0=P1^0;

ucharSendData

voidDelayMs(uchar);

//延時(shí)1毫秒程序

voidserial_ISR(void)interrupt4//串行中斷處理程序{

P1_0=1;

DelayMs(200); //延時(shí)

TI=0;

P1_0=0; //允許接收

SendData=_crol_(SendData,1); //待發(fā)送的數(shù)據(jù)左移1位

SBUF=SendData; //發(fā)送數(shù)據(jù)

}

voidmain(void) //主程序{

TMOD=0x00; //設(shè)串行口為方式0

EA=1;

//開總中斷

ES=1;

//開串行中斷

SendData=0x01; //發(fā)送數(shù)據(jù)初值

P1_0=0;

SBUF=SendData; //發(fā)送數(shù)據(jù)

While(1); //等待一次數(shù)據(jù)發(fā)送完畢

}voidDelayMs(ucharno) //延時(shí)毫秒程序

{

uchari,j;

for(i=0;i<no;i++)

{

for(j=0;j<164;j++);

for(j=0;j<164;j++);

}

}

【例5-2】89C51單片機(jī)按全雙工方式收發(fā)數(shù)據(jù)。要求將內(nèi)部RAM的30H單元開始的20個(gè)數(shù)據(jù)發(fā)送出去,同時(shí)接

收到的20個(gè)數(shù)據(jù)保存到以50H單元為初始地址的內(nèi)部RAM

數(shù)據(jù)緩沖區(qū)。時(shí)鐘振蕩頻率為6MHz,數(shù)據(jù)傳送的波特率為2400baud/s,試編寫通信程序。

分析:

全雙工通信要求能同時(shí)接收和發(fā)送數(shù)據(jù),通過檢測(cè)RI位還是TI位為1來判斷是選擇接收操作還是選擇發(fā)送操作,系統(tǒng)采用串行方式2通信,以中斷方式工作。

C51程序如下:

#include<reg51.h>

#include<absacc.h>

unsignedchardatasdata[20]_at_0x30;

unsignedchardatardata[20]_at_0x50;

//定義變量絕對(duì)地址

main()

{

TMOD=0x20; //?T1工作于方式2

TH1=0xfa;

TL1=0xfa; //波特率時(shí)間常數(shù)TR1=1; //啟動(dòng)T1

SCON=0x50;

//設(shè)定串行口方式1

ES=1; //開串口中斷

EA=1;

//開中斷

While(1); //等待串行中斷

}

voidsbsi()interrupt4; //中斷處理程序{

if(RI==1)

{send();} //?RI=1,調(diào)用接收子程序

else

{rces();} //TI=1,調(diào)用發(fā)送子程序

}

//發(fā)送接收子程序

voidrces(){

unsignedcharI;

RI=0; //清RI

rdata[i]=SBUF;

//存入到指定數(shù)據(jù)緩沖區(qū)

i++; //指向下一數(shù)據(jù)存儲(chǔ)單元

if(i==20)

{i=0;}

}

voidsend(){

unsignedchari;

if(i==20)

{;}

//判斷數(shù)據(jù)是否發(fā)送完畢

else{

TI=0;

//清TI

SBUF=sdata[i]; //啟動(dòng)發(fā)送

}

i++;

//指向下一數(shù)據(jù)

}

5.4項(xiàng)目實(shí)施

5.4.1項(xiàng)目硬件設(shè)計(jì)

本項(xiàng)目的設(shè)計(jì)要求是:?jiǎn)纹瑱C(jī)甲發(fā)送信息,單片機(jī)乙接收發(fā)來的信息。通過甲的按鍵來控制發(fā)送的字符信息,乙單片機(jī)根據(jù)所接收到的信息完成LED1閃爍、LED2閃爍、LED1和LED2雙閃爍或同時(shí)停止閃爍,硬件設(shè)計(jì)如圖5-8所示。圖5-8甲機(jī)控制乙機(jī)的通信設(shè)計(jì)5.4.2項(xiàng)目軟件設(shè)計(jì)

根據(jù)甲單片機(jī)通過按鍵S1向乙單片機(jī)發(fā)送不同字符的控制信息,乙單片機(jī)再根據(jù)接收到的甲的字符信息來完成點(diǎn)亮LED,其程序設(shè)計(jì)的思想見程序控制流程圖5-9。根據(jù)流程圖的功能可寫出C51的源程序。圖5-9甲機(jī)和乙機(jī)通信流程圖C51源程序:

/*****甲機(jī)通過按鍵向乙機(jī)發(fā)送不同字符******/

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitLED1=P0^0;

sbitLED2=P0^3;

sbitS1=P1^0;

voidDelayMS(uintms) //延時(shí){ uchari;

while(ms--)for(i=0;i<120;i++);

}

/********向串口發(fā)送字符********/

voidPutc_to_SerialPort(ucharc)

{ SBUF=c;

while(TI==0);

TI=0;

}

voidmain() //主程序{

ucharOperation_No=0;

SCON=0x40; //串口模式1

TMOD=0x20; //T1工作模式2

PCON=0x00; //波特率不倍增

TH1=0xfd;

TL1=0xfd;

TI=0;

TR1=1;

while(1) {

if(K1==0)//按下S1時(shí)選擇操作代碼0,1,2,3

{

while(S1==0);

Operation_No=(Operation_No+1)%4;

}

switch(Operation_No) /根據(jù)操作代碼發(fā)送

A、B、C或停止發(fā)送

/*乙機(jī)程序接收甲機(jī)發(fā)送字符并完成相應(yīng)動(dòng)作,根據(jù)相應(yīng)信號(hào)控制LED完成不同閃爍動(dòng)作*/

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitLED1=P0^0;

sbitLED2=P0^3;

//延時(shí)

voidDelayMS(uintms)5.4.3項(xiàng)目綜合仿真與調(diào)試

1.使用KeilC51編譯源程序

KeilC51是51系列單片機(jī)的開發(fā)系統(tǒng),利用它可以編輯、編譯、匯編、連接C程序和匯編程序,從而可以生成在單片機(jī)中進(jìn)行燒錄的?.hex文件。項(xiàng)目1已經(jīng)詳細(xì)介紹了程序的編譯過程,本項(xiàng)目編寫的程序最終生成的燒錄文件如圖5-10所示。圖5-10編輯成功后生成的燒錄文件

2.使用Proteus系統(tǒng)仿真軟件調(diào)試并驗(yàn)證系統(tǒng)運(yùn)行的

結(jié)果

Proteus是一款優(yōu)秀的EDA軟件,使用它可以繪制電路原理圖、PCB圖,進(jìn)行交互式電路仿真。在單片機(jī)開發(fā)中可以使用此軟件檢查系統(tǒng)仿真運(yùn)行的結(jié)果。在Proteus下把原理圖按照?qǐng)D5-8畫好后,點(diǎn)擊單片機(jī)芯片在里面加載“.hex”文件,并點(diǎn)擊下面仿真控制按鈕的第一個(gè)“三角形”箭頭后,系統(tǒng)就能對(duì)系統(tǒng)進(jìn)行仿真,此時(shí)可以看到仿真結(jié)果,如圖5-11所示。圖5-11甲機(jī)通過通信控制乙機(jī)的仿真結(jié)果

【拓展技能訓(xùn)練】

設(shè)計(jì):?jiǎn)纹瑱C(jī)與PC通信。

要求:?jiǎn)纹瑱C(jī)可接收PC發(fā)送的數(shù)字字符,按下單片機(jī)的S1鍵后,單片機(jī)可向PC發(fā)送字符串。

在Proteus環(huán)境下完成本實(shí)驗(yàn)時(shí),需要安裝VirtualSerialPortDriver和串口調(diào)試助手。本例緩沖100個(gè)數(shù)字字符,緩沖滿后新數(shù)字從前面開始存放(環(huán)形緩沖)。

硬件設(shè)計(jì)原理圖如圖5-12所示。圖5-12單片機(jī)與主機(jī)的通信硬件電路C51源程序如下:

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharReceive_Buffer[101]; //接收緩沖

ucharBuf_Index=0; //緩沖空間索引

//數(shù)碼管編碼

ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

//延時(shí)void

溫馨提示

  • 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)論