單片機(jī)第七章串行通信_第1頁
單片機(jī)第七章串行通信_第2頁
單片機(jī)第七章串行通信_第3頁
單片機(jī)第七章串行通信_第4頁
單片機(jī)第七章串行通信_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單片機(jī)第七章串行通信第一頁,共六十七頁,2022年,8月28日7.1串行通信的基本知識1、通信方式 1)并行通信各數(shù)據(jù)位同時傳送,其傳送速度快、效率高。但并行數(shù)據(jù)傳送有多少數(shù)據(jù)位就需要多少根數(shù)據(jù)線,成本高,比較適合近距離通信。2)串行通信則是數(shù)據(jù)傳送按位順序進(jìn)行,最少只需一根傳輸線即可,成本低、速度慢。計(jì)算機(jī)與遠(yuǎn)程終端或終端與終端之間的數(shù)據(jù)傳送通常部是串行的。圖7-1所示為兩種通信方式示意圖。第二頁,共六十七頁,2022年,8月28日(1)并行通信(2)串行通信第三頁,共六十七頁,2022年,8月28日 2、異步通信與同步通信方式

異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時鐘控制數(shù)據(jù)的發(fā)送和接收過程。為使雙方的收發(fā)協(xié)調(diào),要求發(fā)送和接收設(shè)備的時鐘盡可能一致。

同步通信時要建立發(fā)送方時鐘對接收方時鐘的直接控制,使雙方達(dá)到完全同步。此時,傳輸數(shù)據(jù)的位之間的距離均為“位間隔”的整數(shù)倍,同時傳送的字符間不留間隙,即保持位同步關(guān)系,也保持字符同步關(guān)系。發(fā)送方對接收方的同步可以通過這兩種方法實(shí)現(xiàn)。

第四頁,共六十七頁,2022年,8月28日異步通信是以字符(構(gòu)成的幀)為單位進(jìn)行傳輸,字符與字符之間的間隙(時間間隔)是任意的,但每個字符中的各位是以固定的時間傳送的,即字符之間是異步的(字符之間不一定有“位間隔”的整數(shù)倍的關(guān)系),但同一字符內(nèi)的各位是同步的(各位之間的距離均為“位間隔”的整數(shù)倍)。第五頁,共六十七頁,2022年,8月28日異步傳送的字符幀格式如圖所示。一幀字符格式包括1位起始位、5~8位數(shù)據(jù)位、奇偶校驗(yàn)位和1位停止位。起始位為0,用于表示一個字符的開始。起始位之后傳送數(shù)據(jù)位。在數(shù)據(jù)位中,低位在前(左),高位在后(右)。數(shù)據(jù)位可以是5、6、7或8位。奇偶校驗(yàn)位用于對字符傳送作正確性檢查。有3種可能供選擇:奇校驗(yàn)、偶校驗(yàn)和無校驗(yàn)。由用戶根據(jù)需要選定。停止位在最后,用以標(biāo)志一個字符傳送的結(jié)束,它對應(yīng)于1狀態(tài)。停止位可能是1、1.5或2位,在實(shí)際使用根據(jù)需要確定。異步傳送可以是連續(xù)的,也可以是斷續(xù)的,且間隔時間可任意改變,間隔用空閑位1填充。在89S51單片機(jī)系統(tǒng)中,第九位數(shù)據(jù)D8可以用作奇偶校驗(yàn)位,也可以用作地址/數(shù)據(jù)幀標(biāo)志。第六頁,共六十七頁,2022年,8月28日圖7-2串行異步通信字符幀格式異步通信有固定的字符幀,通信雙方只需按約定的幀格式進(jìn)行發(fā)送和接收數(shù)據(jù),硬件結(jié)構(gòu)比較簡單。當(dāng)平時不發(fā)送數(shù)據(jù)時,發(fā)送端應(yīng)保持為1。數(shù)據(jù)接收端將不斷檢測接收的數(shù)據(jù),若連續(xù)檢測到1之后檢測到0,則為新發(fā)送來的數(shù)據(jù),應(yīng)立即接收。在同步串行通信中,每一數(shù)據(jù)塊開頭時發(fā)送1至2個同步字符,使發(fā)送方與接收方保持同步。數(shù)據(jù)塊的各個字符間去掉了起始位和停止位,其通信速度比較高,但其硬件結(jié)構(gòu)也比較復(fù)雜。同步通信時,如果發(fā)送的數(shù)據(jù)塊之間有間隔時間,則發(fā)送同步字符填充第七頁,共六十七頁,2022年,8月28日 2.數(shù)據(jù)傳送方向

1、單工單工是指數(shù)據(jù)傳輸僅能沿一個方向,不能實(shí)現(xiàn)反向傳輸。2、半雙工半雙工是指數(shù)據(jù)傳輸可以沿兩個方向,但需要分時進(jìn)行。3、全雙工全雙工是指數(shù)據(jù)可以同時進(jìn)行雙向傳輸。

第八頁,共六十七頁,2022年,8月28日4、串行通信的傳送速率比特率是每秒鐘傳輸二進(jìn)制代碼的位數(shù),單位是:位/秒(bps)。如每秒鐘傳送240個字符,而每個字符格式包含10位(1個起始位、1個停止位、8個數(shù)據(jù)位),這時的比特率為:

