<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機串行口的使用與“藍牙”電測系統

單片機串行口的使用與“藍牙”電測系統

作者: 時(shí)間:2011-02-21 來(lái)源:網(wǎng)絡(luò ) 收藏
隨著(zhù)數字化的進(jìn)一步普及,實(shí)驗設備數字化也勢在必行。本期教程以實(shí)驗、示教用無(wú)線(xiàn)電測系統為例,講解的串行口的使用及有關(guān)設置。

一、系統構成與功能

  本系統由測量發(fā)射和接收顯示兩部分構成。測量發(fā)射部分完成對模擬電量的采樣和模數轉換,并將轉換后的數據通過(guò)串行口送出,調制無(wú)線(xiàn)發(fā)射電路將其發(fā)射出去。接收部分將無(wú)線(xiàn)信息接收下來(lái),經(jīng)放大整形后將串行數據信號送到接收部分的串行口,按約定的格式將數據信息成功接收后,經(jīng)顯示代碼轉換送LED顯示出來(lái),其測量和顯示部分是分離的。

二、電量測量及數據發(fā)送原理

  測量發(fā)送電原理見(jiàn)圖1。被測模擬量自IC1(AT89C2051)的P1.1輸入。系統完成測量后將數據存于累加器A中,然后將A中的數據送串行口,通過(guò)P3.1(TXD)輸出,經(jīng)過(guò)調制無(wú)線(xiàn)發(fā)射電路,將數據信息發(fā)射出去。

  測量過(guò)程中的模數轉換,我們在上一期已經(jīng)講過(guò)。無(wú)線(xiàn)發(fā)射電路及調制原理,我們可以從其他書(shū)上或以其他方式學(xué)到,這里不再贅述。以下著(zhù)重講一下單片機串行口的設置和串行口數據輸出格式。

  AT89C51和AT89C2051內部皆設有性能優(yōu)良的可編程全雙工串行通訊接口,簡(jiǎn)稱(chēng)串行口。利用此串行口發(fā)送和接收數據是十分方便的。用于發(fā)送和接收數據的寄存器有兩個(gè),分別是發(fā)送SBUF和接收SBUF。這兩個(gè)寄存器使用同一個(gè)地址99H,但收發(fā)并不會(huì )沖突,因為收發(fā)指令是可以將其區別的。當CPU執行MOV SBUF,A時(shí),累加器A中的數據便寫(xiě)入發(fā)送SBUF中;而當執行 MOV A,SBUF時(shí),CPU就將接收SBUF中的數據讀入累加器A中。當將需要發(fā)送的數據寫(xiě)入SBUF后,串行口發(fā)送控制器便自動(dòng)按一定的格式和波特率將數據從P3.1串行輸出。最常用的串行輸出格式是11位格式。這種格式規定,串行口輸出的完整的數據幀由11位二進(jìn)制數據構成。幀結構示意圖見(jiàn)圖2(a)。開(kāi)始先發(fā)送1位數據 “0”作為發(fā)送數據的起始符,然后發(fā)送8位被發(fā)送字節的各個(gè)數據位,低位在前。也就是先發(fā)送D0,再依次發(fā)送D1、D2、D3、D4、D5、D6、D7,然后發(fā)送一個(gè)可以定義的特殊位,比如奇偶校驗位“P”或有其他意義的數據位。這個(gè)特殊位是整個(gè)數據幀的第10位。第10位發(fā)送完畢,接著(zhù)輸出1位數據“1”,作為數據幀的結束符。若以11位串行格式發(fā)送值為#87H的數據,P3.1輸出的方波見(jiàn)圖2(b)。此方波控制VT1的導通與截止,將數據調制到發(fā)射電路上。為了大家制作方便,本例將發(fā)射數據信息的紅外線(xiàn)發(fā)射電路接在串行口上,使紅外發(fā)光管VD1受VT1的調制。這樣,P3.1輸出的數據信息就被調制到紅外線(xiàn)載波上了。VT1集電極波形見(jiàn)圖2 (c),調制后的紅外光載波序列見(jiàn)圖2(d)。

  串行口的工作方式和工作狀態(tài)是可以通過(guò)程序來(lái)定義的。決定串行口輸出格式及工作狀態(tài)的寄存器是串行口控制寄存器SCON,其地址是98H。SCON各位定義見(jiàn)附表。

附表

D7 D6 D5 D4 D3 D2 D1 D0

