第6章串行通信AVR單片機應用技術項目化教程課件_第1頁
第6章串行通信AVR單片機應用技術項目化教程課件_第2頁
第6章串行通信AVR單片機應用技術項目化教程課件_第3頁
第6章串行通信AVR單片機應用技術項目化教程課件_第4頁
第6章串行通信AVR單片機應用技術項目化教程課件_第5頁
已閱讀5頁,還剩84頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 串行通信基礎串行通信基礎一一 ATmega16 ATmega16異步串行通信接口異步串行通信接口二二 單片機單片機I/OI/O口模擬串行通信口模擬串行通信三三 項目設計項目設計四四 在實際中外部設備與單片機之間或單片機與單片機之間、單片機與計算機之間交換數(shù)據(jù),可以只通過2條線甚至一條線就完成數(shù)據(jù)的傳輸與交換。這時數(shù)據(jù)位排成一串,在數(shù)據(jù)線上傳輸,每個時間段只能傳輸一個比特位,且時間間隔為規(guī)定長度,這就是串行通信。6.1.1 6.1.1 串行通信與并行通信串行通信與并行通信6 6.1 .1串行通信基礎串行通信基礎前面所討論的AVR單片機I/O口,其數(shù)據(jù)傳輸是按字節(jié)進行,一個字節(jié)8個比特位分別與I

2、/O口位線相對應,同時從8個I/O口輸入、輸出,一個字節(jié)傳輸只需要時間T即可完成,這是數(shù)據(jù)的并行傳輸,如圖6-1所示。并行傳輸具有傳輸線多、速度快、編程簡單、通信距離短的特點。6.1.1 6.1.1 串行通信與并行通信串行通信與并行通信6 6.1 .1串行通信基礎串行通信基礎6.1.1 6.1.1 串行通信與并行通信串行通信與并行通信6 6.1 .1串行通信基礎串行通信基礎在串行數(shù)據(jù)傳輸中,一個字節(jié)8個比特數(shù)據(jù)排成一串,可以高位(MBS)在前,也可以低位在前(LBS),依次在數(shù)據(jù)線上進行傳輸。如果其傳輸速度與并行通信的速度相等且都為T,則串行通信中傳輸完一個字節(jié)所需要時間為8T,傳輸n個比特位

3、則需要nT時間,如圖6-2所示。串行通信具有傳輸線少、成本低等特點,比較適合遠通信。6.1.1 6.1.1 串行通信與并行通信串行通信與并行通信6 6.1 .1串行通信基礎串行通信基礎6.1.2 6.1.2 串行通信方式串行通信方式6 6.1 .1串行通信基礎串行通信基礎 根據(jù)串行通信的組成形式和數(shù)據(jù)傳輸方向,串行通信有3種通信方式:單工、半雙工、全雙工。6.1.2 6.1.2 串行通信方式串行通信方式6 6.1 .1串行通信基礎串行通信基礎單工通信如圖6-3a所示。單工通信只允許數(shù)據(jù)在一個方向上傳輸,發(fā)送端只能發(fā)送數(shù)據(jù),接收端只能接收數(shù)據(jù)。半工通信如圖6-3b所示。半雙工通信數(shù)據(jù)可以在兩個方

4、向傳輸,但不能同時進行數(shù)據(jù)收、發(fā)。發(fā)送端在發(fā)送數(shù)據(jù)的同時,接收端只能接收數(shù)據(jù),反之亦然。通過開關切換,可以將收發(fā)端功能互換,原來的接收端發(fā)送數(shù)據(jù),原來的發(fā)送端接收數(shù)據(jù)。全雙工通信分別有獨立的接收線和獨立的發(fā)送線,數(shù)據(jù)的收發(fā)可以同時進行,且互不影響,如圖6-3c所示。 在單片機系統(tǒng)中,三種串行通信方式都有應用。6.1.3 6.1.3 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎1. 1. 同步通信同步通信 SYNC(Synchronous Communication)同步通信以數(shù)據(jù)塊為傳輸單元,一個數(shù)據(jù)塊中包含了若干個數(shù)據(jù)字符(比如數(shù)據(jù)字節(jié)),僅在數(shù)據(jù)塊首部設置有

5、12個同步字符,用以進行數(shù)據(jù)通信。一旦建立數(shù)據(jù)同步,就可以進行數(shù)據(jù)字符的傳輸,中間無需再同步,數(shù)據(jù)塊中的數(shù)據(jù)字符長度可定義,如圖6-4。6.1.3 6.1.3 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎1. 1. 同步通信同步通信 由于同步通信是以數(shù)據(jù)塊為傳輸單元,冗余數(shù)據(jù)信息少,因此同步通信的通信速度很高,可達到Mbps以上。 在單片機系統(tǒng)中,采用同步串行通信時可以取消數(shù)據(jù)塊前面的同步字符,用專門的時鐘線來傳遞同步信號,以保證收發(fā)端數(shù)據(jù)的嚴格同步。因此,在單片機的同步通信中,單工或半雙工的通信硬件連接時需要兩條線,一條傳輸數(shù)據(jù),另一條專用于傳輸時鐘信號,而在