10位×240個/秒=2400bps波特率表示每秒鐘調(diào)制信號變化的次數(shù),單位是:波特(Baud)。)。波特率和比特率不總是相同的,對于將數(shù)字信號1或0直接用兩種不同電壓表示的所謂基帶傳輸,比特率和波特率是相同的。所以,我們也經(jīng)常用波特率表示數(shù)據(jù)的傳輸速率。第九頁,共六十七頁,2022年,8月28日在串行通信中,數(shù)據(jù)位的發(fā)送和接收分別由發(fā)送時鐘脈沖和接收時鐘脈沖進(jìn)行定時控制。時鐘頻率高,則波特率也高,通信速度就快;反之,時鐘頻率低,則波特率也低,通信速度就慢。第十頁,共六十七頁,2022年,8月28日7.2MCS-51單片機(jī)串行口的結(jié)構(gòu)與工作原理 1、串行口的結(jié)構(gòu)

MCS-51單片機(jī)內(nèi)部的串行接口是全雙工的,即它能同時發(fā)送和接收數(shù)據(jù)。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入。串行口還有接收緩沖作用,即從接收寄存器中讀出前一個已收到的字節(jié)之前就能開始接收第二字節(jié)。兩個串行口數(shù)據(jù)緩沖器(實(shí)際上是兩個寄存器)通過特殊功能寄存器SBUF來訪問。寫入SBUF的數(shù)據(jù)儲存在發(fā)送緩沖器,用于串行發(fā)送;從SBUF讀出的數(shù)據(jù)來自接收緩沖器。兩個緩沖器共用一個地址99H(特殊功能寄存器SBUF的地址)。

第十一頁,共六十七頁,2022年,8月28日

在串行口發(fā)送數(shù)據(jù)時,將CPU送來的并行數(shù)據(jù)轉(zhuǎn)換成一定格式的串行數(shù)據(jù),從引腳TXD(P3.1)上按規(guī)定的波特率逐位輸出;接收數(shù)據(jù)時,外部信號通過引腳RXD(P3.0)輸入,再將發(fā)送來的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),等待CPU讀入。它的幀格式有8位、10位和11位,可以設(shè)置為固定波特率和可變波特率,給使用者帶來很大的靈活性。在單片機(jī)中,主要適用異步傳送方式

第十二頁,共六十七頁,2022年,8月28日圖7-3串行口結(jié)構(gòu)框圖第十三頁,共六十七頁,2022年,8月28日

7.3串行口控制寄存器SCON和電源控制寄存器PCON 1、串行口控制寄存器SCON

串行口控制寄存器SCON決定串行口通信工作方式,控制數(shù)據(jù)的接收和發(fā)送,并標(biāo)示串行口的工作狀態(tài)等。其位格式為:第十四頁,共六十七頁,2022年,8月28日(1)SM0、SM1:串行口工作方式控制位,兩位對應(yīng)四種工作方式,如表7-1所示(fosc是晶振頻率)。第十五頁,共六十七頁,2022年,8月28日(2)SM2——多機(jī)通信控制位因多機(jī)通信是在方式2和方式3下進(jìn)行,因此SM2位主要用于方式2和方式3SM2=1RB8=1將接收到的前8位數(shù)據(jù)送SBUF,并置位RI產(chǎn)生中斷請求;SM2=1RB8=0將接收到的前8位數(shù)據(jù)丟棄。SM2=0RB8=1都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請求。SM2=0RB8=0都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請求。當(dāng)串行口以方式2或方式3接收時,如果SM2=1,則只有當(dāng)接收到的第九位數(shù)據(jù)(RB8)為1,才將接收到的前8位數(shù)據(jù)送SBUF,并置位RI產(chǎn)生中斷請求;否則,將接收到的前8位數(shù)據(jù)丟棄。而當(dāng)SM2=0,則不論第九位數(shù)據(jù)為0還是1,都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請求。在方式1時,當(dāng)處于接收時,若SM2=1,則只有收到有效的停止位時,RI才置1。在方式0時,SM2必須為0。第十六頁,共六十七頁,2022年,8月28日(3)REN——允許串行口接收位REN=0,禁止串行口接收數(shù)據(jù)REN=1,允許串行口接收數(shù)據(jù)該位由軟件置位或復(fù)位。(4)TB8——發(fā)送數(shù)據(jù)第9位在方式2和方式3時,TB8的內(nèi)容是要發(fā)送的第9位數(shù)據(jù)。在雙機(jī)通信時,TB8一般作為奇偶校驗(yàn)位使用;在多機(jī)通信中,以TB8位的狀態(tài)表示主機(jī)發(fā)送的是地址幀還是數(shù)據(jù)幀,且一般約定:TB8=0為數(shù)據(jù)幀,TB8=1為地址幀。該位由軟件置位或復(fù)位。(5)RB8——接收數(shù)據(jù)位8在方式2或方式3時,RB8存放接收到的第9位數(shù)據(jù),代表著接收數(shù)據(jù)的某種特征(與TB8的功能類似),故應(yīng)根據(jù)其狀態(tài)對接收數(shù)據(jù)進(jìn)行操作。第十七頁,共六十七頁,2022年,8月28日6)TI——發(fā)送中斷標(biāo)志當(dāng)方式0時,發(fā)送完第8位數(shù)據(jù)后,該位由硬件置位。在其它方式下,于發(fā)送停止位之前,該位由硬件置位。因此TI=1,表示幀發(fā)送結(jié)束。其狀態(tài)既可供軟件查詢使用,也可請求中斷。TI位須由軟件清0。(7)RI—接收中斷標(biāo)志當(dāng)方式0時,接收完第8位數(shù)據(jù)后,該位由硬件置位。在其它方式下,當(dāng)接收到停止位時,該位由硬件置位。因此RI=1,表示幀接收結(jié)束。其狀態(tài)既可供軟件查詢使用,也可以請求中斷。RI須由軟件清0。第十八頁,共六十七頁,2022年,8月28日 2、電源控制寄存器PCON