SM0 SM1 SM2 REN TB8 RB8 TI RI

  SM0、SM1是串行口工作模式選擇位,對SM0、SM1進(jìn)行定義,可決定串行口的模式0(00)、模式1 (01)、模式2(10)、模式3(11)等4種工作模式。由于本例采用的是11位串行格式,選擇串行口工作于模式2,所以將SM0置“1”、 SM1置“0”即可。程序清單中0000H處的MOV SCON,#80H,就完成了上述設置。在串行口工作于模式2的簡(jiǎn)單通訊實(shí)驗中,SM2、TB8和RB8可不必關(guān)心。REN和RI分別是接收允許位和接收中斷標志位,其功用將在接收部分加以說(shuō)明。TI為發(fā)送中斷標志。當發(fā)送控制器發(fā)送完一幀數據后,自動(dòng)將TI置“1”。程序發(fā)現TI置“1”后,確認數據已經(jīng)發(fā)完,將TI清“0”后,去執行其他程序。見(jiàn)程序清單000AH處。而0005H至 0007H處暫放置3條空操作指令,大家可將調用測量子程序指令放于此,這樣,測量發(fā)射部分的程序就完整了。從程序中不難看出,0003H處MOV A,#87H,使累加器A中的數據為#87H。0008H處MOV SBUF,A是將A中的數據送入串行口發(fā)送寄存器。這樣,數據#87H就通過(guò)P3.1以11位格式輸出,推動(dòng)VT1,調制VD1將載有數據的紅外線(xiàn)載波串發(fā)射出去。只是程序清單中省去了真正的測量程序,而采用模擬測量的方式來(lái)發(fā)送數據。上述程序使串行口的波特率為93.75Kb/s,也就是說(shuō)每秒可發(fā)送93750位二進(jìn)制數據。此速率是較高的。以這樣的速率,調制紅外發(fā)射管進(jìn)行數據發(fā)送是可靠的,而調制一般的簡(jiǎn)易高頻振蕩電路顯得太高。所以,若要利用簡(jiǎn)易高頻振蕩電路來(lái)發(fā)送數據,采用P3.2或其他口線(xiàn)以其他的編碼規則進(jìn)行低速發(fā)送才可靠。而與“藍牙”芯片聯(lián)接,可另通過(guò)P3口的其他口線(xiàn),以I2C總線(xiàn)協(xié)議進(jìn)行通訊。

三、數據的接收及顯示原理

  接收顯示部分電原理見(jiàn)圖3(這里只給出紅外線(xiàn)接收的簡(jiǎn)單電路)。

  紅外線(xiàn)被VD1接收,經(jīng)VT5放大整形后將信號輸入至IC2(AT89C51)的P3.0 (RXD)。當未收到紅外線(xiàn)信息時(shí),VD1呈高阻態(tài),VT5截止,P3.0呈高電位。當有紅外線(xiàn)被VD1接收,VD1呈低阻態(tài),VT5導通,P3.0被拉至低電位。當VD1接收到值為#87H的完整數據幀后,VT5的集電極輸出波形見(jiàn)圖2(b)。由于IC2串行口具備自動(dòng)接收的功能,所以,當程序允許串行口接收時(shí),接收控制器就會(huì )不間斷檢測P3.0 的電位,發(fā)現P3.0低跳后,立刻按設定的接收格式以一定的波特率進(jìn)行接收。當接收完畢時(shí),數據存于接收SUBF之中,然后置中斷標志,將SCON的RI位置“1”,而當程序發(fā)現RI置“1”后,即確認已接收完畢,清掉標志位并關(guān)閉接收控制器,將接收寄存器SUBF中的數據取出,調用數據處理和掃描顯示子程序,將數據送LED顯示出來(lái),這便完成了測量數據的接收和顯示任務(wù)。由于發(fā)送數據采用11位格式,所以,接收也要采用同一種格式,并采用相同的波特率。與發(fā)送部分相同的是,在接收程序清單0006H處也安放了一條MOV SCON,#80H指令,使SCON的SM0位置“1”,其他各位皆為“0”,這就使接收端CPUIC2的串行口工作于模式2,也就是11位格式。由于沒(méi)有進(jìn)行其他有關(guān)波特率的設置,接收部分的串行口的接收速率也是93.75Kb/s。SCON的第5位REN為接收允許位,由于在設置串行口工作模式的指令中已將此位寫(xiě)“0”,所以串行口接收被禁止。而程序清單中0009H處SETB REN,使REN位置“1”,接收被允許,這就使串行口呈自動(dòng)接收狀態(tài),對P3.0監測并自動(dòng)完成接收。當接收完畢并清除接收中斷標志RI后,程序應暫時(shí)關(guān)閉接收,去進(jìn)行數據處理和顯示的操作。程序清單中0012H處的CLR REN指令,將REN清“0”,串行口的接收功能被禁止。

  當接收被允許時(shí),串行口的接收控制器就能獨立工作。程序只關(guān)注接收中斷標志位即可。程序清單000BH處的JBC RI,0010和AJMP 000B指令,就使系統實(shí)現了接收等待和接收確認后,再轉去處理數據的功能。在接收程序的0014H處留有3個(gè)空操作字節,大家可以在這里安放一條數據處理和掃描顯示的子程序調用指令。清單中給出的程序,也能顯示出接收的數據。如果正確接收到數據#87H,直接將其送P0口,然后將P2口所有口線(xiàn)置高電位,VT1 至VT4就會(huì )全部導通。這樣,未經(jīng)譯碼的數據#87H就會(huì )將LED中的相應字段點(diǎn)亮。

  由于#87H,正是數字“7.”的顯示代碼,所以,運行上述程序,如正確接收到 #87H時(shí),LED1至LED4就會(huì )顯示出“7.7.7.7.”字樣。采用紅外線(xiàn)進(jìn)行無(wú)線(xiàn)發(fā)射和接收,便于進(jìn)行硬件的免調試實(shí)驗,從而方便大家進(jìn)行串行口的設置及發(fā)送接收數據等方面的編程練習。

  以上,通過(guò)簡(jiǎn)單的無(wú)線(xiàn)電測系統,闡述了單片機串行口設置和利用串行口進(jìn)行通訊的簡(jiǎn)單方法。實(shí)際上,為了實(shí)現通訊過(guò)程中數據傳送的可靠性和準確性,往往需要編制較復雜的程序作保障。而單片機內部也還有一些硬件資源可供開(kāi)發(fā)者使用,如奇偶校驗、波特率的進(jìn)一步設置等等,本文不作詳述。

  在實(shí)際應用的產(chǎn)品中,無(wú)線(xiàn)電測系統的模數轉換要采用專(zhuān)門(mén)的高精度轉換芯片,而無(wú)線(xiàn)發(fā)射和接收,不管是紅外線(xiàn)的還是電磁波的,性能也是比較優(yōu)良的。如果采用一般的高頻振蕩電路發(fā)射(如圖1中給出的高頻振蕩電路),采用一般的無(wú)線(xiàn)電磁波接收,其通訊波特率需低一些才更可靠。這時(shí),我們往往不利用串行口,而是采用一般I/O線(xiàn)按另外一種通訊協(xié)議和編碼方式來(lái)對其進(jìn)行調制。其原理可參考《無(wú)線(xiàn)電》2000年第12期《基于電網(wǎng)的載波數據傳送》一文中的有關(guān)敘述。而我們研制的無(wú)線(xiàn)電測系統,正在進(jìn)行與“藍牙”第一代芯片“BlueCore TM01”的聯(lián)接試驗,并正在進(jìn)行應用“藍牙”第二代芯片“BlueCoreTM02”和第三代芯片“BlueCore TM03”的設計。掌握了一定的單片機控制技術(shù),盡可能地運用最新的芯片,才能開(kāi)發(fā)出領(lǐng)先的產(chǎn)品。廣大電子愛(ài)好者,也應該注意這一點(diǎn)。而大家在進(jìn)行紅外線(xiàn)發(fā)射數據的試驗時(shí),可將圖1中虛線(xiàn)框出的部分去掉,整個(gè)電路就十分簡(jiǎn)單了。