6、全雙工通信中則需要3條線,1條數(shù)據(jù)輸入、1條數(shù)據(jù)輸出、1條時鐘線。6.1.3 6.1.3 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎2 2、異步通信、異步通信 異步通信以字符為傳輸單位,通信中兩個字符的時間間隔不固定(異步),而字符中的兩個相鄰的比特位的時間是固定的(同步)。在異步通信中,沒有專門的、獨立的同步時鐘信號,典型的異步通信的數(shù)據(jù)幀格式如圖6-5所示,由起始位、數(shù)據(jù)位、奇偶校驗位、停止位所組成。起始位為一固定時間長度的低電平,表示一幀數(shù)據(jù)的開始,接著就是傳輸?shù)臄?shù)據(jù),其長度有5位、6位、7位、8位、9位等。數(shù)據(jù)位后面是奇偶校驗位,指示數(shù)據(jù)通信的出錯情況

7、。校驗位后面是1位或2位停止位。停止位為高電平,表示這一幀數(shù)據(jù)的結束。6.1.3 6.1.3 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎2 2、異步通信、異步通信數(shù)據(jù)幀后面跟著幾位保證數(shù)據(jù)可靠傳輸?shù)目臻e位。異步通信數(shù)據(jù)幀的間隔時間不同,通信時數(shù)據(jù)是一幀一幀進行傳輸,每幀通過起始位來同步。由于異步通信中沒有專門的時鐘同步信號,因此在芯片內(nèi)部需要專門的時序還原電路從異步數(shù)據(jù)幀中提取時鐘信號,以保證接收的數(shù)據(jù)被正常還原。6.1.3 6.1.3 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎3 3、波特率、波特率(Baud RateBau

8、d Rate)波特率是表示串行通信傳輸數(shù)據(jù)快慢的物理參數(shù),其定義為單位時間內(nèi)傳輸?shù)亩M制bit數(shù),用位/秒(Bit per Second)表示,或寫成bps。如串行通信中的數(shù)據(jù)傳輸波特率為128bps,意為每秒鐘傳輸128個bit,合計16個字節(jié),傳輸一個比特所需要的時間為:1/128bps=0.0078秒=7.8毫秒。傳輸一個字節(jié)的時間為:7.88=62.4毫秒。在異步通信中,常見的波特率通常有1200、2400、4800、9600等,其單位都是bps。高速的可以達到19200bps。異步通信中允許收發(fā)端的時鐘(波特率)誤差不超過5%。6.1.4 6.1.4 同步通信與異步通信同步通信與異步

9、通信6 6.1 .1串行通信基礎串行通信基礎由于串行通信方式能實現(xiàn)較遠距離的數(shù)據(jù)傳輸,因此在遠距離控制時或在工業(yè)控制現(xiàn)場通常使用串行通信方式來傳輸數(shù)據(jù)。由于遠距離數(shù)據(jù)傳輸時普通的TTL或CMOS電平無法滿足工業(yè)現(xiàn)場的干擾和各種電氣性能,因此不能用于直接進行遠距離的數(shù)據(jù)傳輸。國際電氣工業(yè)協(xié)會EIA推出了RS-232、RS485等接口標準。6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎1 1、RS-232RS-232接口接口RS-232C是1969年電子工業(yè)協(xié)會(EIA)制定的在數(shù)據(jù)終端設備DTE和數(shù)據(jù)通訊設備(DCE)之間的串行的二進制數(shù)據(jù)交

10、換的接口,全稱是EIA-RS-232-C協(xié)議,實際中常稱RS-232,也稱EIA-232,最初采用DB-25作為連接器,包含雙通道,但是現(xiàn)在也有采用DB-9的單通道接口連接,其端口定義見表6-1所示。在實際中,DB9由于結構簡單,僅需要3根線就可以完成全雙工通信,所以在實際中使用比較多,應用廣泛。6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎1 1、RS-232RS-232接口接口6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎1 1、RS-232RS-232接口接口6.1.4 6.1.4

11、 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎1 1、RS-232RS-232接口接口RS-232采用負邏輯電平,用負電壓表示數(shù)字信號邏輯1,用正電平表示數(shù)字信號的邏輯0。規(guī)定邏輯1的電壓范圍為-5-15V,邏輯0的電壓范圍為+5V-+15V。RS-232-C標準規(guī)定,驅動器允許有2500pF的電容負載,通信距離將受此電容限制,例如,采用150pF/m的通信電纜時,最大通信距離為15m;若每米電纜的電容量減小,通信距離可以增加。傳輸距離短的另一原因是RS-232屬單端信號傳送,存在共地噪聲和不能抑制共模干擾等問題,因此一般用于20m以內(nèi)的通信。6.1.4 6.1

12、.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎2. RS-4852. RS-485接口規(guī)范接口規(guī)范 RS-485為彌補RS-232之不足而提出的。為改進RS-232通信距離短、速率低的缺點,RS-485定義了一種平衡通信接口,將傳輸速率提高到10Mbps,傳輸距離延長到4000英尺(速率低于100kbps時),并允許在一條平衡線上連接最多10個接收器。RS-485是一種單機發(fā)送、多機接收的單向、平衡傳輸規(guī)范,為擴展應用范圍,隨后又為其增加了多點、雙向通信能力,即允許多個發(fā)送器連接到同一條總線上,同時增加了發(fā)送器的驅動能力和沖突保護特性,擴展了總線共模范圍,其