電源控制寄存器PCON中只有一位SMOD與串行口工作有關(guān),它的位格式為:

SMOD:波特率倍增位。串行口工作在方式1、方式2、方式3時,若SMOD=1,則波特率提高一倍;若SMOD=0,則波特率不提高一倍。單片機(jī)復(fù)位時,SMOD=0。第十九頁,共六十七頁,2022年,8月28日 7.4串行口工作方式89S51/S52單片機(jī)中的異步通信串行接口能方便地與其他計(jì)算機(jī)或傳送信息的外圍設(shè)備(如串行打印機(jī)、CPU終端等)實(shí)現(xiàn)雙機(jī)、多機(jī)通信。單片機(jī)的串行口共有4種工作方式。工作方式0移位寄存器方式,可以通過外接移位寄存器芯片實(shí)現(xiàn)擴(kuò)展并行I/O接口的功能。工作方式1、工作方式2、工作方式3都是異步通信方式。工作方式1是8位異步通信接口。一幀信息由10位組成,用于雙機(jī)串行通信。工作方式2、工作方式3都是9位異步通信接口、一幀信息中包括9位數(shù)據(jù),1位起始位,1位停止位,工作方式2、工作方式3的區(qū)別在于波特率不同,主要用于多機(jī)通信,也可用于雙機(jī)通信。

第二十頁,共六十七頁,2022年,8月28日7.4.1工作方式0在方式0下,串行口是作為同步移位寄存器使用。主要用于擴(kuò)展并行I/O口。波特率固定為fosc/12。這時數(shù)據(jù)由RXD(P3.0)端輸入和輸出,由TXD(P3.1)端提供移位時鐘脈沖。移位數(shù)據(jù)的發(fā)送和接收以8位為一幀,低位在前高位在后,不設(shè)起始位和停止位。

1.數(shù)據(jù)發(fā)送與接收在使用方式0進(jìn)行數(shù)據(jù)的發(fā)送時,CPU將一個字節(jié)寫入發(fā)送緩沖器SBUF,TXD端輸出同步時鐘信號,串行口即以fosc/12的波特率將8位數(shù)據(jù)從RXD口輸出(低位在前,高位在后),發(fā)送完后置位中斷標(biāo)志TI,在繼續(xù)發(fā)送之前須由軟件將中斷標(biāo)志位清0。第二十一頁,共六十七頁,2022年,8月28日在使用方式0進(jìn)行數(shù)據(jù)的接收時,數(shù)據(jù)從RXD端輸入,TXD端輸出同步時鐘信號,接收緩沖器以fosc/12的波特率接收數(shù)據(jù),當(dāng)接收緩沖器接收完8位數(shù)據(jù)后置位中斷標(biāo)志RI,在繼續(xù)接收之前須由軟件將中斷標(biāo)志位清0。REN位用于允許接收的控制,REN=0,禁止接收數(shù)據(jù);REN=l,允許接收數(shù)據(jù)。在方式0下不使用串行口控制寄存器SCON中的TB8位和RB8位,即發(fā)送或接收數(shù)據(jù)的第9位,且SM2位必須為0。第二十二頁,共六十七頁,2022年,8月28日