四、程序清單

1. 模擬測量發(fā)射部分程序清單:

地址 機器碼 指令

0000 759880 MOV SCON,#80H ;

0003 7487 MOV A,#87H ;

0005 00 NOP ;

0006 00 NOP ;

0007 00 NOP ;

0008 F599 MOV SBUF, A ;

000A 109902 JBC TI,000F ;

000D 80FB AJMP 000A ;

000F 20B5FD JB P3.5,000F ;

0012 80EF AJMP 0003 ;

2. 模擬接收顯示部分程序清單:

地址 機器碼 指令

0000 75A000 MOV P2, #00H ;

0003 758000 MOV P0,#00H ;

0006 759880 MOV SCON,#80H ;

0009 D29C SETB REN ;

000B 109802 JBC RI,0010 ;

000E 80FB AJMP 000B ;

0010 E599 MOV A, SBUF ;

0012 C29C CLR REN ;

0014 00 NOP ;

0015 00 NOP ;

0016 00 NOP ;

0017 F580 MOV P0,A ;

0019 75A0FF MOV P2, # FFH ;

001C 7A18 MOV R2,# 18H ;

001E 7BFF MOV R3,# FFH ;

0020 7CFF MOV R4,# FFH ;

0022 DCFE DJNZ R4,0022 ;

0024 DBFA DJNZ R3,0020 ;

0026 DAF6 DJNZ R2 , 001E ;

0028 75A000 MOV P2 , #00H ;

002B 80DC AJMP 0009 ;

  至此,我們用了6講,結合實(shí)例由表及里地闡述了單片機的基本構造和基本原理,講解了部分常用指令。大家可以自己設計一些簡(jiǎn)單的控制電路,編制一些簡(jiǎn)單的控制程序進(jìn)行實(shí)驗和進(jìn)一步學(xué)習。掌握了電路設計和編程的基本方法之后,再參考一些有關(guān)的書(shū)籍,進(jìn)行一些較復雜電路的制作,就能夠較為熟練地完成一些可靠的控制電路的設計,直至開(kāi)發(fā)出實(shí)用的智能產(chǎn)品來(lái),達到應用單片機為社會(huì )創(chuàng )造效益的目的。

  編者按:從下一期開(kāi)始,我刊將開(kāi)始PIC 系列單片機基礎知識、應用實(shí)例等文章的刊載。如大家對單片機的相關(guān)文章有什么建議或意見(jiàn),歡迎來(lái)電來(lái)函與我編輯部聯(lián)系。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>