13、特點可以總結為: 6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎2. RS-4852. RS-485接口規(guī)范接口規(guī)范(1)差分平衡偉輸; (2)多點通信; (3)驅動器輸出電壓(帶載):1.5V; (4)接收器輸入門限:200mV; (5)-7V至+12V總線共模范圍; (6)最大輸入電流:1.0mA/-0.8mA(7)最大總線負載:32個單位負載(UL); (8)最大傳輸速率:10Mbps; (9)最大電纜長度:4000英尺(3000米)。6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎

14、2. RS-4852. RS-485接口規(guī)范接口規(guī)范 RS-485接口是采用平衡驅動器和差分接收器的組合,抗共模干能力增強,即抗噪聲干擾性好。RS-485的電氣特性是用傳輸線之間的電壓差表示邏輯信號,邏輯“1”以兩線間的電壓差為+(26) V表示;邏輯“0”以兩線間的電壓差為-(26)V表示。RS-232-C接口在總線上只允許連接1個收發(fā)器, 即一對一通信方式。而RS-485接口在總線上是允許不只一個收發(fā)器存在,總線允許最多128個收發(fā)器存在,具備多站能力,基于RS-485接口可以方便的組建設備網(wǎng)絡,實現(xiàn)組網(wǎng)傳輸或組網(wǎng)控制。6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1

15、 .1串行通信基礎串行通信基礎2. RS-4852. RS-485接口規(guī)范接口規(guī)范 由于RS-485接口具有良好的抗噪聲干擾性,使之成為遠傳輸距離、多機通信的首選串行接口。RS-485允許總線存在多主機負載,其僅僅是一個電氣接口規(guī)范,只規(guī)定了平衡驅動器和接收器的物理層電特性,而對于保證數(shù)據(jù)可靠傳輸和通信的連接層、應用層等協(xié)議在RS-485中并沒有定義,需要用戶在實際使用中予以定義。Modbus、RTU等是基于RS-485物理鏈路的常見的通信協(xié)議。6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎 3 3串行通信接口電平轉換串行通信接口電平轉換

16、(1 1)TTL/CMOSTTL/CMOS電平與電平與RS-232RS-232電平轉換電平轉換TTL/CMOS電平采用的是0-5V的正邏輯,即0V表示邏輯0,5V表示邏輯1,而RS-232采用的負邏輯,邏輯0用+5V-+15V表示,邏輯1用-5V-15V表示。在TTL/CMOS的單片機系統(tǒng)中,如果使用RS-232串行口進行通信,必須進行電平轉換。MAX232是一種常見的RS-232電平電平轉換芯片,單芯片解決全雙工通信方案,單電源工作,外圍僅需少數(shù)幾個電容器即可,其邏輯圖和應用原理見圖6-7、6-8所示。6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串

17、行通信基礎 3 3串行通信接口電平轉換串行通信接口電平轉換 (1 1)TTL/CMOSTTL/CMOS電平與電平與RS-232RS-232電平轉換電平轉換6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎 3 3串行通信接口電平轉換串行通信接口電平轉換 (2 2)TTL/CMOSTTL/CMOS電平與電平與RS-485RS-485電平轉換電平轉換RS-485電平是平衡差分傳輸,而TTL/CMOS是單極性電平,需要經(jīng)過電平轉換才能進行信號傳輸。常見的RS-485電平轉換芯片有MAX485、MAX487等。MAX485為8個腳的芯片,支持半雙工通信

18、,RO為數(shù)據(jù)接收引腳,RI為數(shù)據(jù)發(fā)送引腳,RE#為接收使能端,DE為發(fā)送使能端。見圖6-9所示。6.1.4 6.1.4 同步通信與異步通信同步通信與異步通信6 6.1 .1串行通信基礎串行通信基礎 3 3串行通信接口電平轉換串行通信接口電平轉換 (2 2)TTL/CMOSTTL/CMOS電平與電平與RS-485RS-485電平轉換電平轉換6.2.1 6.2.1 串行通信接口特點串行通信接口特點6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口(1)全雙工通信操作,獨立收發(fā)單元,2級FIFO;(2)支持異步或同步通信方式;(3)具有高精度的專用波特率發(fā)生器;(4

19、)數(shù)據(jù)位長度支持5、6、7、 8、9位數(shù)據(jù),(5)硬件奇偶判決功能;(6)具有數(shù)據(jù)過速檢測功能;(7)具有幀錯誤檢測功能;(8)三個獨立的中斷源:發(fā)送結束中斷, 發(fā)送數(shù)據(jù)寄存器空中斷,以及接收結束中斷;(9)支持多處理器通訊模式。 6.2.2 6.2.2 串行通信接口組成串行通信接口組成6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口ATmega16串行接口主要由數(shù)據(jù)寄存器、控制寄存器、波特率發(fā)生器、發(fā)送移位寄存器、接收移位寄存器、奇偶校驗電路等電路組成,見圖6-10。 6.2.2 6.2.2 串行通信接口組成串行通信接口組成6 6. .2 ATmega16