方式0接收和發(fā)送電路第二十三頁,共六十七頁,2022年,8月28日波特率的計(jì)算在串行通信中,收發(fā)雙方對發(fā)送或接收數(shù)據(jù)的速率要有約定。通過軟件可對單片機(jī)串行口編程為四種工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可變的,由定時器T1的溢出率來決定。串行口的四種工作方式對應(yīng)三種波特率。由于輸入的移位時鐘的來源不同,所以,各種方式的波特率計(jì)算公式也不相同。方式0時,移位操作的波特率是固定的,為fosc/12,即一個機(jī)器周期進(jìn)行一次移位,發(fā)送或接收一位數(shù)據(jù)。如fosc=12MHz,則波特率為1M(bps),即1μs移位一次。方式0下波特率不受SMOD位的影響。第二十四頁,共六十七頁,2022年,8月28日7.4.2工作方式1方式l是10位為一幀的串行異步通信方式。共包括1個起始位,8個數(shù)據(jù)位和l個停止位。外部數(shù)據(jù)從引腳RXD輸入,送入到接收緩沖器,需要發(fā)送的數(shù)據(jù)經(jīng)過引腳TXD輸出。第二十五頁,共六十七頁,2022年,8月28日方式1輸出1.數(shù)據(jù)發(fā)送與接收方式l的數(shù)據(jù)發(fā)送將數(shù)據(jù)寫入發(fā)送緩沖器SBUF,隨后在串行口由硬件自動加入起始位和停止位,構(gòu)成一個完整的幀格式,然后在移位脈沖的作用下,由TXD端串行輸出。一個字符幀發(fā)送完后,將SCON寄存器的TI置l。在中斷方式下將申請中斷,通知CPU可以發(fā)送下一個字符幀。第二十六頁,共六十七頁,2022年,8月28日接收數(shù)據(jù)時,SCON的REN位應(yīng)處于允許接收數(shù)據(jù)狀態(tài)下。串行口采樣引腳RXD端,當(dāng)采樣到從l到0的狀態(tài)跳變時,就認(rèn)定是接收到起始位。隨后在移位脈沖的控制下,把接收到的數(shù)據(jù)位移入接收緩沖器SBUF中。直到停止位到來之后將停止位送入到RB8中,并置位中斷標(biāo)志位RI,在中斷方式下將申請中斷,通知CPU從接收緩沖器SBUF取走接收到的一個字符。不管中斷方式還是查詢方式,硬件都不會自動清除RI和TI中斷標(biāo)志,須由用戶用軟件清0。方式1輸入第二十七頁,共六十七頁,2022年,8月28日 2、方式2的波特率 工作方式2時,移位脈沖由振蕩頻率fosc的第二節(jié)拍P2時鐘(即fosc/2)給出,所以,方式2波特率取決于PCON中的SMOD位的值,當(dāng)SMOD=0時,波特率為fosc的1/64;當(dāng)SMOD=1時,波特率為fosc的1/32,用公式表示為;工作方式2波特率=(2SMOD/64)×fosc第二十八頁,共六十七頁,2022年,8月28日2.波特率方式l的波特率則是可變的,以定時器T1作為波特率發(fā)生器使用,其波特率值由定時器1的計(jì)數(shù)溢出率來決定,其公式為:串行口方式1的波特率=×定時器T1的溢出率其中SMOD為電源控制寄存器PCON的最高位,是串行口波特率的倍增位,當(dāng)SMOD=1時,串行口波特率加倍。定時器T1的溢出率取決于計(jì)數(shù)速率和定時器的初值。計(jì)數(shù)速率與特殊功能寄存器TMOD中的C/位的狀態(tài)有關(guān)。當(dāng)C/=0時,T1作為定時器,計(jì)數(shù)速率=fosc/12,當(dāng)C/=1時,T1作為計(jì)數(shù)器使用,計(jì)數(shù)速率取決于外部輸入脈沖時鐘頻率。第二十九頁,共六十七頁,2022年,8月28日當(dāng)定時器T1作波特率發(fā)生器使用時,通常選用工作方式2,即8位自動重加載方式,方便為定時器T1賦初值。在方式2下,TL1作為計(jì)數(shù)器使用,而預(yù)置初值放在TH1中,設(shè)計(jì)數(shù)初值為X,則每過(256-X)個機(jī)器周期,定時器T1就產(chǎn)生一次溢出。此時應(yīng)禁止T1中斷。則計(jì)數(shù)溢出周期為:

×(256一X)溢出率為溢出周期的倒數(shù),則波特率為:波特率=×實(shí)際使用時,需要先確定波特率,再根據(jù)波特率計(jì)算定時器T1的計(jì)數(shù)初值,然后進(jìn)行定時器的初始化。根據(jù)上述波特率計(jì)算公式,得出計(jì)數(shù)初值的計(jì)算公式為X=256-第三十頁,共六十七頁,2022年,8月28日選擇定時器T1工作在方式2下,是因?yàn)榉绞?具有自動重載入功能,可避免通過程序反復(fù)裝入初值所引起的定時誤差。使波特率更加穩(wěn)定,也更方便。表7-5列出了在選擇定時器T1作為波特率發(fā)生器使用時,各種常用的波特率以及相應(yīng)的控制位和時間常數(shù)表7-5定時器T1的常用波特率C/波特率/bpsfosc/MHzSMOD定時器T1工作方式初值1920011.059102FDH960011.059002FDH480011.059002FAH240011.059002F4H120011.059002E8H60011.059002D0H30011.059002A0H15011.05900240H第三十一頁,共六十七頁,2022年,8月28日7.4.3工作方式2工作方式2是11位為一字符幀的串行異步通信方式,幀格式包括1個起始位、9個數(shù)據(jù)位和1個停止位。在方式2下,字符還是8個數(shù)據(jù)位。而第9數(shù)據(jù)位既可作奇偶校驗(yàn)位使用,也可作控制位使用。發(fā)送之前應(yīng)先在串行口控制寄存器SCON的TB8位中準(zhǔn)備好,其波特率與SMOD位有關(guān)。第三十二頁,共六十七頁,2022年,8月28日當(dāng)將第9位數(shù)據(jù)寫入TB8之后,向SBUF寫入字符幀的8個數(shù)據(jù)位,啟動串行口發(fā)送數(shù)據(jù)。一個字符幀發(fā)送完畢后,將TI位置1。方式2的接收過程與方式1基本類似,所不同的是在第9位數(shù)據(jù)上,串行口把接收到的8個數(shù)據(jù)送入SBUF,而把接收的第9數(shù)據(jù)送到RB8。根據(jù)SM2的狀態(tài)和RB8的值確定串行口是否會置位中斷標(biāo)志位RI。第三十三頁,共六十七頁,2022年,8月28日如果SM2=0,則不論第九位數(shù)據(jù)為0還是1,都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請求。

