C單片機串行通信解讀實用_第1頁
C單片機串行通信解讀實用_第2頁
C單片機串行通信解讀實用_第3頁
C單片機串行通信解讀實用_第4頁
C單片機串行通信解讀實用_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

會計學(xué)1C單片機串行通信解讀實用第8章80C51單片機串行通信8.1串行通信基礎(chǔ)知識8.280C51串行口8.380C51串行口工作方式8.4串行通信數(shù)據(jù)傳輸速率8.5串行通信應(yīng)用第1頁/共73頁8.1串行通信基礎(chǔ)知識通信:指計算機與外部設(shè)備或計算機與計算機之間的信息交換。在計算機系統(tǒng)中,CPU與外部通信的基本方式有兩種:并行通信——數(shù)據(jù)的各位同時傳送。串行通信——數(shù)據(jù)一位一位順序傳送。

基本通信方式示意圖

第2頁/共73頁8.1串行通信基礎(chǔ)知識并行通信的特點:各數(shù)據(jù)位同時傳送,傳送速度快、效率高。但有多少數(shù)據(jù)位就需要有多少根數(shù)據(jù)線,因此傳送成本高。在集成電路芯片的內(nèi)部、同一插件板上各部件之間、同一機箱內(nèi)各插件板之間等的數(shù)據(jù)傳送都是并行的。并行數(shù)據(jù)傳送的距離通常小于30米。串行通信的特點:數(shù)據(jù)傳送按位順序進行,最少只需一根傳輸線即可完成,成本低,但速度慢。計算機與遠程終端或終端與終端之間的數(shù)據(jù)傳送通常都是串行的。串行數(shù)據(jù)傳送的距離可以從幾米到幾千公里。串行通信有同步通信和異步通信兩種基本方式。

第3頁/共73頁1.異步串行通信異步串行通信是以字符為單位的間歇傳輸形式。傳送時按字符進行包裝,為此,在數(shù)據(jù)位之外要增添起始位、奇偶校驗位和停止位,構(gòu)成一個通信幀。下圖為異步通信的幀格式。8.1.1異步通信和同步通信第4頁/共73頁幾點說明:①在串行通信中,信息的兩種狀態(tài)分別以mark和space標(biāo)志。其中mark譯為標(biāo)號,對應(yīng)邏輯狀態(tài)1,在發(fā)送器空閑時,數(shù)據(jù)線應(yīng)保持在mark狀態(tài);space譯為空格,對應(yīng)邏輯狀態(tài)0。②起始位。發(fā)送器通過發(fā)送起始位而開始一個字符的傳輸。起始位使數(shù)據(jù)線處于space狀態(tài)。③數(shù)據(jù)位。起始位之后傳送數(shù)據(jù)位。在數(shù)據(jù)位中,低位在前(左)高位在后(右)。由于字符編碼方式的不同,數(shù)據(jù)位可以是5、6、7或8位等多種形式。④奇偶校驗位。用于對字符傳送作正確性檢查,因此,奇偶校驗位是可選擇的,共有3種可能,即奇校驗、偶校驗和無校驗,由用戶根據(jù)需要選定。

第5頁/共73頁

所謂偶校驗,即數(shù)據(jù)位和奇偶校驗位中邏輯1的個數(shù)加起來必須是偶數(shù)(全0也視為偶數(shù)個1)。所謂奇校驗,即數(shù)據(jù)位和奇偶校驗位中邏輯1的個數(shù)加起來必須是奇數(shù)。⑤停止位。停止位在最后,用于標(biāo)志一個字符傳輸?shù)慕Y(jié)束,對應(yīng)于mark狀態(tài)。停止位可能是1、1.5或2位,在實際應(yīng)用中根據(jù)需要確定。⑥位時間。一個格式位的時間寬度。⑦幀(Frame)。從起始位開始到停止位結(jié)束的全部內(nèi)容稱為一幀。異步串行通信是一幀接一幀進行的,傳輸可以是連續(xù)的,也可以是斷續(xù)(間歇)的。第6頁/共73頁2.同步串行通信為提高傳送速度,把數(shù)據(jù)傳輸按相等的時間間隔分塊進行,在數(shù)據(jù)塊的開始加一些特殊字符,作為發(fā)送和接收雙方的同步標(biāo)志。由于數(shù)據(jù)塊的位數(shù)較多,為防止錯位,在發(fā)送數(shù)據(jù)時一般同時給出時鐘信號,以保持接收與發(fā)送的同步,這就是同步串行通信。同步串行通信的數(shù)據(jù)傳送格式如下圖所示:第7頁/共73頁同步串行通信的數(shù)據(jù)格式有如下特點和要求:①只在數(shù)據(jù)塊傳輸?shù)拈_始使用同步字符串,作為發(fā)送和接收雙方同步的標(biāo)志,而在結(jié)束時不需要同步標(biāo)志。②數(shù)據(jù)字符之間不允許有間隔,當(dāng)線路空閑或沒有數(shù)據(jù)可發(fā)時,可發(fā)送同步字符串。③數(shù)據(jù)塊內(nèi)各字符的格式必須相同。同步串行通信比異步串行通信的傳送速度快,但同步串行通信要求收發(fā)雙方在整個數(shù)據(jù)傳輸過程中始終保持同步,這將對硬件提出更高的要求,實現(xiàn)起來難度大一些;而異步串行通信只要求在每幀的短時間內(nèi)保持同步即可,實現(xiàn)起來容易得多。所以同步串行通信適用于數(shù)據(jù)量大、對速度要求比較高的串行通信場合。第8頁/共73頁1.單工形式

