• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      通信速率可調(diào)的單片機多機通信系統(tǒng)研究

      2012-01-15 06:03:00鄭毛祥
      電子設(shè)計工程 2012年15期
      關(guān)鍵詞:波特率寄存器中斷

      鄭毛祥

      (武漢鐵路職業(yè)技術(shù)學(xué)院 湖北 武漢 430205)

      在單片機的串行異步通信中,實現(xiàn)波特率設(shè)置的方法有很多種,但是有些方法要么需要額外的硬件支持,要么實現(xiàn)算法過于復(fù)雜,占用單片機的大量資源,而且研究通信波特率高的情況比較多,但對如何適應(yīng)波特率較低的情況研究較少,這就大大降低單片機通信應(yīng)用范圍。文中研究并實現(xiàn)了一種簡單實用的方法,不需要額外的硬件支持,對單片機的波特率有效設(shè)置的方法,并且軟件開銷也非常小。

      MCS-51串行通信接口可以作通用異步接收和發(fā)送器(UART)使用,也可以作同步移位寄存器用。在異步通信中,傳送的數(shù)據(jù)以幀的形式一幀一幀傳送的,數(shù)據(jù)可以是一個字符代碼或一個字節(jié)數(shù)據(jù)。一幀數(shù)據(jù)由4個部分組成:起始位、數(shù)據(jù)位、奇偶校驗位和停止位。異步通信起始位用“0”表示數(shù)據(jù)傳送的開始,然后從數(shù)據(jù)低位到高位逐位傳送數(shù)據(jù),接下來是奇偶校驗位(可以省略不用),最后為停止位,用“1”表示一幀數(shù)據(jù)結(jié)束。起始位信號只占用一位,用來通知接收設(shè)備一個待接收的數(shù)據(jù)開始到達(dá),線路上在不傳送數(shù)據(jù)時,保持為1。接收端不斷檢測線路的狀態(tài)。若在連續(xù)收到1以后,又收到一個0,就知道發(fā)來一個新數(shù)據(jù),開始接收。數(shù)據(jù)位一般情況下是 8位(D0~D7)。 奇偶校驗位(D8)只占用一位,在數(shù)據(jù)傳送中也可以規(guī)定不用奇偶校驗位,這一位可以省去,或者把它用作地址/數(shù)據(jù)幀標(biāo)志,來確定這一幀中的數(shù)據(jù)所代表信息的性質(zhì),如規(guī)定D8=1表示該幀信息傳送的是地址,D8=0表示傳送的是數(shù)據(jù)。停止位用來表示一個傳送字符的結(jié)束,它一定是高電平,停止位可以是1位、1.5位或2位,接收端接收到停止位后,就知道這一字符已傳送完畢。兩幀信息之間可以無間隔,也可以有間隔,且間隔時間可以任意改變,間隔用空閑位“1”來填充。

      1 MCS-51的串行接口及控制寄存器

      MCS-51單片機的串行口電路結(jié)構(gòu)如圖1所示[1]。

      圖1 MCS-51單片機串行口結(jié)構(gòu)示意圖Fig.1 MCS-51 MCUserial port structure diagram

      8051通過引腳RXD(串行數(shù)據(jù)接收端)和引腳TXD(串行數(shù)據(jù)發(fā)送端)與外界進行通信。單片機內(nèi)部的全雙工串行接口部分,包含有串行發(fā)送緩沖器和接收緩沖器,兩個物理上獨立的緩沖器。發(fā)送緩沖器CPU只能寫入發(fā)送的數(shù)據(jù),但不能讀出;接收緩沖器CPU只能讀出接收的數(shù)據(jù),但不能寫入。因此,串行口可同時收、發(fā)數(shù)據(jù),實現(xiàn)全雙工傳送。串行口發(fā)送和接收緩沖器的名稱都是特殊功能寄存器SBUF(一個是接收SBUF,一個是發(fā)送SBUF),它們共用一個地址 99H。CPU若向外發(fā)送一個數(shù)據(jù),只要執(zhí)行一條寫傳送數(shù)據(jù)指令(如MOV SBUF,A)。若要接收一個外部傳來的數(shù)據(jù),只要執(zhí)行一條讀數(shù)據(jù)傳送指令(如MOV A,SBUF)。

      2 串行口通信控制

      8051串行口是可編程接口,對它初始化編程主要是對串行口控制寄存器SCON(98H)的設(shè)置,包含串行口工作方式選擇位、接收和發(fā)送控制位以及串行口狀態(tài)標(biāo)志位,其格式如圖2所示。

      圖2 串行口控制寄存器SCONFig.2 Serial port control register SCON

      SM0、SM1:串行口工作方式選擇位,8051串行口可設(shè)置方式0、方式1、方式2、方式3共4種工作方式。

      SM2:多機通信控制位,雙機通信時,SM2=0,多機通信時,SM2=1。

      REN:允許串行接收位。由軟件置1允許接收數(shù)據(jù),置0禁止接收數(shù)據(jù)。

      TB8:是在方式2和方式3中發(fā)送的附加位數(shù)據(jù)。根據(jù)發(fā)送數(shù)據(jù)的需要由軟件置位或復(fù)位??勺髌媾夹r炍唬部稍诙鄼C通信中作區(qū)別地址幀或數(shù)據(jù)幀的標(biāo)志位。在方式0、方式1中該位未用。

      RB8:是在方式2和方式3中接收的附加位數(shù)據(jù)??勺骷s定的奇偶校驗位,或是約定的地址/數(shù)據(jù)的標(biāo)志位。在方式1中,若SM2=0,RB8中存放的是已接收到的停止位。方式0不使用 RB8。

      TI:發(fā)送中斷請求標(biāo)志位。在方式0中,串行發(fā)送第8位結(jié)束時,由硬件置位TI;在其他3種方式中,串行發(fā)送停止位開始時,由硬件置位TI。TI=1表示一幀數(shù)據(jù)發(fā)送完畢。可由軟件查詢TI的狀態(tài),TI為1時,向CPU申請中斷,CPU響應(yīng)中斷,TI標(biāo)志必須由軟件清零,才能再發(fā)送下一幀數(shù)據(jù)。

      RI:接收中斷標(biāo)志位。在方式0中,串行接收到第8位數(shù)據(jù)時,由硬件置位RI;在其他3種方式中,串行接收到停止位時,硬件置位RI。RI=1表示一幀數(shù)據(jù)接收結(jié)束??捎绍浖樵僐I的狀態(tài),RI為1時,向CPU申請中斷,CPU響應(yīng)中斷,RI必須由軟件清零,準(zhǔn)備接收下一幀信息。

      發(fā)送中斷和接收中斷是同一中斷服務(wù)程序入口地址(0023H),所以在全雙工通信時,必須由軟件查詢是發(fā)送中斷TI=1,還是接收中斷RI=1。

      3 數(shù)據(jù)幀格式

      方式0以8位數(shù)據(jù)為一幀,不設(shè)起始位、停止位和奇偶校驗位,如圖3(a)。先發(fā)送或接收低位。工作方式0為同步移位寄存器輸入/輸出方式。常用于串行口外接移位寄存器以擴展I/O口,也可以外接串行同步輸入/輸出設(shè)備,不能用于單片機之間的通信。方式1為8位數(shù)據(jù)異步通信接口。傳送一幀信息為10位。包括1位起始位(0)、8位數(shù)據(jù)位(先低位,后高位)和1位停止位(1),如圖3(b)。方式2和方式 3為9位數(shù)據(jù)異步通信接口。傳送一幀信息為11位,包括1位起始位(0),8位數(shù)據(jù)位(先低位,后高位),1位附加可編程控制位,1 位停止位(1),如圖 3 (c)所示。

      圖3 數(shù)據(jù)幀格式Fig.3 Data frame format

      4 波特率設(shè)置

      方式1與方式3發(fā)送和接收數(shù)據(jù)時的波特率相同,波特率是由內(nèi)部定時器T1送來的溢出信號經(jīng)過16或32分頻(取決于SMOD位,SMOD是電源控制寄存器PCON的最高位,當(dāng)SMOD=1時,使串行口波特率加倍。)而得到的,波特率為=2SMOD/32×T1溢出率。波特率是可變的。

      方式 2波特率=2SMOD/64×fosc,只有 2種:fosc/64或 fosc/32(取決于SMOD的值)。

      顯然,波特率可以靈活改變的只有方式1和方式3,定時器T1作為可變的波特率發(fā)生器,T1工作方式有3種,可以工作在方式0(13位定時方式)、方式1(16位定時方式)和方式2(8位自動重裝定時初值)。一般情況下,為了不影響波特率的精度,選用定時器工作方式2,且禁止T1中斷定(ET1=0),以免T1溢出時產(chǎn)生不必要的中斷。設(shè)定時器T1的初值為X,計數(shù)器長度為 L(取13、16和8)每過 2L-X個計數(shù)周期,T1就會產(chǎn)生一次溢出。溢出周期為:12/fosc(2L-X)。T1的溢出率為溢出周期的倒數(shù),則

      圖4 波特率隨初值X的變化Fig.4 Baud rate with initial X changes

      從圖4可以看出,如果串行通信選用較低的波特率時,將定時器T1設(shè)置定時方式1(16位計數(shù))最好控制,X值的變化對波特率引影比較接近線性關(guān)系,變化比較平坦,易于對波特率的設(shè)置與微調(diào)。其次是方式0(13位計數(shù)),最后才是方式2。但在選用方式0或方式1的情況下,T1溢出時需由中斷服務(wù)程序來重裝計數(shù)初值,而且應(yīng)該允許T1中斷(ET1=1)。中斷響應(yīng)和中斷處理的時間雖然會對波特率的精度帶來一點誤差,但也是可以根據(jù)指令執(zhí)行周期進行校正克服的。

      5 單片機通信

      單片機之間的通信,可以利用其串行通信口,構(gòu)成雙機通信和多機通信系統(tǒng)。串行口控制寄存器SCON中的SM2為多機通信控制位[2]。

      圖5 主從式多機通信Fig.5 Master slave multi MCUs communication

      雙機通信時,在方式1處于接收狀態(tài)時,SM2置為0,則接收到有效的停止位(高電平 1)時,才會激活 RI(即RI置1);在方式2和方式 3處于接收狀態(tài)時,SM2置為0,則接收到第 9 位數(shù)據(jù)(RB8)=1 后,RI置 1。

      多機通信,只有工作方式2和工作方式3,主機SM2置為0,由主機發(fā)起通信,當(dāng)從機SM2置為1時,從機接收到第9位數(shù)據(jù)(RB8)=1后,RI才置 1;當(dāng)從機 SM2置為 0時,則接收到第 9位數(shù)據(jù)(RB8)為0或1時,RI都置1。

      1)雙機通信數(shù)據(jù)傳輸

      方式1發(fā)送數(shù)據(jù)時,數(shù)據(jù)從TXD端輸出。只要執(zhí)行把8位數(shù)據(jù)寫入發(fā)送緩沖器SBUF命令,便啟動串行口發(fā)送器發(fā)送。啟動發(fā)送后,串行口能自動地在數(shù)據(jù)的前后分別插入1位起始位(0)和 1位停止位(1),以構(gòu)成一幀信息,依次由TXD端上發(fā)出。在一幀數(shù)據(jù)發(fā)出之后,也就是在停止位輸出時,使TI置1,用以通知CPU可以發(fā)送下一個數(shù)據(jù)。當(dāng)一幀信息發(fā)完之后,自動保持TXD端的信號為1。接收數(shù)據(jù)時,數(shù)據(jù)從RXD端輸入。在REN置“1”,允許接收器接收的前提下,在沒有信號到來時,RXD端狀態(tài)為1,當(dāng)檢測到有由1到0的變化時,就確認(rèn)是一幀信息的起始位(0),便開始接收這一幀數(shù)據(jù)。把收到的數(shù)據(jù)一位一位地移入接收移位寄存器中,直到一幀數(shù)據(jù)全部接收完畢(包括1位停止位)。在RI=0并且SM2=0時,前8位數(shù)據(jù)裝入SBUF中,置中斷標(biāo)志RI為1。如果不滿足這兩個條件,將丟棄接收到的信息,并不置位RI。

      方式2和方式3的接收和發(fā)送操作完全一樣,只是波特率設(shè)置不同。方式2(或方式3)發(fā)送數(shù)據(jù)時,數(shù)據(jù)由TXD端輸出,發(fā)送一幀信息為11位,附加位數(shù)據(jù)D8是SCON中的TB8(可作奇偶校驗位或地址/數(shù)據(jù)標(biāo)志位,發(fā)送前根據(jù)通信協(xié)議由軟件設(shè)置),CPU執(zhí)行一條數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令,就啟動發(fā)送器發(fā)送,發(fā)送完一幀信息,置中斷標(biāo)志TI為1,發(fā)送過程和方式1相同。接收數(shù)據(jù)時,數(shù)據(jù)從RXD端輸入。方式2(或方式3)在SCON中的REN=1,允許接收時,接收器開始采樣RXD電平。當(dāng)檢測到RXD端有1到0變化時,啟動接收器接收,把接收到的9位數(shù)據(jù)逐位移入移位寄存器中(含附加位),接收完一幀信息后,在RI=0并且SM2=0時,前8位數(shù)據(jù)裝入SBUF中,附加位數(shù)據(jù)D8裝入SCON中的RB8,置中斷標(biāo)志RI為1。如果不滿足這兩個條件,將丟棄接收到的信息,并不置位RI。

      2)多機通信數(shù)據(jù)傳輸

      圖5所示為MCS-51多機通信系統(tǒng)的連接示意圖。系統(tǒng)中只有一個主機,有多個從機。主機發(fā)送的信息可傳到各個從機或指定的從機,而各個從機發(fā)送的信息只能被主機接收。

      當(dāng)串行口以方式2(或方式3)接收數(shù)據(jù)時,SM2=1,則僅當(dāng)接收器接收到的附加位RB8=1時,本幀數(shù)據(jù)才裝入接收緩沖器SBUF,且置RI為1,向CPU發(fā)出中斷請求信號;若RB8=0,則不產(chǎn)生中斷請求信號,數(shù)據(jù)將丟失。而SM2=0時,則接收到一個數(shù)據(jù)字節(jié)后,不管RB8=0或RB8=1,都產(chǎn)生中斷請求信號RI,接收數(shù)據(jù)裝入SBUF中。應(yīng)用這一特性,便可實現(xiàn)多個MCS-51單片機之間的串行通信。

      在多機通信時,主機發(fā)送的信息有兩類,即地址和數(shù)據(jù)。地址是需要和主機通信的從機地址。例如,將圖5中3個從機的地址分別定義為00H,01H,02H。主機和從機串行口工作在方式2(或方式3),即9位異步通信方式。主機發(fā)送的是地址信息時特征是D8=1,而發(fā)送的是數(shù)據(jù)信息時特征是D8=0。對于從機就要利用SM2位的功能來確認(rèn)主機是否在呼叫自己,及數(shù)據(jù)傳送。從機處于接收時,置SM2=1,然后依據(jù)接收到的串行數(shù)據(jù)的附加位的值來決定是否接收主機信號,多機通信實現(xiàn)過程如下。

      首先定義從機地址,由系統(tǒng)初始化程序(或相關(guān)處理程序)將從機串行口編程為方式2或方式3接收(9位異步通訊方式),然后置從機SM2=1,REN=1,允許串行口中斷。

      ①主機首先將要通信的從機地址發(fā)出,發(fā)地址時D8=1,所有從機都接收。

      ② 從機串行口接收D8=1時,則置位中斷標(biāo)志RI,各從機CPU分別響應(yīng)中斷。

      ③各從機執(zhí)行中斷服務(wù)程序,以判斷主機送來的地址是否與本機地址相符。若與本機地址相符,則SM2清零,準(zhǔn)備和主機通信;若地址不一致,則保持SM2=1。

      ④ 主機發(fā)送數(shù)據(jù)(附加位為0)。

      ⑤ 從機接收到D8=0的信息幀(表示數(shù)據(jù)),只有SM2=0的從機才激活中斷標(biāo)志RI=1,轉(zhuǎn)入中斷程序,表示接收主機的數(shù)據(jù)或命令,實現(xiàn)主機與從機的信息傳送。而其他從機因SM2=1,附加位為0,不激活RI中斷標(biāo)志,接收的信息自動丟失不作處理,從而實現(xiàn)主機和從機的一對一通信。

      ⑥從機在通信完成后,重新使SM2置1,并退出中斷服務(wù)程序,等待下次通信。

      用定時器T1,定時器T1工作在方式1(16位計數(shù)方式)作為波特率發(fā)生器,由設(shè)定的波特率得到的此時的初裝值為XXH,將主機中的數(shù)據(jù)塊(數(shù)據(jù)塊長度放在R7中)傳送到從機。

      主機程序:

      DATA_BUF EQU 40H;數(shù)據(jù)存放區(qū)首地址

      SLAVE_ADDR EQU 30H;從機地址

      ORG 0000H

      AJMP MAIN

      ORG 001BH

      AJMP INT_T1

      ORG 0050H

      MAIN:MOV TMOD,#10H;定時器T1初始化,工作方式1

      MOV TH1,#0XXH

      MOV TL1,#0XXH

      MOV SCON,#0D0H ;串口工作在方式3,多機位值 SM2=0,允許接受

      SETB TB8,#1 ;發(fā)送地址標(biāo)志

      SETB TR1 ;啟動定時器1

      SETB IT1

      SETB ES

      SETB EA

      MOV A,SLAVE_ADDR;發(fā)送從機地址

      MOV SBUF,A

      JNB TI,$

      CLR TI

      MOV TB8,#0 ;發(fā)送數(shù)據(jù)標(biāo)志

      MOV R0,#DATA_BUF

      HERE: MOV SBUF,@R0;發(fā)送數(shù)據(jù)

      JNB TI,$

      CLR TI

      DJNZ R7,HERE

      SETB TB8

      MOV SBUF,A SJMP$

      INT_T1:MOV TH1,#0XXH

      MOV TL1,#0XXH

      RETI

      END

      從機程序:

      FLAG BIT 2AH ;數(shù)據(jù)傳送標(biāo)志

      ADDR_ACK EQU 1AH

      DATA_BUF EQU 40H

      TEMP_BUF EQU 31H ;數(shù)據(jù)暫存器

      ORG 0000H

      AJMP MAIN

      ORG 001BH

      AJMP INT_T1

      ORG 0023H

      AJMP HANDLEDATA

      ORG 0050H

      MAIN:MOV TMOD,#10H;定時器T1初始化,工作方式1

      MOV TH1,#0XXH

      MOV TL1,#0XXH

      MOV SCON,#0F0H;串口工作在方式3,多機位SM2=1,允許接收

      CLR FLAG

      SETB TR1 ;啟動定時器T1

      SETB IT1

      SETB EA

      AJMP$

      HANDLE_DATA:CLR RI

      MOV A,SBUF

      MOV TEMP_BUF,A

      SEND:JNB RB8,DATA_RECEIVE

      CJNE ADDR_ACK,TEM_BUF, XXXX

      JB FLAG OVER

      SETB FLAG

      CLR SM2

      RETI

      OVER:SETB SM2

      CLR FLAG

      RETI

      DATA_RECEIVE:MOV DATA_BUF,TEMP_BUF

      INC DATA_BUF

      XXXX:RETI

      INT_T1:MOV TH1,#0XXH

      MOV TL1,#0XXH

      RETI

      END

      在進行上述多機通信時,要先運行從機中的接收程序,再運行主機中的發(fā)送程序。

      6 結(jié)束語

      簡要闡述了單片機[7-8]通信方式及串行接口的原理,并通過實例介紹了單片機串行多機通信頻率可調(diào)的實現(xiàn)方法,經(jīng)過實驗驗證,文中所提出的波特率可調(diào)方法具有簡單、準(zhǔn)確、調(diào)節(jié)范圍廣的特點。可以應(yīng)用于幾乎所有的具有波特率的串行通信系統(tǒng)中,滿足多種特定環(huán)境通信速率的不同要求。

      [1]鄭毛祥.單片機基礎(chǔ)[M].2版.北京:人民郵電出版社,2009.

      [2]李云鶴,武善玉.基于ISP的簡約型51單片機實驗板的設(shè)計[J].微計算機信息,2008,5(2):95-97.LI Yun-he,WU Shan-yu.Based on ISP compact 51 MCU experimental board design[J].Microcomputer Information,2008,5(2):95-97.

      [3]李曉鵬,王民.單片機串行通信自適應(yīng)波特率的一種簡單實現(xiàn)算法[J].現(xiàn)代計算機,2010(10):90-93 LI Xiao-peng,WANG Min.MCU serial communication baud rate of a simple adaptive algorithm[J].Modern Computer,2010(10):90-93.

      [4]洪沙.陽翰凌·單片機多機通信中從機串口中斷服務(wù)程序設(shè)計[J].微機應(yīng)用,2008(12):153-155.HONG Sha,YANG Han-ling.The single-chip microcomputer communication from the machine serial port interrupt service program design[J].Microcomputer Application,2008 (12):153-155.

      [5]潘策,陳曉南,楊培林.PC機與單片機串行通信的硬件設(shè)計[J].現(xiàn)代電子技術(shù),2003(15):4-8.PAN Ce,CHEN Xiao-nan,YANG Pei-lin.PC machine serial communication with the MCU hardware design[J].Modern Electronic Technology,2003(15):4-8.

      [6]彭宗乾.MCS-51單片機多機通信的組成原理及通信程序[J].通迅與電視,1992(2):20-22.PENG Zong-qian.MCS-51 MCU communication principle and communication program[J].Communication and Television,1992(2):20-22.

      [7]孫俊,王京梅,李莉,等.基于單片機的串聯(lián)鋰離子電池組監(jiān)測系統(tǒng)設(shè)計[J].電子科技,2011(10):4-6.SUN Jun,WANG Jing-mei,LI Li,et al.Design of supervising and measuring system of serial lithium-ion batteries based on MCU[J].Electronic Science and Technology,2011(10):4-6.

      [8]吳汶泰,扈維,林勝潔.分布式單片機網(wǎng)絡(luò)中CSMA的軟件設(shè)計與性能分析[J].電子科技,2009(7):93-95.WU Wen-tai,HU Wei,LIN Sheng-jie.Software design of CSMA in the distributed SCM Network and its performance analysis[J].Electronic Science and Technology,2009(7):93-95.

      猜你喜歡
      波特率寄存器中斷
      CAN 總線波特率自適應(yīng)程序設(shè)計
      智能制造(2020年5期)2020-07-03 06:24:00
      Lite寄存器模型的設(shè)計與實現(xiàn)
      基于FPGA的異步串行通信波特率容錯設(shè)計
      電子測試(2018年7期)2018-05-16 06:27:18
      跟蹤導(dǎo)練(二)(5)
      千里移防,衛(wèi)勤保障不中斷
      解放軍健康(2017年5期)2017-08-01 06:27:44
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      AT89C51與中斷有關(guān)的寄存器功能表解
      C*Core芯片SCI串口波特率容限優(yōu)化
      FPGA內(nèi)嵌PowerPC的中斷響應(yīng)分析
      微處理機(2012年4期)2012-06-13 11:32:24
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
      唐河县| 淳安县| 蓝山县| 化德县| 纳雍县| 澳门| 沿河| 昌图县| 万年县| 岚皋县| 金湖县| 都匀市| 凉城县| 榆树市| 南澳县| 龙胜| 玉溪市| 绥阳县| 张家口市| 汕尾市| 鄯善县| 平乐县| 蓬溪县| 恩平市| 平泉县| 苏州市| 达日县| 新丰县| 阿坝| 永丰县| 从江县| 太仓市| 三穗县| 凤山市| 普格县| 建水县| 高安市| 巢湖市| 台东市| 会东县| 汉中市|