如果SM2=1,且接收到的第九位數(shù)據(jù)RB8=1時,將接收到的前8位數(shù)據(jù)送SBUF,并置位RI產(chǎn)生中斷請求。這表示在多機(jī)通信時,接收到的信息為地址幀,此時將RI置1,接收發(fā)來的地址幀。

如果SM2=1,且接收到的第九位數(shù)據(jù)RB8=0時,將接收到的前8位數(shù)據(jù)丟棄。這表示接收到的信息為數(shù)據(jù)幀,但不是發(fā)給本機(jī)的,此時RI不置1。

串行口工作在方式2和方式3時會在多機(jī)通信一節(jié)講述。在工作方式2和工作方式3時的情況如下表7-6所示。SM2=1RB8=1將接收到的前8位數(shù)據(jù)送SBUF,并置位RI產(chǎn)生中斷請求SM2=1RB8=0將接收到的前8位數(shù)據(jù)丟棄。SM2=0RB8=1都將前8位數(shù)據(jù)裝入SBUF中,并置位RI產(chǎn)生中斷請求。SM2=0RB8=0都將前8位數(shù)據(jù)裝入SBUF中,并置位RI產(chǎn)生中斷請求。第三十四頁,共六十七頁,2022年,8月28日2.波特率方式2的波特率是固定的,且有兩種。這與電源控制寄存器PCON中波特率倍增位SMOD的值有關(guān)。當(dāng)SMOD=1時,波特率為晶振頻率的1/32;當(dāng)SMOD=0時,波特率為晶振頻率1/64。用公式表示為:波特率=×7.4.4工作方式3方式3同樣是11位為一幀的串行通信方式,其通信過程與方式2完全相同,所不同的僅在于波特率。方式2的波特率只有固定的兩種,而方式3的波特率則可由用戶根據(jù)需要設(shè)定。其設(shè)定方法與方式l是一樣的,即通過設(shè)置定時器T1的初值和波特率倍增位SMOD來設(shè)定波特率。第三十五頁,共六十七頁,2022年,8月28日7.5串行口應(yīng)用舉例【例7.1】設(shè)計(jì)一個發(fā)送程序,將片內(nèi)RAM中50H~5FH中的數(shù)據(jù)串行發(fā)送,串行口設(shè)定為方式2狀態(tài),TB8作奇偶校驗(yàn)位。在數(shù)據(jù)寫入發(fā)送緩沖器之前,先將數(shù)據(jù)的奇偶位P寫入TB8,這時第9位數(shù)據(jù)作奇偶校驗(yàn)用。程序清單如下TRT:MOVSCON,#80H;方式2設(shè)定MOVPCON,#80H;取波特率為fosc/32MOVR0,#50HMOVR7,#10H;數(shù)據(jù)長度10HLOOP:MOVA,@R0;取數(shù)據(jù)送AMOVC,PSW.0;MOVTB8,CMOVSBUF,A;數(shù)據(jù)送SBUF,啟動發(fā)送WAIT:JBCTI,CONT;判斷發(fā)送中斷標(biāo)志SJMPWAITCONT:INCR0DJNZR7,LOOPRET第三十六頁,共六十七頁,2022年,8月28日【例7.2】設(shè)計(jì)一個接收程序,將接收的16個字節(jié)數(shù)據(jù)送入片內(nèi)RAM中50H~5FH單元中。設(shè)串行口方式3狀態(tài)工作,波特率為2400。定時器/計(jì)數(shù)器1作波特率發(fā)生器時,SMOD=0,計(jì)數(shù)常數(shù)為0F4H。程序清單如下:RVE:MOVTMOD,#20H;T1編程為方式2定時狀態(tài)MOVTH1,#0F4H;計(jì)數(shù)常數(shù)送T1MOVT11,#0F4HSETBTR1;啟動T1MOVR0,#50HMOVR7,#10H;數(shù)據(jù)長度lOH-R7MOVSCON,#0D0H;串行口編程方式3接收MOVPCON,#00H;置SMOD=0WAIT:JBCRI,PRI;等待接收到數(shù)據(jù)SJMPWAIT第三十七頁,共六十七頁,2022年,8月28日PRI:MOVA,SBUF;奇偶校驗(yàn)判P=RB8?JNBPSW.0,PNPJNBRB8,PERSJMPRIGHTPNP:JBRB8,PERRIGHT:MOV@R0,A;數(shù)據(jù)送緩沖器INCR0DJNZR7,WAIT;判斷數(shù)據(jù)塊接收完否?CLRPSW.5;正確接收完16個字節(jié)置標(biāo)志位RET第三十八頁,共六十七頁,2022年,8月28日