單工(Simplex)形式的數(shù)據(jù)傳輸是單向的。通信雙方中一方固定為發(fā)送端,另一方則固定為接收端。單工形式的串行通信只需要一條數(shù)據(jù)線,如下圖所示。例如,計算機與打印機之間的串行通信。8.1.2串行通信線路形式第9頁/共73頁2.全雙工形式

全雙工(Fullduplex)形式的數(shù)據(jù)傳輸是雙向的,可以同時發(fā)送和接收數(shù)據(jù),因此,全雙工形式的串行通信需要兩條數(shù)據(jù)線。第10頁/共73頁3.半雙工形式

半雙工(Halfduplex)形式的數(shù)據(jù)傳輸也是雙向的。但任何時刻只能由其中的一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù)。因此半雙工形式既可以使用一條數(shù)據(jù)線,也可以使用兩條數(shù)據(jù)線。第11頁/共73頁近程串行通信單片機的數(shù)據(jù)信號在傳輸線上傳送時,由于受到線間分布電容和噪聲干擾等影響,將引起傳輸信號的幅度衰減和波形畸變,極易導(dǎo)致傳輸錯誤。加之導(dǎo)線越長電容越大,所以傳輸距離就受到一定的限制。由于近距離串行通信不改變數(shù)據(jù)位波形和頻率,所以也稱為基帶傳輸方式。雖然基帶方式實現(xiàn)起來既方便又經(jīng)濟,但只能用于近程通信。第12頁/共73頁對于近距離的串行通信(例如一個房間內(nèi)的計算機之間,距離不超過10m),傳輸中雖有波形畸變產(chǎn)生,但不會嚴(yán)重到影響使用,仍可使用TTL電平直接傳輸。近距離的串行通信并不復(fù)雜,只需將兩端串行口直接連接就可進行串行數(shù)據(jù)通信,省去了接口的麻煩,見下圖。第13頁/共73頁遠程通信對于遠程通信(例如城市之間),不能使用基帶傳輸方式,只能使用模擬信號形式進行,一般使用電話線。為了在電話線上進行串行數(shù)據(jù)傳輸,需要在發(fā)送端把數(shù)字信號轉(zhuǎn)變?yōu)槟M信號再進行發(fā)送,這種把數(shù)字信號轉(zhuǎn)變?yōu)槟M信號的過程稱為調(diào)制。在接收端應(yīng)把模擬信號再轉(zhuǎn)變?yōu)閿?shù)字信號,這一過程稱為解調(diào)。遠程通信多采用雙工方式,即通信雙方都應(yīng)具有發(fā)送和接收功能。為此在通信線路的兩端都設(shè)置調(diào)制器和解調(diào)器,并且把二者結(jié)合在一起稱為調(diào)制解調(diào)器(Modem)。使用電話線作傳輸線的遠程通信連接如下圖所示。第14頁/共73頁8.280C51串行口為了實現(xiàn)串行通信,需要有硬件電路以解決串行數(shù)據(jù)傳輸中的一系列協(xié)調(diào)問題,這些硬件就是串行接口電路或簡稱串行口。8.2.180C51串行口硬件結(jié)構(gòu)通常把實現(xiàn)異步通信的串行口稱為通用異步接收器/發(fā)送器UART(UniversalAsynchronousReceiver/Transmitter)。80C51的串行口,雖然是既能實現(xiàn)同步通信,又能實現(xiàn)異步通信的全雙工串行口,但在單片機的串行數(shù)據(jù)通信中,最常用的是異步方式,因此,常把它寫為UART。串行接口結(jié)構(gòu)如下圖所示。第15頁/共73頁80C51串行口寄存器結(jié)構(gòu)第16頁/共73頁80C51單片機有兩個獨立的接收、發(fā)送緩沖器SBUF(屬于特殊功能寄存器),一個用作發(fā)送,一個用作接收。發(fā)送緩沖器只能寫入不能讀出;接收緩沖器只能讀出不能寫入,兩者共用一個字節(jié)地址(99H)。在發(fā)送時,CPU由一條寫發(fā)送緩沖器的指令把數(shù)據(jù)(字符)寫入串行口的發(fā)送緩沖器SBUF(發(fā))中,然后從TXD端一位位地向外發(fā)送。與此同時,接收端RXD也可一位位地接收數(shù)據(jù),直到收到一個完整的字符數(shù)據(jù)后通知CPU,再用一條指令把接收緩沖器SBUF(收)的內(nèi)容讀入累加器??梢姡谡麄€串行收發(fā)過程中,CPU的操作時間很短,使得CPU還可以從事其他的各種操作(指工作在中斷方式下),從而大大提高了CPU的效率。