20、2 ATmega16異步串行通信接口異步串行通信接口(1 1)數(shù)據(jù)寄存器)數(shù)據(jù)寄存器UDRUDR UDR數(shù)據(jù)寄存器分為接收數(shù)據(jù)寄存器和數(shù)據(jù)發(fā)送寄存器。(2 2)控制寄存器)控制寄存器分別為UCSRA、UCSRB、UCSRC,通過對控制寄存器的編程,以實現(xiàn)對串行通信口的工作模式、波特率、數(shù)據(jù)格式等進行設置。(3 3)波特率發(fā)生器)波特率發(fā)生器ATmega16具有專用的波特率發(fā)生器器件,其工作時鐘來源于系統(tǒng)時鐘fosc,經(jīng)過如圖6-11所示的時鐘電路產(chǎn)生數(shù)據(jù)收、發(fā)電路所需要的時鐘信號。 6.2.2 6.2.2 串行通信接口組成串行通信接口組成6 6. .2 ATmega162 ATmega16異步

21、串行通信接口異步串行通信接口 6.2.2 6.2.2 串行通信接口組成串行通信接口組成6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口 ATmega16的串行口通過編程可以實現(xiàn)4 種時鐘模式,分別為正常的異步模式、倍速異步模式、主機同步模式、從機同步模式。 通過對控制寄存器的相關位進行編程,可以設定串行口工作在全雙工異步模式或移位寄存器的同步模式。無論是串行口工作與同步模式或異步模式,其波特率均可是可以編程的。 在異步模式中,波特率具有倍增功能,在不改變?nèi)魏螀?shù)、數(shù)據(jù)前提下,通過設置相關位可以使波特率時鐘提高1倍,以應用于更高通信速度的場合。 在同步模式中,

22、同步時鐘源可以編程選擇來自于主機或來自于從機。 6.2.2 6.2.2 串行通信接口組成串行通信接口組成6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口(4 4)發(fā)送移位寄存器)發(fā)送移位寄存器 發(fā)送移位寄存器的功能是將發(fā)送的數(shù)據(jù)進行轉換,將發(fā)送數(shù)據(jù)寄存器UDR中數(shù)據(jù)在時鐘信號的作用進行移位,每一個時鐘數(shù)據(jù)向前移一位,最后將UDR中的并行數(shù)據(jù)變成一串串行數(shù)據(jù)從數(shù)據(jù)發(fā)送引腳TXD發(fā)送出去。(5 5)接收移位寄存器)接收移位寄存器 接收移位寄存器的功能是將接收到的串行數(shù)據(jù)進行轉換,在時鐘信號作用下,數(shù)據(jù)接收引腳RXD每收到一個數(shù)據(jù)移位寄存器向前移動移位,實現(xiàn)將接收

23、的串行數(shù)據(jù)轉變成并行數(shù)據(jù)的功能,收到的數(shù)據(jù)被放入數(shù)據(jù)接收寄存器UDR中。 6.2.2 6.2.2 串行通信接口組成串行通信接口組成6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口(6 6)奇偶校驗電路)奇偶校驗電路 奇偶校驗電路是完成對收發(fā)數(shù)據(jù)的奇偶校驗。奇偶校驗是檢測數(shù)據(jù)通信出錯的常用手段,簡單易于實現(xiàn)。當發(fā)送數(shù)據(jù)寄存器UDR中二進制數(shù)1的個數(shù)為奇數(shù)個時,則將相應的奇偶標志位置1,連同數(shù)據(jù)位、啟停位構成數(shù)據(jù)幀一并發(fā)送。接收端接收到以后,如果接收寄存器中UDR二進制數(shù)1的個數(shù)為奇數(shù)個,則奇偶標志位不變,依舊為1。因此通過判別對比收發(fā)端奇偶標志可以快速檢測數(shù)據(jù)

24、在傳輸過程中是否出錯,這種規(guī)則稱為“寄校驗”,反之如果1的個數(shù)為偶數(shù)個則將奇偶標志置1的稱為“偶校驗”,在控制寄存器中可以編程選擇“奇校驗”還是“偶校驗”。6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口1 1UDRUDR數(shù)據(jù)寄存器數(shù)據(jù)寄存器接收器和發(fā)送器使用的寄存器都是UDR寄存器,但是僅名字相同,他們是兩個完全獨立的數(shù)據(jù)寄存器。當對UDR寫操作時數(shù)據(jù)通過TXB發(fā)送出去,當執(zhí)行UDR讀操作時將RXB接收的數(shù)據(jù)讀出來。 當數(shù)據(jù)長度不足8bit時如5、6、7 bit,未被使用的數(shù)據(jù)位被發(fā)送器忽略,而接

25、收器則將它們直接置為0。6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口1 1UDRUDR數(shù)據(jù)寄存器數(shù)據(jù)寄存器 對UDR執(zhí)行寫操作前應該先檢查UDR是否為空,即UDR里面的數(shù)據(jù)是否被發(fā)送結束,同訪問控制寄存器的標志位實現(xiàn)。若寫UDR時其不為空即數(shù)據(jù)發(fā)送還未結束,新寫入的數(shù)據(jù)無效。 接收緩沖器UDR包含一個兩級FIFO,接收的數(shù)據(jù)被置于FIFO中。讀UDR會影響FIFO的狀態(tài),但FIFO空時同樣會在控制寄存器中產(chǎn)生相應標志位。6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2