串行通信實(shí)例

有兩臺8031單片機(jī)相距很近,直接將它們的串行口相連,1#機(jī)的TXD接2#機(jī)的RXD,2#機(jī)的TXD接1#機(jī)的RXD,二機(jī)的GND相連。二機(jī)的晶振頻率均為11.0592MHZ,通信的波特率為4800bps?,F(xiàn)將第一臺8031單片機(jī)片內(nèi)RAM40H~5FH單元內(nèi)的數(shù)據(jù),串行發(fā)送到第二臺8031單片機(jī)片內(nèi)RAM60H~7FH單元中。第三十九頁,共六十七頁,2022年,8月28日

發(fā)送與接收的參考程序如下:1#單片機(jī)發(fā)送程序:

ORG1000H TX:

MOVTMOD,#02H

MOVTH1,#0FAH

MOVTL1,#0FAH MOVSCON,#80H ;設(shè)定工作方式2

MOVPCON,#00H; 波特率為fosc/64

SETBTR0 第四十頁,共六十七頁,2022年,8月28日

MOVR0,#40H ;設(shè)發(fā)送數(shù)據(jù)的地址指針

MOVR2,#20H ;設(shè)發(fā)送數(shù)據(jù)長度LOOP: MOVA,@R0 ;取發(fā)送數(shù)據(jù)送A

MOVC,PSW.0

MOVTB8,C ;奇偶位送TB8

MOVSBUF,A ;啟動發(fā)送WAIT: JBCTI,LL1

;判發(fā)送中斷標(biāo)志

SJMPWAIT

第四十一頁,共六十七頁,2022年,8月28日LL1:

INCR0

DJNZR2,LOOP

RET2#單片機(jī)接收程序:

ORG1000HRX:

MOVTMOD,#02H

MOVTH1,#0FAH

MOVTL1,#0FAH

MOVSCON,#90H ;設(shè)定工作方式2,并允許接收第四十二頁,共六十七頁,2022年,8月28日

MOVPCON,#00H

SETBTR0

MOVR0,#60H

MOVR2,#20H

LOOP: JBCRI,MM1 ;等待接收數(shù)據(jù)

SJMPLOOP

MM1: MOVA,SBUF ;讀入一幀數(shù)據(jù)

JBPSW.0,PP1 ;判接收端奇偶

JBRB8,ERROR ;判發(fā)送端奇偶

SJMPRIGHT

第四十三頁,共六十七頁,2022年,8月28日PP1:

JNBRB8,ERROR ;接收出錯RIGHT: MOV@R0,A ;接收正確

INCR0

DJNZR2,LOOP

ERROR: SETBPSW.5 ;置出錯標(biāo)志