第17頁/共73頁

80C51串行口通過控制寄存器、中斷功能和波特率設(shè)置實現(xiàn)串行通信控制。串行口控制寄存器(SCON)-98HSM0、SM1——串行口工作方式選擇位。其狀態(tài)組合所對應(yīng)的工作方式為:SM0SM1=00,工作方式0;SM0SM1=01,工作方式1;

SM0SM1=10,工作方式2;SM0SM1=11,工作方式3。8.2.2串行口控制機制第18頁/共73頁

SM2——多機通信控制位。TB8——發(fā)送數(shù)據(jù)位8。RB8——接收數(shù)據(jù)位8。(這3位用于多機通信)因為多機通信是在方式2和方式3下進行的,因此SM2主要用于方式2和方式3。當(dāng)串行口以方式2和方式3接收數(shù)據(jù)時,SM2=1,則只有在接收到的第9位數(shù)據(jù)(RB8)為1時才將接收到的前8位數(shù)據(jù)送入SBUF,并置位RI產(chǎn)生中斷請求;否則將接收到的前8位數(shù)據(jù)丟棄。SM2=0,則不論第9位數(shù)據(jù)是0還是1,都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請求。在方式0時,SM2必須為0。第19頁/共73頁REN——允許接收位。REN=0;禁止接收;REN=1,允許接收。TI——串行發(fā)送中斷請求標(biāo)志。在數(shù)據(jù)發(fā)送過程中,當(dāng)最后一個數(shù)據(jù)位被發(fā)送完成后,TI由硬件置位。RI——串行接收中斷請求標(biāo)志。在數(shù)據(jù)接收過程中,當(dāng)采樣到最后一個數(shù)據(jù)位有效時,RI由硬件置位。第20頁/共73頁2.串行中斷80C51有兩個串行中斷,即串行發(fā)送中斷和串行接收中斷。但這兩個串行中斷共享一個中斷向量0023H。每當(dāng)串行口發(fā)送或接收一個數(shù)據(jù)字節(jié)時,都產(chǎn)生中斷請求。串行中斷請求在芯片內(nèi)部發(fā)生,因此不需要引腳。兩個中斷共享一個中斷向量,就需要在中斷服務(wù)程序中對中斷源進行判斷,以便進行不同的中斷處理。對于串行中斷控制共涉及3個寄存器,其中一個就是串行口控制寄存器SCON,用于存放串行中斷請求標(biāo)志。另外兩個中斷允許控制寄存器IE和中斷優(yōu)先級控制寄存器IP。第21頁/共73頁8.380C51串行口工作方式80C51單片機的串行口共有4種工作方式,見下表。

SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可變10方式211位UARTfosc/64或fosc/3211方式311位UART可變第22頁/共73頁8.3.1串行工作方式0串行工作方式0是把串行口作為同步移位寄存器使用,實現(xiàn)串行數(shù)據(jù)的輸入/輸出。移位數(shù)據(jù)的傳輸以8位為一組,低位在前、高位在后。利用串行工作方式0,加上“并入串出”或“串入并出”芯片的配合,80C51的串行口可實現(xiàn)數(shù)據(jù)的并行輸入/輸出。方式0實現(xiàn)數(shù)據(jù)并行輸入/輸出,“并入串出”芯片74LS165、

CD4014)用于把并行輸入數(shù)據(jù)通過移位形成位串,傳送給串行口;而“串入并出”芯片(74LS164、CD4094)則接收串行口的串行數(shù)據(jù),通過移位形成8位并行數(shù)據(jù)輸出。第23頁/共73頁74LS164CLR為清0端,輸出時CLR必須為1,否則74HC164Q0~Q7輸出為0。

74HC165S/L端為移位/置入端,當(dāng)S/L=0時,從Q0~Q7并行數(shù)據(jù)置入寄存器,當(dāng)S/L=1時,允許從Q端移出數(shù)據(jù)。第24頁/共73頁