26、ATmega162 ATmega16異步串行通信接口異步串行通信接口2 2波特率寄存器波特率寄存器UBRRUBRR 波特率發(fā)生器工作寄存器UBRR中的內(nèi)容決定其產(chǎn)生的波特率值大小。波特率與UBRR寄存器取值關系如表6-2所示6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口2 2波特率寄存器波特率寄存器UBRRUBRR6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口2 2波特率寄存器波特率寄存器UBRRUB

27、RR 表中fosc表示系統(tǒng)晶振頻率大小,B為通信波特率,UBRR為波特率寄存器。常用的波特率有1200bps、2400bps等,在已知波特率和fosc前提下通過應用表6-x中的公式可以計算出UBRR寄存器取值。 UBRR寄存器為16位寄存器,分成高位UBRRH和低位UBRRL兩部分。在ICCAVR編譯器使用C語言編程時,可以將一個16位的數(shù)直接寫入UBRR寄存器即可。但需要注意的是,UBRR的取值必須在0-4095之間。6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3控制和狀態(tài)寄存器控制和狀態(tài)

28、寄存器 控制和狀態(tài)寄存器是用來對串行口進行編程以及保存串行口的工作各種工作狀態(tài),在使用時至關重要。ATmega16有三個控制與狀態(tài)寄存器,分別為UCSRA、UCSRB、UCSRC。6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3控制和狀態(tài)寄存器控制和狀態(tài)寄存器 RXCRXC位(位(Bit7Bit7): :接收結束標志位。 接收器已成功接收一個數(shù)據(jù)并置于接收緩沖器中,此時RXC 置位。RXC 標志可用來產(chǎn)生接收結束中斷,執(zhí)行完程序后自動清零。對該位寫1清零會導致一次重復接收錯誤。TXCTXC位(

29、位(Bit6Bit6): :發(fā)送結束標志位。發(fā)送緩沖器 (UDR)中的數(shù)據(jù)發(fā)送完成UDR為空,此時TXC 置位,TXC 標志可用來產(chǎn)生發(fā)送結束中斷。執(zhí)行完程序后該標志位自動清零,對該位寫1清零會導致一次重復發(fā)送錯誤。UDREUDRE位(位(Bit5Bit5): : 數(shù)據(jù)寄存器空標志位。(1 1)控制與狀態(tài)寄存器)控制與狀態(tài)寄存器UCSRAUCSRA6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3控制和狀態(tài)寄存器控制和狀態(tài)寄存器 FEFE(bit4bit4): : 幀錯誤位。DORDOR( Bi

30、t 3 Bit 3): : 數(shù)據(jù)溢出標志位。UPEUPE(Bit 2Bit 2): : 奇偶校驗錯誤標志位。U2XU2X(Bit 1Bit 1): : 波特率倍增控制位。MPCMMPCM( Bit 0 Bit 0): : 多處理器通信模式標志位。 幀錯誤位(FE)、數(shù)據(jù)溢出標志位(DOR)、 奇偶校驗錯誤標志位(UPE)與UDR中的內(nèi)容有關,當對UDR進行讀寫操作時會影響這些標志位,因此讀UDR數(shù)據(jù)之前應先將這三個標志位的內(nèi)容讀取出來。這三個標志位不會觸發(fā)CPU產(chǎn)生中斷。(1 1)控制與狀態(tài)寄存器)控制與狀態(tài)寄存器UCSRAUCSRA6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器

31、6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3控制和狀態(tài)寄存器控制和狀態(tài)寄存器 RXCIERXCIE位(位( Bit 7 Bit 7): : 接收結束中斷使能位。TXCIETXCIE位(位(Bit6Bit6): : 發(fā)送結束中斷使能位。UDRIEUDRIE位(位(Bit 5Bit 5): :串行口數(shù)據(jù)寄存器空中斷使能。RXENRXEN位(位(Bit4Bit4): : 接收使能位。置位后啟動USART 接收器。PD0的I/O口功能不可用,將作為RXD數(shù)據(jù)接收專用引腳使用。該位清零禁止接收器。TXENTXEN位(位( Bit 3 Bit 3): : 發(fā)送

32、使能位。UCSZ2UCSZ2位(位( Bit 2 Bit 2): :與UCSRC中的UCSZ0、 UCSZ1位一同使用。(2 2)控制與狀態(tài)寄存器)控制與狀態(tài)寄存器UCSRBUCSRB6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3控制和狀態(tài)寄存器控制和狀態(tài)寄存器 RXB8RXB8位(位( Bit 1 Bit 1): : 接收數(shù)據(jù)位 8。RXB8與UDR組成9 位串行數(shù)據(jù)幀,接收到的第9位數(shù)據(jù)被置于RXB8中。在對9位數(shù)據(jù)進行讀取之前應先讀RXB8的數(shù)據(jù)位,再讀UDR中的低位數(shù)據(jù)。TXB8TX

33、B8位(位( Bit 0 Bit 0): : 發(fā)送數(shù)據(jù)位8。TXB8與UDR組成9 位串行數(shù)據(jù)幀,發(fā)送的第9位數(shù)據(jù)被置于TXB8中。在對9位數(shù)據(jù)進行讀取發(fā)送前應先將第9位數(shù)據(jù)寫入TXB8中,再將余下數(shù)據(jù)寫入UDR。(2 2)控制與狀態(tài)寄存器)控制與狀態(tài)寄存器UCSRBUCSRB6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3控制和狀態(tài)寄存器控制和狀態(tài)寄存器 UCSRC寄存器與UBRRH寄存器共用相同的I/O地址。對該寄存器的訪問, 需要注意其數(shù)據(jù)取值。URSELURSEL位(位( Bit 7

34、Bit 7): : 寄存器選擇位。 通過該位選擇訪問UCSRC 寄存器或UBRRH 寄存器。URSEL位為1時對UCSRC進行讀或寫操作,因此寫入UCSRC的值應該大于等于80H(0 x80)。而URSEL位為0時對波特率寄存器的高位UBRRH進行操作,寫入UBR寄存器數(shù)不能超過4095。UMSELUMSEL位(位( Bit 6 Bit 6): : UMSEL=0,異步模式,UMSEL=1同步模式。(3 3)控制與狀態(tài)寄存器)控制與狀態(tài)寄存器UCSRUCSRC C6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步

35、串行通信接口3 3控制和狀態(tài)寄存器控制和狀態(tài)寄存器 UPMUPM位(位(Bit 5:4Bit 5:4): : 奇偶校驗模式位,校驗方式如表6-3所示。(2 2)控制與狀態(tài)寄存器)控制與狀態(tài)寄存器UCSRBUCSRB6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3控制和狀態(tài)寄存器控制和狀態(tài)寄存器 USBSUSBS位(位( Bit 3 Bit 3): : 停止位選擇位,USBS=0,1位停止位,USBS=1選擇2位停止位。UCSZUCSZ位位: : 數(shù)據(jù)字符長度選擇位,分別為UCZS0、UCZS1

36、、UCZS2三個位,用來設定串行通信數(shù)據(jù)字符的長度,見表6-4所示。(3 3)控制與狀態(tài)寄存器)控制與狀態(tài)寄存器UCSRUCSRC C6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3控制和狀態(tài)寄存器控制和狀態(tài)寄存器 (2 2)控制與狀態(tài)寄存器)控制與狀態(tài)寄存器UCSRBUCSRB6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口【例6-1】按要求完成串行通信口寄存器的初始化操作,系統(tǒng)時鐘為8M。 (1

37、)設置同步通信模式,波特率30000bps; (2)設置8位異步通信模式,波特率設為2400bps;解:(1)UCSRA寄存器無需編程,UCSRB寄存器中的RXEN、TXEN位置位開啟接收和發(fā)送器,UCSRC寄存器中的URSEL位置位選擇對UCSRC寄存器操作,UMSEL位置位選則同步模式,計算波特率寄存器初始值:編程如下:6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口(2)UCSRA寄存器無需編程,UCSRB寄存器中的RXEN、TXEN位置位開啟接收和發(fā)送器,UCSRC寄存器中的URSEL位置位

38、選擇對UCSRC寄存器操作,UCSZ0、UCSZ1置位選擇8位數(shù)據(jù)模式,波特率不增倍的寄存器值計算公式如下:編程如下:6.2.3 6.2.3 串行通信接口寄存器串行通信接口寄存器6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口 思考:設置串行通信參數(shù)為數(shù)據(jù)位為9位,異步通信模式,波特率設為9600bps,1位停止位,無奇偶校驗位,使用中斷方式完成數(shù)據(jù)收發(fā),該如何對寄存器編程?6.2.6.2.4 4 串行通信接口使用串行通信接口使用6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口 void USART_Init( unsig

39、ned int baud )/* 設置波特率設置波特率*/UBRRH = (unsigned char)(baud8);UBRRL = (unsigned char)baud;/* 接收器與發(fā)送器使能接收器與發(fā)送器使能*/UCSRB = (1RXEN)|(1TXEN);/* 設置幀格式設置幀格式: 8 個數(shù)據(jù)位個數(shù)據(jù)位, 2 個停止位個停止位*/UCSRC = (1URSEL)|(1USBS)|(3UCSZ0);1 1 初始化初始化6.2.6.2.4 4 串行通信接口使用串行通信接口使用6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口1 1 發(fā)送數(shù)據(jù)(發(fā)送數(shù)

40、據(jù)(8 8位)位) void USART_Transmit( unsigned char data )/* 等待發(fā)送緩沖器為空等待發(fā)送緩沖器為空 */while ( !( UCSRA & (1UDRE) );/* 將數(shù)據(jù)放入緩沖器,發(fā)送數(shù)據(jù)將數(shù)據(jù)放入緩沖器,發(fā)送數(shù)據(jù) */UDR = data;6.2.6.2.4 4 串行通信接口使用串行通信接口使用6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口2 2 發(fā)送數(shù)據(jù)(字符串)發(fā)送數(shù)據(jù)(字符串)void USART_Transmit_String( unsigned char *data ) while(*data

41、!=0) /*檢查數(shù)組結束標志檢查數(shù)組結束標志*/ while ( !( UCSR0A & (1UDRE0) ) /* 檢查發(fā)送檢查發(fā)送FIFO空空 */ ; UDR0 =*data; data+; return;6.2.6.2.4 4 串行通信接口使用串行通信接口使用6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3 接收數(shù)據(jù)(接收數(shù)據(jù)(8 8位)位)unsigned char USART_Receive( void )/* 等待接收數(shù)據(jù)等待接收數(shù)據(jù)*/while ( !(UCSRA & (1RXC) );/* 從緩沖器中獲取并返回數(shù)據(jù)從緩沖器中獲取并

42、返回數(shù)據(jù)*/return UDR;6.2.6.2.4 4 串行通信接口使用串行通信接口使用6 6. .2 ATmega162 ATmega16異步串行通信接口異步串行通信接口3 3 接收數(shù)據(jù)(接收數(shù)據(jù)(8 8位)位)unsigned int USART_Receive( void ) unsigned char status, resh, resl;/* 等待接收數(shù)據(jù)等待接收數(shù)據(jù)*/while ( !(UCSRA & (1RXC) ) ;/* 從緩沖器中獲得狀態(tài)、第從緩沖器中獲得狀態(tài)、第9 位及數(shù)據(jù)位及數(shù)據(jù)*/status = UCSRA;resh = UCSRB;resl = UDR;/*

43、如果出錯,返回如果出錯,返回-1 */if ( status & (1FE)|(1DOR)|(1 1) & 0 x01;return (resh 8) | resl);6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信 串行傳輸具有連接簡單、使用方便的特點,因此在實際中被廣泛使用。使用串行接口的器件和芯片可以節(jié)約單片機的I/O口,降低系統(tǒng)復雜性,使系統(tǒng)設計更為簡潔。而包括Atmega16在內(nèi)的單片機,其串行通信口的數(shù)量有限,因此使用單片機的I/O來模擬串行口的工作過程是一種常用辦法。使用I/O口可以方便的擴展同步串行通信、異步串行通信等。由于同步通信具有獨立的同步時鐘線,因此

44、使用I/O口模擬操作簡單。而異步串行通信沒有獨立的同步時鐘線,需要通過對協(xié)議的解碼提取時鐘信號后再提取數(shù)據(jù),因此其收發(fā)均要復雜。6.3.1 6.3.1 單片機模擬串行口輸出單片機模擬串行口輸出6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信1. 1. 移位寄存器移位寄存器74HC59574HC59574HC595是常見的74系列的8位移位數(shù)據(jù)寄存器。輸入的是串行數(shù)據(jù),輸出的是并行數(shù)據(jù)。74HC595還帶鎖存功能,8個輸出端的數(shù)據(jù)可以同步更新,與單片機連接只需要3個腳即可,單片機3個I/O口引腳接到74HC59之后就可以輸出擴展出8個I/O口。當更多的74HC595芯片級聯(lián)以

45、后可以擴展更多的I/O口出來,以滿足需要I/O控制口比較多的場合,比如LED點陣屏驅動等。6.3.1 6.3.1 單片機模擬串行口輸出單片機模擬串行口輸出6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信1. 1. 移位寄存器移位寄存器74HC59574HC5956.3.1 6.3.1 單片機模擬串行口輸出單片機模擬串行口輸出6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信1. 1. 移位寄存器移位寄存器74HC59574HC595Q0-Q7:并行數(shù)據(jù)輸出,Q7S用于多片74HC595芯片的級聯(lián),OE#:為芯片使能端,OE#必須為低電平有效。MR#:為芯片

46、復位引腳。 DS、SHCP、STCP三個引腳為74HC595的串行數(shù)據(jù)輸入引腳,他們之間的時序關系如圖6-13所示。 DS為串行數(shù)據(jù)輸入引腳,SHCP為同步移位時鐘,DS在每個SHCP的上升沿期間將數(shù)據(jù)移入芯片。當8個數(shù)據(jù)移位完成后數(shù)據(jù)在STCP的上升沿作用下同步輸出到Q0-Q7輸?shù)揭_6.3.1 6.3.1 單片機模擬串行口輸出單片機模擬串行口輸出6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信2. 2. 使用單片機使用單片機I/OI/O口驅動口驅動74HC59574HC595單片機可以使用3個I/O口分別模擬DS、SHCP、STCP的工作時序即可將一個字節(jié)數(shù)據(jù)通過串口輸

47、出到達74HC595芯片內(nèi)部,并由Q0-Q7引腳輸出。在CPU內(nèi)部,數(shù)據(jù)是并行的,將并行數(shù)據(jù)變成串行數(shù)據(jù)并送DS端使用移位運算符實現(xiàn)。將欲通過串行口發(fā)送的數(shù)據(jù)存放在變量x中,將x與0 x80進行按位與運算,若結果為0 x80則發(fā)送數(shù)據(jù)1,從DS輸出高電平,并控制SHCP端產(chǎn)生一個上升沿移位時鐘將該位數(shù)據(jù)移位到595,將x中數(shù)據(jù)向左移動1位并重復剛才的過程,直到8位數(shù)據(jù)發(fā)送完畢為止。這種方法是先發(fā)送數(shù)據(jù)的最高位(MSB),最后才發(fā)送數(shù)據(jù)的最低位(LSB)。此時的數(shù)據(jù)僅保存在移位寄存器中,并未輸?shù)綌?shù)據(jù)引腳Q0-Q7端,從STCP端產(chǎn)生一個上升沿脈沖將數(shù)據(jù)從移位寄存器輸?shù)絈0-Q7引腳上即可。6.3

48、.1 6.3.1 單片機模擬串行口輸出單片機模擬串行口輸出6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信2. 2. 使用單片機使用單片機I/OI/O口驅動口驅動74HC59574HC595【例6-2】使用1片74HC595擴展8個I/O輸出口,驅動8個發(fā)光二極管。解:設PA0接SHCP端,PA1接DS端,PA2接STCP端,故PA0、PA1、PA2設置為輸出口,在proteus中繪制原理圖如圖6-146.3.1 6.3.1 單片機模擬串行口輸出單片機模擬串行口輸出6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信2. 2. 使用單片機使用單片機I/OI/

49、O口驅動口驅動74HC59574HC595編寫程序如下6.3.1 6.3.1 單片機模擬串行口輸出單片機模擬串行口輸出6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信6.3.2 6.3.2 單片機模擬串行口輸入單片機模擬串行口輸入6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信 使用串行口讀入外部器件或芯片數(shù)據(jù)可以節(jié)約很多I/O引腳。在理解使用單片機模擬串行口輸出的基礎上,對串行口得輸入模擬就變得相對容易。1. TLC25511. TLC2551串行串行A/DA/D采樣芯片采樣芯片TLC2551是一片單芯片12bit轉換精度A/D采樣芯片,內(nèi)部集成了采樣

50、保持器,如圖6-15所示。轉換的數(shù)據(jù)結果通過3條串行總線輸出給主機。TLC2551只有8個引腳,其中AIN為數(shù)模信號輸入引腳,VDD為單5V供電電源端,VREF為外接參考電壓,F(xiàn)S為與幀同步控制引腳,多芯片級聯(lián)時使用,單芯片時該引腳接高電平。6.3.2 6.3.2 單片機模擬串行口輸入單片機模擬串行口輸入6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信1. TLC25511. TLC2551串行串行A/DA/D采樣芯片采樣芯片SCLK、CS#、SDO為三總線串行通信接口,SCLK為移位時鐘,CS#為芯片片選端,SDO為數(shù)據(jù)輸出端,三者之間時序見圖6-16。6.3.2 6.3

51、.2 單片機模擬串行口輸入單片機模擬串行口輸入6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信1. TLC25511. TLC2551串行串行A/DA/D采樣芯片采樣芯片轉換結束的數(shù)字量結果出現(xiàn)SDO端,高位在前,低位在后,對應SCLK的下降沿期間,即每一個SCLK脈沖出現(xiàn)一個數(shù)據(jù)位,12個脈沖后此次轉換結果全國輸出完畢。對TLC25551進行操作只能在CS#為低電平期間進行。6.3.2 6.3.2 單片機模擬串行口輸入單片機模擬串行口輸入6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信2. 2. 使用單片機使用單片機I/OI/O讀取讀取TLC2551T

52、LC2551轉換數(shù)據(jù)轉換數(shù)據(jù) 圖6-16所示的時序圖可知,在CS#為低電平期間讀取TLC2551的結果,使用單片機的I/O模擬時序,假設讀取的數(shù)據(jù)存放在整型變量x中,在讀取SDO數(shù)據(jù)前,先從SCLK產(chǎn)生一個下降沿信號,使數(shù)據(jù)位出現(xiàn)在SDO線上。將SDO引腳讀入單片機,若得其為高電平則將變量x的最低端并上數(shù)值1,否則在最低位與上數(shù)字0,并將變量x向左移動1位,完成一位數(shù)據(jù)的讀取,重復12次后TLC2551的轉換結果便被讀入變量x中。6.3.2 6.3.2 單片機模擬串行口輸入單片機模擬串行口輸入6.3 6.3 單片機單片機I/OI/O口模擬串行通信口模擬串行通信2. 2. 使用單片機使用單片機I/OI/O讀取讀取TLC2551TLC2551轉換數(shù)據(jù)轉換數(shù)據(jù)【例6-3】在Atmega16單片機系統(tǒng)中擴展一片12bit的串口A/D轉換芯片TLC2551,將其結果讀入并保存在變量x中。解:PA0、PA1、PA2三個引腳與TLC2551的CE#、SDO、SCLK三個引腳相連,PA1設為輸入口,其他設為輸出口,編程如下6.4.1 6.4.1 雙機串行通信雙機串行通信6.4 6.4 項目設計項目設計1. 1. 項目設計要求項目設計要求 兩個CPU之間進行通信,采用全雙工異步通信方式實現(xiàn),雙機通信

溫馨提示

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

評論

0/150

提交評論