RET第四十四頁,共六十七頁,2022年,8月28日7.6多機(jī)通信單片機(jī)的多機(jī)通信是指一臺主機(jī)和多臺從機(jī)之間的通信,其連接如圖7-12所示。89S51/S52單片機(jī)串行口方式2與方式3專門應(yīng)用于多機(jī)通信。主機(jī)發(fā)送的信息可傳送到各個從機(jī)或指定的從機(jī),而各從機(jī)發(fā)送的信息只能被主機(jī)接收。各從機(jī)應(yīng)當(dāng)編址,以便主機(jī)能按地址尋找從機(jī)。多機(jī)通信主要靠主、從機(jī)之間正確地設(shè)置與判斷多級通信控制位SM2和發(fā)送、接收到的第9位數(shù)據(jù)。多機(jī)通信時,主機(jī)向從機(jī)發(fā)送的信息分地址和數(shù)據(jù)兩類。以第9數(shù)據(jù)位作區(qū)分標(biāo)志,為0時表示數(shù)據(jù),為1時表示地址。多機(jī)通信之前,需要給各個從機(jī)編址,以方便主機(jī)尋址。第四十五頁,共六十七頁,2022年,8月28日1、硬件連接單片機(jī)構(gòu)成的多機(jī)系統(tǒng)常采用總線型主從式結(jié)構(gòu)。所謂主從式,即在數(shù)個單片機(jī)中,有一個是主機(jī),其余的是從機(jī),從機(jī)要服從主機(jī)的調(diào)度、支配。80C31單片機(jī)的串行口方式2和方式3適于這種主從式的通信結(jié)構(gòu)。當(dāng)然采用不同的通信標(biāo)準(zhǔn)時,還需進(jìn)行相應(yīng)的電平轉(zhuǎn)換,有時還要對信號進(jìn)行光電隔離。在實(shí)際的多機(jī)應(yīng)用系統(tǒng)中,常采用RS-485串行標(biāo)準(zhǔn)總線進(jìn)行數(shù)據(jù)傳輸。第四十六頁,共六十七頁,2022年,8月28日通信開始,當(dāng)主機(jī)欲與某個從機(jī)之間通信時,首先發(fā)送一個地址幀,主機(jī)發(fā)送時,通過設(shè)置TB8位的狀態(tài)來表明發(fā)送的是地址還是數(shù)據(jù),當(dāng)TB8=1時,表示地址幀,當(dāng)TB8=0時,表示數(shù)據(jù)幀。而在從機(jī)方面,為了接收信息,初始化時應(yīng)把SCON的SM2位置l。由于SM2=1,此時接收到的第9數(shù)據(jù)位(即為主機(jī)發(fā)出的TB8)狀態(tài)為1,即RB8=1,所以各從機(jī)都分別將數(shù)據(jù)送SBUF,并置位RI,發(fā)出中斷請求,通過中斷服務(wù)程序來判斷主機(jī)發(fā)送的地址與本從機(jī)地址是否相符。若相符,則把該從機(jī)的SM2位清0,以準(zhǔn)備接收其后傳送來的數(shù)據(jù)。其余從機(jī)由于地址不符,則仍然保持SM2=1狀態(tài)。此后主機(jī)發(fā)送數(shù)據(jù)幀,使TB8=0,雖然各從機(jī)都能接收到,但只有SM2=0的那個被尋址的從機(jī)才把數(shù)據(jù)送接收緩沖器SBUF。其余各從機(jī)皆因SM2=l和RB8=0,表示接收的信息為主機(jī)發(fā)給其他從機(jī)的數(shù)據(jù),而將數(shù)據(jù)舍棄。這就是多機(jī)通信中主從機(jī)的通信情況。通信只能在主從機(jī)之間進(jìn)行,如若進(jìn)行兩個從機(jī)之間的通信,需通過主機(jī)作中介才能實(shí)現(xiàn)。第四十七頁,共六十七頁,2022年,8月28日綜上所述,把多機(jī)通信的過程總結(jié)如下:(1)全部主、從機(jī)均初始化為工作方式2或方式3,置位SM2=1,允許串行口中斷。(2)主機(jī)置位TB8=1,發(fā)送要尋址的從機(jī)地址。(3)所有從機(jī)均接收主機(jī)發(fā)送的地址,并各自進(jìn)入中斷服務(wù)程序,進(jìn)行地址比較。(4)被尋址的從機(jī)確認(rèn)地址后,置本機(jī)SM2=0,并向主機(jī)返回地址供主機(jī)核對。如果地址不符合,該從機(jī)SM2位不變。(5)主機(jī)核對無誤后,向被尋址的從機(jī)發(fā)送命令,通知從機(jī)是進(jìn)行數(shù)據(jù)接收或者數(shù)據(jù)發(fā)送。(6)主從機(jī)之間進(jìn)行數(shù)據(jù)通信。(7)通信結(jié)束后,主、從機(jī)重置SM2=1,再進(jìn)行下一次多機(jī)通信。第四十八頁,共六十七頁,2022年,8月28日2、軟件實(shí)現(xiàn)主機(jī)程序清單:設(shè)從機(jī)地址號存于40H單元,命令存于41H單元。

MAIN:MOVTMOD,#20H;T1方式2 MOVTH1,#0FDH;初始化波特率9600 MOVTL1,#0FDH MOVPCON,#00H SETBTR1 MOVSCON,#0F0H;串口方式3,多機(jī),準(zhǔn)備接收應(yīng)答LOOP1:SETBTB8MOVSBUF,40H;發(fā)送預(yù)通信從機(jī)地址

JNBTI,$ CLRTIJNBRI,$;等待從機(jī)對聯(lián)絡(luò)應(yīng)答

CLRRIMOVA,SBUF;接收應(yīng)答,讀至A XRLA,40H;判應(yīng)答的地址是否正確

JZAD_OK第四十九頁,共六十七頁,2022年,8月28日

AD_ERR:MOVSBUF,#0FFH;應(yīng)答錯誤,發(fā)命令FFHJNBTI,$CLRTISJMPLOOP1;返回重新發(fā)送聯(lián)絡(luò)信號

AD_OK:CLRTB8;應(yīng)答正確

MOVSBUF,41H;發(fā)送命令字

JNBTI,$ CLRTIJNBRI,$ ;等待從機(jī)對命令應(yīng)答

CLRRIMOVA,SBUF;接收應(yīng)答,讀至A XRLA,#80H;判斷應(yīng)答是否正確

JNZCO_OK SETBTB8SJMPAD_ERR;錯誤處理第五十頁,共六十七頁,2022年,8月28日CO_OK:MOVA,SBUF;應(yīng)答正確,判是發(fā)送還是接收命令

XRLA,#01H JZSE_DATA;從機(jī)準(zhǔn)備好接收,可以發(fā)送

MOVA,SBUF XRLA,#02H JZRE_DATA;從機(jī)準(zhǔn)備好發(fā)送,可以接收

LJMPSE_DATARE_DATA:MOVR6,#00H;清校驗(yàn)和接收16個字節(jié)數(shù)據(jù)

MOVR0,#30H MOVR7,#10H第五十一頁,共六十七頁,2022年,8月28日LOOP2:JNBRI,$CLRRIMOVA,SBUF MOV@R0,A INCR0 ADDA,R6 MOVR6,ADJNZR7,LOOP2JNBRI,$ CLRRIMOVA,SBUF;接收校驗(yàn)和并判斷

XRLA,R6 JZXYOK;校驗(yàn)正確

MOVSBUF,#0FFH;校驗(yàn)錯誤