串行接口工作方式0其波特率是固定的,為fosc(振蕩頻率)的1/12。

1.方式0發(fā)送

數(shù)據(jù)從RxD引腳串行輸出,TxD引腳輸出同步脈沖。當(dāng)一個數(shù)據(jù)寫入串行口發(fā)送緩沖器時,串行口將8位數(shù)據(jù)以fosc/12的固定波特率從RxD引腳輸出,從低位到高位。發(fā)送后置中斷標(biāo)志TI為1,請求中斷,在再次發(fā)送數(shù)據(jù)之前,必須用軟件將TI清零。第25頁/共73頁2.方式0接收在滿足REN=1和RI=0的條件下,串行口處于方式0輸入。此時,RxD為數(shù)據(jù)輸入端,TXD為同步信號輸出端,接收器也以fosc/12的波特率對RxD引腳輸入的數(shù)據(jù)信息采樣。當(dāng)接收器接收完8位數(shù)據(jù)后,置中斷標(biāo)志RI=1為請求中斷,在再次接收之前,必須用軟件將RI清零。

在方式0工作時,必須使SCON寄存器中的SM2位為“0”,這并不影響TB8位和RB8位。方式0發(fā)送或接收完數(shù)據(jù)后由硬件置位TI或RI,CPU在響應(yīng)中斷后要用軟件清除TI或RI標(biāo)志。

第26頁/共73頁8.3.2串行工作方式1

串行工作方式1是10位為一幀的異步串行通信方式,幀格式包括1個起始位,8個數(shù)據(jù)位和1個停止位。這種工作方式是為雙機通信而準(zhǔn)備的。第27頁/共73頁1.方式l發(fā)送由一條寫發(fā)送寄存器(SBUF)的指令開始,隨后在串行口由硬件自動加入起始位和停止位,構(gòu)成一個完整的幀格式,然后在移位脈沖的作用下,由TXD端串行輸出。一個字符幀發(fā)送完后,使TXD輸出線維持在1狀態(tài)下,并將SCON寄存器的TI位置1,通知CPU可以接著發(fā)送下一個字符。2.方式1接收

SCON的REN位應(yīng)處于允許接收狀態(tài),即REN=1。在此前提下,串行口采樣RXD端,當(dāng)采樣到從1到0的狀態(tài)跳變時,就認(rèn)為已接收到起始位。隨后在移位脈沖的控制下,把接收到的數(shù)據(jù)位移入接收寄存器中。直到停止位到來之后置位中斷標(biāo)志位RI,通知CPU從SBUF取走接收到的一個字符。

第28頁/共73頁8.3.3串行工作方式2和3串行工作方式2和3都是11位為一幀的串行通信方式,即1個起始位、9個數(shù)據(jù)位和1個停止位。這兩種工作方式主要是為多機通信而準(zhǔn)備的。

第29頁/共73頁在這兩種工作方式下,字符還是8個數(shù)據(jù)位,只不過增加了一個第9數(shù)據(jù)位(D8),它是一個可編程位,其功能由用戶設(shè)定。在發(fā)送數(shù)據(jù)時,應(yīng)予先在串行口控制寄存器SCON的TB8位中把第9個數(shù)據(jù)位的內(nèi)容準(zhǔn)備好。這兩種工作方式的數(shù)據(jù)接收過程也與方式1基本類似,不同點仍在第9數(shù)據(jù)位上,串行口把接收到的前8個數(shù)據(jù)位移入SBUF,而把第9數(shù)據(jù)位送SCON的RB8。串行工作方式2和3是為多機通信而準(zhǔn)備的。兩者的工作過程相同,差別僅在于波特率的設(shè)置,方式2的波特率是固定的,而方式3的波特率可由用戶根據(jù)需要設(shè)定,設(shè)定方法與方式1相同。

第30頁/共73頁8.4串行通信數(shù)據(jù)傳輸速率8.4.1傳輸速率的表示方法1.與傳輸速率有關(guān)的術(shù)語波特率:每秒鐘事件發(fā)生的數(shù)目或信號變化的次數(shù)。單位:波特(B,Baud)比特率:每秒鐘傳送二進制的位數(shù)。單位:位/秒(bps)說明:(1)在一般的單片機串行通信中,事件和信號變化都反映在二進制位上,波特率與比特率的概念是一樣的。(2)但在高速串行通信中,由于一個事件的編碼往往不止1位,因此波特率與比特率就不一樣了。例如事件按4位編碼,如果數(shù)據(jù)傳輸?shù)牟ㄌ芈适?400,則比特率就是9600第31頁/共73頁2.單片機中使用的波特率在單片機中使用波特率來表示串行通信的傳送速率。波特率:每秒鐘傳送二進制的位數(shù)1波特=1位/秒(bps)注意:波特率和字符的傳輸速率不同例如:如果每秒鐘傳送240個字符,而每個字符格式包含10位(1個起始位、8個數(shù)據(jù)位、1個停止位),這時的波特率為:

10位×240個/秒=2400bps第32頁/共73頁波特率是串行通信的重要技術(shù)指標(biāo)在串行通信中,波特率除表明數(shù)據(jù)傳送速率外,還可以表示串行口中移位脈沖頻率的高低。波特率高表明移位脈沖頻率高,串行數(shù)據(jù)傳輸速度就快;反之,波特率低表明移位脈沖頻率也低,串行數(shù)據(jù)傳輸速度就慢。在實際的串行通信中,應(yīng)根據(jù)速度要求、線路質(zhì)量以及設(shè)備情況等因素選定波特率。第33頁/共73頁1.串行工作方式0的波特率串行工作方式0的波特率是固定的,其計算公式為:2.串行工作方式2的波特率串行工作方式2的波特率也是固定的,但有兩個數(shù)值。其計算公式為:

SMOD=0時,波特率=,SMOD=1時,波特率=8.4.280C51單片機的波特率設(shè)置第34頁/共73頁位序

B7

B6

B5B4B3B2B1B0位符號SMOD

///GF1GF0PDIDL電源控制寄存器PCON字節(jié)地址87H其中SMOD:串行口的波特率倍增位SMOD=0,波特率不加倍SMOD=1,串行口波特率加倍。系統(tǒng)復(fù)位時,SMOD=0。PCON不能位尋址。第35頁/共73頁

3.串行工作方式1和方式3的波特率串行工作方式1和方式3的波特率不是固定的,可以根據(jù)需要設(shè)置。當(dāng)串行口工作在方式1和方式3時,由80C51單片機的定時器T1作為波特率發(fā)生器(以定時器T1作波特率發(fā)生器是由系統(tǒng)決定的),為串行口提供移位脈沖。串行工作方式1和方式3的波特率計算公式為:當(dāng)定時器T1作波特率發(fā)生器使用時,通常選用工作方式2(即8位自動重裝載方式)。選擇方式2可以避免通過程序反復(fù)裝入定時初值所引起的定時誤差,使波特率更加穩(wěn)定第36頁/共73頁定時器的溢出周期:定時器溢出一次所需要的時間。定時器的溢出率:單位時間定時器溢出的次數(shù)。溢出率等于溢出周期的倒數(shù)當(dāng)定時器T1工作在方式2(即8位自動重裝載方式),假定定時器T1的計數(shù)初值為X,則定時器T1的溢出周期為:溢出率為溢出周期的倒數(shù),則定時器T1的溢出率為:第37頁/共73頁實際使用中,波特率是已知的。因此需要根據(jù)波特率的計算公式求定時初值X。則波特率計算公式為:根據(jù)上述波特率計算公式,得出計數(shù)初值的計算公式為:用戶只需要把定時初值設(shè)置到定時器1,就能得到所要求的波特率。第38頁/共73頁思考題:定時器T1工作在方式2,串行口方式1波特率=1200bps,fosc=12MHZ,SMOD=0,則X=?如果T1預(yù)裝的初值X=E6H,則實際得到的波特率為:誤差怎么解決?其它條件不變,取fosc=11.0592MHZ,則X=?第39頁/共73頁說明:(1)當(dāng)串行口工作在方式1或方式3,且要求波特率按規(guī)范取1200、2400、4800、9600…時,若采用晶振12MHz和6MHz,按波特率計算公式算出的T1定時初值將不是一個整數(shù),因此會產(chǎn)生波特率誤差而影響串行通信的同步性能。解決的方法可以調(diào)整單片機的晶振頻率fosc,通常采用為11.0592MHz的晶振,這樣可使計算出的T1初值為整數(shù)。(2)實際使用時,可根據(jù)波特率的計算公式來計算T1的初值。為避免煩雜的初值計算,可以通過查常用波特率與定時器1的參數(shù)關(guān)系表。第40頁/共73頁(3)串行口工作在方式1和方式3時,定時器1初始化程序的步驟:

首先確定波特率

再計算定時器1的計數(shù)初值然后進行定時器的初始化例題:單片機的晶振頻率為11.0592MHZ,串行口工作在方式1,波特率為2400bps,計算定時器T1的計數(shù)初值,并寫出初始化程序。(假設(shè)SMOD=0)解:定時器T1工作在方式2(8位自動重裝載方式)第41頁/共73頁初始化程序:MOVTMOD,#20HMOVTL1,#0F4HMOVTH1,#0F4HSETBEACLRESMOVPCON,#00HMOVSCON,#50HSETBTR1第42頁/共73頁80C51單片機的串行口共有4種工作方式,見下表。

SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可變10方式211位UARTfosc/64或fosc/3211方式311位UART可變第43頁/共73頁【例題】用80C51單片機的串行口外接串入并出的芯片CD4094擴展并行輸出口控制一組發(fā)光二極管,使發(fā)光二極管從左至右延時輪流點亮。(fosc=12MHZ)ORG0000HLJMPMAINORG2000HMAIN:MOVSCON,#00H MOVA,#80H CLRP1.0START:MOVSBUF,ALOOP:JNBTI,LOOP SETBP1.0 ACALLDELAY CLRTI RRA CLRP1.0 SJMPSTARTDELAY:MOVR7,#05HLOOP2:MOVR6,#0FFHLOOP1:DJNZR6,LOOP1 DJNZR7,LOOP2 RET END第44頁/共73頁【思考題】用80C51單片機的串行口外接并入串出的芯片CD4014擴展并行輸入口,輸入一組開關(guān)的信息,開關(guān)K閉合時有效。ORG0000HLJMPMAINORG2000HMAIN:SETBP1.1START:JBP1.1,START SETBP1.0 MOVSCON,#10HCLRP1.0LOOP:JNBRI,LOOP CLRRI MOVA,SBUF

80C51

RXD

TXD

P1.0QB

CLK

P/S

P1.1K0K7

KCD4014第45頁/共73頁第46頁/共73頁72H2006MHz110D0H20011.0592MHz600E8H20011.0592MHz1.2KF4H20011.0592MHz2.4KFAH20011.0592MHz4.8KFDH20011.0592MHz9.6KFDH20111.0592MHz19.2KFFH20112MHz62.5K串口方式1或3×××112MHz375K串口方式2××××12MHz1M串口方式0相應(yīng)初值所選方式C/T定時器T1SMODFosc波特率常用波特率與定時器1的參數(shù)關(guān)系表第47頁/共73頁8.5串行通信應(yīng)用8.5.1近程串行通信8.5.2調(diào)制解調(diào)器的使用第48頁/共73頁8.5.3雙機通信1、問題的提出把甲機存放在內(nèi)部RAM40H—4FH中的16個字節(jié)的數(shù)據(jù)塊傳送到乙機內(nèi)部RAM40H—4FH中,如何實現(xiàn)?2、問題分析與解決

從上面的問題可以看出,這實際上是雙機通信問題,由甲機發(fā)送,乙機接收。

在進行雙機通信之前,發(fā)送和接收雙方要進行一些約定,明確一些技術(shù)問題。第49頁/共73頁(1)數(shù)據(jù)通路采用何種形式,硬件電路如何連接?采用何種串行工作方式?約定:串行工作方式1雙機異步通信接口電路第50頁/共73頁若fosc=11.0592MHZ,取SMOD=0,根據(jù)波特率的計算公式也可以通過查表,確定X=F4H??汕蟮糜嫈?shù)初值X為:(2)數(shù)據(jù)傳送的波特率是多少?約定:2400bps第51頁/共73頁(4)雙方如何取得聯(lián)絡(luò)?約定:甲機向乙機發(fā)送一個E1作為聯(lián)絡(luò)信號,表示請求通信乙機收到E1信號后,回答一個E2作為應(yīng)答信號,表示通信(3)如何檢驗數(shù)據(jù)傳輸?shù)恼_性?約定:采用累加和檢驗(代碼和檢驗)累加和檢驗:發(fā)送方對所發(fā)送的數(shù)據(jù)塊求和,并將“檢驗和”附加到數(shù)據(jù)塊末尾,也發(fā)送給接收方。接收方接收數(shù)據(jù)時,也是先對數(shù)據(jù)塊求和,將所得結(jié)果與發(fā)送方的“檢驗和”進行比較,若兩者相同,表示傳送正確,若不相同表示傳送出了差錯。第52頁/共73頁(5)雙方通信如何結(jié)束?約定:乙機如果接收的數(shù)據(jù)正確,向甲機發(fā)送00H信號,表示結(jié)束雙方的通信。乙機如果接收的數(shù)據(jù)不正確,向甲機發(fā)送非00H信號,表示數(shù)據(jù)出錯,要求甲機重新發(fā)送。3、編寫程序

在編寫程序之前,要分別給出甲機和乙機的流程圖,根據(jù)流程圖編寫甲機和乙機的通信程序。第53頁/共73頁甲機通信流程圖第54頁/共73頁乙機通信流程圖第55頁/共73頁ASTART:CLREAMOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HMOVPCON,#00HSETBTR1MOVSCON,#50HALOOP1:MOVSBUF,#0E1HJNBTI,$

CLRTIJNBRI,$