JNBTI,$ CLRTILJMPRE_DATA第五十二頁,共六十七頁,2022年,8月28日XYOK:MOVSBUF,#00H;校驗(yàn)和正確,發(fā)00HJNBTI,$ CLRTISETBTB8;置地址標(biāo)志

LJMPRETENDSE_DATA:MOVR6,#00H;發(fā)送16個字節(jié)數(shù)據(jù)

MOVR0,#30H MOVR7,#10HLOOP3:MOVA,@R0 MOVSBUF,AJNBTI,$ CLRTIINCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP3第五十三頁,共六十七頁,2022年,8月28日

MOVA,R6 MOVSBUF,A;發(fā)校驗(yàn)和

JNBTI,$ CLRTIJNBRI,$ CLRRIMOVA,SBUF XRLA,#00H JZRET_END;從機(jī)接收正確

SJMPSE_DATA;從機(jī)接收不正確,重新發(fā)送

RET_END:RET第五十四頁,共六十七頁,2022年,8月28日從機(jī)程序清單:設(shè)本機(jī)號存于40H單元,41H單元存放“發(fā)送”命令,42H單元存放“接收”命令。

MAIN:MOVTMOD,#20H;初始化串行口

MOVTH1,#0FDH MOVTL1,#0FDHMOVPCON,#00H SETBTR1MOVSCON,#0F0HLOOP1:SETBEA;開中斷

SETBES SETBRRDY;發(fā)送與接收準(zhǔn)備就緒

SETBTRDY SJMPLOOP1第五十五頁,共六十七頁,2022年,8月28日SERVE:PUSHPSW;中斷服務(wù)程序

PUSHACC CLRESCLRRI MOVA,SBUF XRLA,40H;判斷是否本機(jī)地址

JZSER_OK LJMPENDI;非本機(jī)地址,繼續(xù)監(jiān)聽SER_OK:CLRSM2;是本機(jī)地址,取消監(jiān)聽狀態(tài)

MOVSBUF,40H;本機(jī)地址發(fā)回

JNBTI,$ CLRTIJNBRI,$ CLRRIJBRB8,ENDII;是復(fù)位命令,恢復(fù)監(jiān)聽

MOVA,SBUF;不是復(fù)位命令,判是“發(fā)送”還是“接收”

XRLA,41H JZSERISE;收到“發(fā)送”命令,發(fā)送處理

MOVA,SBUF XRLA,42H JZSERIRE;收到“接收”命令,接收處理

SJMPFFML;非法命令,轉(zhuǎn)非法處理第五十六頁,共六十七頁,2022年,8月28日SERISE:JBTRDY,SEND;從機(jī)發(fā)送是否準(zhǔn)備好

MOVSBUF,#00HSJMPWAIT01SEND:MOVSBUF,#02H;返回“發(fā)送準(zhǔn)備好”

WAIT01:JNBTI,$ CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主機(jī)接收是否準(zhǔn)備就緒

LCALLSE_DATA;發(fā)送數(shù)據(jù)

LJMPENDFFML:MOVSBUF,#80H;發(fā)非法命令,恢復(fù)監(jiān)聽

JNBTI,$ CLRTILJMPENDIISERIRE:JBRRDY,RECE;從機(jī)接收是否準(zhǔn)備好

MOVSBUF,#00H SJMPWAIT02第五十七頁,共六十七頁,2022年,8月28日RECE:MOVSBUF,#01H;返回“接收準(zhǔn)備好”WEIT02:JNBTI,$CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主機(jī)發(fā)送是否就緒

LCALLRE_DATA;接收數(shù)據(jù)

LJMPENDENDII:SETBSM2ENDI:SETBESEND:POPACC POPPSW RETI第五十八頁,共六十七頁,2022年,8月28日SE_DATA:CLRTRDY;發(fā)送數(shù)據(jù)塊子程序

MOVR6,#00H MOVR0,#30HMOVR7,#10HLOOP2:MOVA,@R0 MOVSBUF,AJNBTI,$ CLRTIINCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP2;數(shù)據(jù)塊發(fā)送完畢?

MOVA,R6 MOVSBUF,AJNBTI,$;發(fā)送校驗(yàn)和

CLRTIJNBRI,$ CLRRIMOVA,SBUF XRLA,#00H;判發(fā)送是否正確

JZSEND_OK SJMPSE_DATA;發(fā)送錯誤,重發(fā)第五十九頁,共六十七頁,2022年,8月28日SEND_OK:SETBSM2;發(fā)送正確,繼續(xù)監(jiān)聽

SETBES RETRE_DATA:CLRRRDY;接收數(shù)據(jù)塊子程序

MOVR6,#00HMOVR0,#30HMOVR7,#10H第六十頁,共六十七頁,2022年,8月28日LOOP3:JNBRI,$ CLRRIMOVA,SBUFMOV@R0,A INCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP3;接收數(shù)據(jù)塊完畢?

JNBRI,$;接收校驗(yàn)和

CLRRIMOVA,SBUF XRLA,R6;判斷校驗(yàn)和是否正確

JZRECE_OK MOVSBUF,#0FFH;校驗(yàn)和錯誤,發(fā)FFHJNBTI,$ CLRTILJMPRE_DATA;重新接收第六十一頁,共六十七頁,2022年,8月28日RECE_O

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論