CLRRIMOVA,SBUFXRLA,#0E2H

JNZALOOP1ALOOP3:MOVSBUF,@R0

MOVA,R6ADDA,@R0MOVR6,A

INCR0JNBTI,$CLRTIDJNZR7,ALOOP3

MOVSBUF,R6JNBTI,$CLRTIJNBRI,$

CLRRIMOVA,SBUFJNZALOOP2

RET甲機發(fā)送程序清單(采用查詢方式)ALOOP2:MOVR0,#40H

MOVR7,#10HMOVR6,#00H第56頁/共73頁BSTART:CLREAMOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HMOVPCON,#00HSETBTR1MOVSCON,#50HBLOOP1:JNBRI,$CLRRIMOVA,SBUFXRLA,#0E1H

JNZBLOOP1

MOVSBUF,#0E2H

JNBTI,$CLRTIBLOOP2:MOVR0,#40H

MOVR7,#10H

MOVR6,#00HBLOOP3:JNBRI,$CLRRIMOVA,SBUFMOV@R0,A

INCR0ADDA,R6

MOVR6,ADJNZR7,BLOOP3JNBRI,$CLRRIMOVA,SBUFXRLA,R6

JZEND1

MOVSBUF,#0FFH

JNBTI,$

CLRTIAJMPBLOOP2END1:MOVSBUF,#00HRET乙機接收程序清單(采用查詢方式)第57頁/共73頁8.5.4多機通信多機通信是指一臺主機和多臺從機之間的通信。通常單片機的多機通信采用主從式多機通信方式。在這種方式中,只有一臺主機,有多臺從機。主機發(fā)送的信息可以傳到各個從機或指定的從機,各從機發(fā)送的信息只能被主機接收。主要問題:怎樣識別地址?怎樣維持主機與指定從機之間的通信?第58頁/共73頁1.多機通信連接電路在串行方式2或方式3條件下,可實現(xiàn)一臺主機和多臺從機之間的通信,其連接電路如圖所示。第59頁/共73頁2.多機通信原理

多機通信時,主機向從機發(fā)送的信息分為地址幀和數(shù)據(jù)幀兩類,以可編程第9位TB8作區(qū)分標(biāo)志:TB8=0,表示數(shù)據(jù);TB8=1,表示地址。多機通信充分利用了80C51串行控制寄存器SCON中的多機通信控制位SM2的特性。

當(dāng)SM2=1時,CPU接收的前8位數(shù)據(jù)是否送入SBUF取決于接收的第9位RB8的狀態(tài):若RB8=1,將接收到的前8位數(shù)據(jù)送入SBUF,并置位RI產(chǎn)生中斷請求;若RB8=0,則接收到的前8位數(shù)據(jù)丟棄。即當(dāng)從機SM2=1時,從機只能接收主機發(fā)送的地址幀(RB8=1),對數(shù)據(jù)幀(RB8=0)不予理睬。

當(dāng)從機SM2=0時,從機可接收主機發(fā)送的所有信息。第60頁/共73頁

通信開始時,主機首先發(fā)送地址幀。由于各從機的SM2=1和RB8=1,所以各從機均能接收到地址幀,分別發(fā)出串行接收中斷請求,通過串行中斷服務(wù)程序來判斷主機發(fā)送的地址與本從機地址是否相符。如果相符,則把自身的SM2清0,以準(zhǔn)備接收隨后傳送來的數(shù)據(jù)幀。其余從機由于地址不符,則仍保持SM2=1狀態(tài),因而不能接收主機傳送來的數(shù)據(jù)幀。這就是多機通信中主、從機一對一的通信情況。這種通信只能在主、從機之間進行,如果想在兩個從機之間進行通信,則要通過主機作中介才能實現(xiàn)。第61頁/共73頁3.多機通信過程(1)主、從機工作于方式2或方式3,主機置SM2=0,REN=1;從機置SM2=1,REN=1。(2)主機置位TB8=1,向從機發(fā)送尋址地址幀,各從機因滿足接收條件(SM2=1,RB8=1),從而接收到主機發(fā)來的地址,并與本機地址進行比較。(3)地址一致的從機(被尋址機)將SM2清0,并向主機返回地址,供主機核對。地址不一致的從機(未被尋址機)保持SM2=1。(4)主機核對返回的地址,若與此前發(fā)出的地址一致則準(zhǔn)備發(fā)送數(shù)據(jù);若不一致則返回(2)重新發(fā)送地址幀。第62頁/共73頁(5)主機向從機發(fā)送數(shù)據(jù),此時主機的TB8=0,只有被選中的那臺從機能接收到該數(shù)據(jù)。其他從機則舍棄該數(shù)據(jù)。(6)本次通信結(jié)束后,從機重新置SM2=1,等待下次通信。第63頁/共73頁4.多機通信實現(xiàn)方法(1)有關(guān)通信協(xié)議的幾條規(guī)定①從機地址為00H~FEH,即允許接255臺從機。②“地址”FFH是對所有從機都起作用的一條控制命令,命令使被尋址從機恢復(fù)SM2=1的狀態(tài)。

③假定主機發(fā)送的控制命令代碼為:00H——主機發(fā)送從機接收命令;01H——從機發(fā)送主機接收命令;其它為非法命令。④從機狀態(tài)字格式如下:

D7D6D5D4D3D2D1D0ERR00000TRDYRRDYERR=1,表示收到非法指令;

TRDY=1,表示發(fā)送準(zhǔn)備就緒;

RRDY=1,表示接收準(zhǔn)備就緒。第64頁/共73頁(2)軟件設(shè)計

主機和從機程序都以子程序形式出現(xiàn),所不同的是在這里設(shè)從機采用中斷的方式。在調(diào)用主機子程序之前,應(yīng)先準(zhǔn)備好R0、R1、R2、R3和R4中的參數(shù)。主機中寄存器的分配:R0:主機接收數(shù)據(jù)塊首址;R1:主機發(fā)送數(shù)據(jù)塊首址;R2:被尋址的從機地址;R3:主機發(fā)出的指令;R4:數(shù)據(jù)塊長度。主機串行口設(shè)為方式3,允許接收,并置TB8為1,故控制字為11011000B=D8H。

第65頁/共73頁從機采用中斷的方式,即接收到地址幀后就進行串行口中斷申請。CPU響應(yīng)后,進入中斷服務(wù)程序。從機串行口的初始化、定時器初始化和中斷初始化等都在從機主程序中完成。從機串行口中斷服務(wù)參考程序中SLAVE為本機地址,并用F0和PSW.1作為本從機發(fā)送和接收準(zhǔn)備就緒的狀態(tài)位。即:F0中為1表示從機發(fā)送準(zhǔn)備就緒,PSW.1=1為本機已準(zhǔn)備好接收。

從機中寄存器的分配:

R0:存放發(fā)送數(shù)據(jù)塊始址

R1:存放接收數(shù)據(jù)塊始址

R2:存放發(fā)送數(shù)據(jù)塊長度

R3:存放接收數(shù)據(jù)塊長度第66頁/共73頁MOVSCON,#OD8H;串行口初始化MSIO1:MOVA,R2MOVSBUF,A;啟動發(fā)送,發(fā)送從機地址JNBRI,$;等待從機回答CLRRI;從機回答后清RIMOVA,SBUF;取從機地址XRLA,R2;核對地址JZMSIO3;相符轉(zhuǎn)MSI03MSIO2:MOVSBUF,#OFFH;準(zhǔn)備重發(fā)地址SETBTB8;設(shè)地址幀標(biāo)志SJMPMSIO1;重發(fā)地址MSIO3:CLRTB8;準(zhǔn)備發(fā)送指令MOVSBUF,R3;發(fā)出指令JNBRI,$;等待從機回答CLRRI;從機回答后清RIMOVA,SBUF;取應(yīng)答信息JNBACC.7,MSIO4;核對指令接收是否出錯SJMPMSIO2;指令出錯,重發(fā)主機程序

第67頁/共73頁MSIO4:CJNER3,#00H,MSIO5;若為發(fā)送指令,則轉(zhuǎn)發(fā)送程序段JNBACC.0,MSIO2;從機未準(zhǔn)備好接收,重新聯(lián)絡(luò)STX:MOVSBUF,@R1;從機準(zhǔn)備好,開始發(fā)送JNBTI,$;等待發(fā)送結(jié)束CLRTI;清TI,準(zhǔn)備發(fā)送下一幀數(shù)據(jù)INCR1;修改指針DJNZR4,STX;未完,繼續(xù)RET;發(fā)送完,返回MSIO5:JNBACC.1,MSIO2;從機未準(zhǔn)備好發(fā)送,重新聯(lián)絡(luò)SRX:JNBRI,$;等待接收完畢CLRRI;清RI,為下次接收準(zhǔn)備MOVA,SBUF;取出收到的數(shù)據(jù)MOV@R0,A;存入數(shù)據(jù)INCR0;修改指針DJNZR4,SRX;未完,繼續(xù)RET;接收完畢,返回主機程序

第68頁/共73頁ORG1000HSTART:MOVTMOD,#20H;定時器T1為方式2 MOVTH1,#0F4H ;波特率為1200bps MOVTL1,#0F4H SETBTR1 ;啟動T1工作

MOVSCON,#0F8H

溫馨提示

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

最新文檔

評論

0/150

提交評論