80C51的串行口市公開課一等獎省賽課獲獎?wù)n件_第1頁
80C51的串行口市公開課一等獎省賽課獲獎?wù)n件_第2頁
80C51的串行口市公開課一等獎省賽課獲獎?wù)n件_第3頁
80C51的串行口市公開課一等獎省賽課獲獎?wù)n件_第4頁
80C51的串行口市公開課一等獎省賽課獲獎?wù)n件_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章80C51串行口6.280C51串行口6.1計算機串行通信基礎(chǔ)6.3單片機串行口應(yīng)用舉例80C51的串行口第1頁

6.1計算機串行通信基礎(chǔ)

伴隨多微機系統(tǒng)廣泛應(yīng)用和計算機網(wǎng)絡(luò)技術(shù)普及,計算機通信功效愈來愈顯得主要。計算機通信是指計算機與外部設(shè)備或計算機與計算機之間信息交換。通信有并行通信和串行通信兩種方式。在多微機系統(tǒng)以及當(dāng)代測控系統(tǒng)中信息交換多采取串行通信方式。80C51的串行口第2頁

計算機通信能夠分為兩大類:并行通信與串行通信。

1、并行通信:通常是將數(shù)據(jù)字節(jié)各位用多條數(shù)據(jù)線同時進行傳送。優(yōu)點:控制簡單、傳輸速度快;缺點:因為傳輸線較多,長距離傳送時成本高且接收方各位同時接收存在困難。

80C51的串行口第3頁2、串行通信:是將數(shù)據(jù)字節(jié)分成一位一位形式在一條傳輸線上逐一地傳送。優(yōu)點:傳輸線少,長距離傳送時成本低,且能夠利用電話網(wǎng)等現(xiàn)成設(shè)備;缺點:數(shù)據(jù)傳送控制比并行通信復(fù)雜,傳輸速度慢。

80C51的串行口第4頁6.1.1串行通信基本概念

一、異步通信與同時通信

1、異步通信

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

80C51的串行口第5頁

異步通信是以字符(組成幀)為單位進行傳輸,字符與字符之間間隙(時間間隔)是任意,但每個字符中各位是以固定時間傳送,即字符之間是異步(字符之間不一定有“位間隔”整數(shù)倍關(guān)系),但同一字符內(nèi)各位是同時(各位之間距離均為“位間隔”整數(shù)倍)。80C51的串行口第6頁異步通信數(shù)據(jù)格式:異步通信特點:不要求收發(fā)雙方時鐘嚴(yán)格一致,實現(xiàn)輕易,設(shè)備開銷較小,但每個字符要附加2~3位用于起止位,各幀之間還有間隔,所以傳輸效率不高。80C51的串行口第7頁2、同時通信同時通信時要建立發(fā)送方時鐘對接收方時鐘直接控制,使雙方到達完全同時。傳輸數(shù)據(jù)位之間距離均為“位間隔”整數(shù)倍,同時傳送字符間不留間隙,即保持位同時關(guān)系,也保持字符同時關(guān)系。發(fā)送方對接收方同時能夠經(jīng)過兩種方法實現(xiàn)。

外同時自同時80C51的串行口第8頁面向字符同時格式:傳送數(shù)據(jù)和控制信息都必須由要求字符集(如ASCII碼)中字符所組成。

圖中幀頭為1個或2個同時字符SYN(ASCII碼為16H)。SOH為序始字符(ASCII碼為01H),表示標(biāo)題開始,標(biāo)題中包含源地址、目標(biāo)地址和路由指示等信息。STX為文始字符(ASCII碼為02H),表示傳送數(shù)據(jù)塊開始。數(shù)據(jù)塊是傳送正文內(nèi)容,由多個字符組成。80C51的串行口第9頁

數(shù)據(jù)塊后面是組終字符ETB(ASCII碼為17H)或文終字符ETX(ASCII碼為03H)。然后是校驗碼。經(jīng)典面向字符同時規(guī)程如IBM二進制同時規(guī)程BSC。

面向位同時格式:

此時,將數(shù)據(jù)塊看作數(shù)據(jù)流,并用序列01111110作為開始和結(jié)束標(biāo)志。80C51的串行口第10頁

為了防止在數(shù)據(jù)流中出現(xiàn)序列01111110時引發(fā)混亂,發(fā)送方總是在其發(fā)送數(shù)據(jù)流中每出現(xiàn)5個連續(xù)1就插入一個附加0;接收方則每檢測到5個連續(xù)1而且其后有一個0時,就刪除該0。

經(jīng)典面向位同時協(xié)議如ISO高級數(shù)據(jù)鏈路控制規(guī)程HDLC和IBM同時數(shù)據(jù)鏈路控制規(guī)程SDLC。同時通信特點是以特定位組合“01111110”作為幀開始和結(jié)束標(biāo)志,所傳輸一幀數(shù)據(jù)能夠是任意位。所以傳輸效率較高,但實現(xiàn)硬件設(shè)備比異步通信復(fù)雜。

80C51的串行口第11頁二、串行通信傳輸方向1、單工是指數(shù)據(jù)傳輸僅能沿一個方向,不能實現(xiàn)反向傳輸。2、半雙工是指數(shù)據(jù)傳輸能夠沿兩個方向,但需要分時進行。3、全雙工全雙工是指數(shù)據(jù)能夠同時進行雙向傳輸。

單工半雙工全雙工80C51的串行口第12頁

三、信號調(diào)制與解調(diào)

遠距離傳送時利用調(diào)制器(Modulator)把數(shù)字信號轉(zhuǎn)換成模擬信號,然后送到通信線路上去,再由解調(diào)器(Demodulator)把從通信線路上收到模擬信號轉(zhuǎn)換成數(shù)字信號。因為通信是雙向,調(diào)制器和解調(diào)器合并在一個裝置中,這就是調(diào)制解調(diào)器MODEM。80C51的串行口第13頁

四、串行通信錯誤校驗

1、奇偶校驗

在發(fā)送數(shù)據(jù)時,數(shù)據(jù)位尾隨1位為奇偶校驗位(1或0)。奇校驗時,數(shù)據(jù)中“1”個數(shù)與校驗位“1”個數(shù)之和應(yīng)為奇數(shù);偶校驗時,數(shù)據(jù)中“1”個數(shù)與校驗位“1”個數(shù)之和應(yīng)為偶數(shù)。接收字符時,對“1”個數(shù)進行校驗,若發(fā)覺不一致,則說明傳輸數(shù)據(jù)過程中出現(xiàn)了差錯。80C51的串行口第14頁

2、代碼和校驗代碼和校驗是發(fā)送方將所發(fā)數(shù)據(jù)塊求和(或各字節(jié)異或),產(chǎn)生一個字節(jié)校驗字符(校驗和)附加到數(shù)據(jù)塊末尾。接收方接收數(shù)據(jù)同時對數(shù)據(jù)塊(除校驗字節(jié)外)求和(或各字節(jié)異或),將所得結(jié)果與發(fā)送方“校驗和”進行比較,相符則無差錯,不然即認(rèn)為傳送過程中出現(xiàn)了差錯。

3、循環(huán)冗余校驗

這種校驗是經(jīng)過某種數(shù)學(xué)運算實現(xiàn)有效信息與校驗位之間循環(huán)校驗,慣用于對磁盤信息傳輸、存放區(qū)完整性校驗等。這種校驗方法糾錯能力強。80C51的串行口第15頁

五、傳輸速率與傳輸距離

1、傳輸速率(1)比特率:是每秒鐘傳輸二進制代碼位數(shù),單位是:位/秒(bps)。如每秒鐘傳送240個字符,而每個字符格式包含10位(1個起始位、1個停頓位、8個數(shù)據(jù)位),這時比特率為:

10位×240個/秒=2400bps

(2)波特率表示每秒鐘調(diào)制信號改變次數(shù),單位是:波特(Baud)。

80C51的串行口第16頁

波特率和比特率不總是相同,對于將數(shù)字信號1或0直接用兩種不一樣電壓表示所謂基帶傳輸,比特率和波特率是相同。所以,我們也經(jīng)慣用波特率表示數(shù)據(jù)傳輸速率。

2、傳輸距離與傳輸速率關(guān)系串行接口或終端直接傳送串行信息位流最大距離與傳輸速率及傳輸線電氣特征相關(guān)。當(dāng)傳輸線使用每0.3m(約1英尺)有50PF電容非平衡屏蔽雙絞線時,傳輸距離隨傳輸速率增加而減小。當(dāng)比特率超出1000bps時,最大傳輸距離快速下降,如9600bps時最大距離下降到只有76m(約250英尺)。80C51的串行口第17頁

6.1.2串行通信接口標(biāo)準(zhǔn)

一、RS-232C接口

RS-232C是EIA(美國電子工業(yè)協(xié)會)1969年修訂標(biāo)準(zhǔn)。RS-232C定義了數(shù)據(jù)終端設(shè)備(DTE)與數(shù)據(jù)通信設(shè)備(DCE)之間物理接口標(biāo)準(zhǔn)。

1、機械特征

RS-232C接口要求使用25針連接器,連接器尺寸及每個插針排列位置都有明確定義。(陽頭)80C51的串行口第18頁2、功效特征80C51的串行口第19頁

3、電氣特征

RS-232采取負(fù)邏輯電平:-3--15V為邏輯1,+3-+15V為邏輯0。因為與TTL和MOS電平不兼容,連接時必須外加電平轉(zhuǎn)換電路。發(fā)送和接收信號線提議采取多芯電纜,總負(fù)載電容不能超出2500μF。80C51的串行口第20頁RS-232C電平與TTL電平轉(zhuǎn)換驅(qū)動電路:MC1488/148980C51的串行口第21頁

4、過程特征過程特征要求了信號之間時序關(guān)系,方便正確地接收和發(fā)送數(shù)據(jù)

。遠程通信連接80C51的串行口第22頁近程通信連接

80C51的串行口第23頁

5、采取RS-232C接口存在問題

1、傳輸距離短,傳輸速率低

RS-232C總線標(biāo)準(zhǔn)受電容允許值約束,使用時傳輸距離普通不要超出15米(線路條件好時也不超出幾十米)。最高傳送速率為20Kbps。

2、有電平偏移

RS-232C總線標(biāo)準(zhǔn)要求收發(fā)雙方共地。通信距離較大時,收發(fā)雙方地電位差異較大,在信號地上將有比較大地電流并產(chǎn)生壓降。80C51的串行口第24頁3、抗干擾能力差

RS-232C在電平轉(zhuǎn)換時采取單端輸入輸出,在傳輸過程中當(dāng)干擾和噪聲混在正常信號中。為了提升信噪比,RS-232C總線標(biāo)準(zhǔn)不得不采取比較大電壓擺幅。

二、RS-422A接口

RS-422A輸出驅(qū)動器為雙端平衡驅(qū)動器。假如其中一條線為邏輯“1”狀態(tài),另一條線就為邏輯“0”,比采取單端不平衡驅(qū)動對電壓放大倍數(shù)大一倍。80C51的串行口第25頁

差分電路能從地線干擾中拾取有效信號,差分接收器能夠分辨200mV以上電位差。若傳輸過程中混入了干擾和噪聲,因為差分放大器作用,可使干擾和噪聲相互抵消。所以能夠防止或大大減弱地線干擾和電磁干擾影響。RS-422A傳輸速率(90Kbps)時,傳輸距離可達1200米。

80C51的串行口第26頁

三、RS-485接口

RS-485是RS-422A變型:RS-422A用于全雙工,而RS-485則用于半雙工。RS-485是一個多發(fā)送器標(biāo)準(zhǔn),在通信線路上最多能夠使用32對差分驅(qū)動器/接收器。假如在一個網(wǎng)絡(luò)中連接設(shè)備超出32個,還能夠使用中繼器。

80C51的串行口第27頁RS-485信號傳輸采取兩線間電壓來表示邏輯1和邏輯0。因為發(fā)送方需要兩根傳輸線,接收方也需要兩根傳輸線。傳輸線采取差動信道,所以它干擾抑制性極好,又因為它阻抗低,無接地問題,所以傳輸距離可達1200米,傳輸速率可達1Mbps。

RS-485是一點對多點通信接口,普通采取雙絞線結(jié)構(gòu)。

普通PC機普通不帶RS485接口,所以要使用RS-232C/RS-485轉(zhuǎn)換器。對于單片機能夠經(jīng)過芯片MAX485來完成TTL/RS-485電平轉(zhuǎn)換。80C51的串行口第28頁

在計算機和單片機組成RS-485通信系統(tǒng)中,下位機由單片機系統(tǒng)組成,上位機為普通PC機,負(fù)責(zé)監(jiān)視下位機運行狀態(tài),并對其狀態(tài)信息進行集中處理,以圖文方式顯示下位機工作狀態(tài)以及工業(yè)現(xiàn)場被控設(shè)備工作情況。系統(tǒng)中各節(jié)點(包含上位機)識別是經(jīng)過設(shè)置不一樣站地址來實現(xiàn)。80C51的串行口第29頁6.280C51串行口

有兩個物理上獨立接收、發(fā)送緩沖器SBUF,它們占用同一地址99H;接收器是雙緩沖結(jié)構(gòu);發(fā)送緩沖器,因為發(fā)送時CPU是主動,不會產(chǎn)生重合錯誤。

6.2.180C51串行口結(jié)構(gòu)

80C51的串行口第30頁

SCON

是一個特殊功效存放器,用以設(shè)定串行口工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志:

6.2.280C51串行口控制存放器

SM0和SM1為工作方式選擇位,可選擇四種工作方式:

80C51的串行口第31頁●

SM2:多機通信控制位,主要用于方式2和方式3。當(dāng)接收機SM2=1時能夠利用收到RB8來控制是否激活RI(RB8=0時不激活RI,收到信息丟棄;RB8=1時收到數(shù)據(jù)進入SBUF,并激活RI,進而在中止服務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時,不論收到RB8為0和1,均能夠使收到數(shù)據(jù)進入SBUF,并激活RI(即此時RB8不含有控制RI激活功效)。經(jīng)過控制SM2,能夠?qū)崿F(xiàn)多機通信。在方式0時,SM2必須是0。在方式1時,若SM2=1,則只有接收到有效停頓位時,RI才置1?!馬EN:允許串行接收位。由軟件置REN=1,則開啟串行口接收數(shù)據(jù);若軟件置REN=0,則禁止接收。80C51的串行口第32頁●

TB8:在方式2或方式3中,是發(fā)送數(shù)據(jù)第九位,能夠用軟件要求其作用。能夠用作數(shù)據(jù)奇偶校驗位,或在多機通信中,作為地址幀/數(shù)據(jù)幀標(biāo)志位。在方式0和方式1中,該位未用。●RB8:在方式2或方式3中,是接收到數(shù)據(jù)第九位,作為奇偶校驗位或地址幀/數(shù)據(jù)幀標(biāo)志位。在方式1時,若SM2=0,則RB8是接收到停頓位。80C51的串行口第33頁●

TI:發(fā)送中止標(biāo)志位。在方式0時,當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行發(fā)送停頓位開始時,由內(nèi)部硬件使TI置1,向CPU發(fā)中止申請。在中止服務(wù)程序中,必須用軟件將其清0,取消此中止申請。●RI:接收中止標(biāo)志位。在方式0時,當(dāng)串行接收第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行接收停頓位中間時,由內(nèi)部硬件使RI置1,向CPU發(fā)中止申請。也必須在中止服務(wù)程序中,用軟件將其清0,取消此中止申請。80C51的串行口第34頁SCON設(shè)置方法:

例1:將串行口設(shè)置為工作方式1,發(fā)送解:MOVSCON,#01000000B

例2:將串行口設(shè)置為工作方式1,接收解:MOVSCON,#01010000B

例3:將串行口設(shè)置為工作方式3,接收解:MOVSCON,#11110000B80C51的串行口第35頁PCON中只有一位SMOD與串行口工作相關(guān)

SMOD(PCON.7)波特率倍增位。在串行口方式1、方式2、方式3時,波特率與SMOD相關(guān),當(dāng)SMOD=1時,波特率提升一倍。復(fù)位時,SMOD=0。80C51的串行口第36頁

6.2.380C51串行口工作方式

一、方式0

方式0時,串行口為同時移位存放器輸入輸出方式。主要用于擴展并行輸入或輸出口。數(shù)據(jù)由RXD(P3.0)引腳輸入或輸出,同時移位脈沖由TXD(P3.1)引腳輸出。發(fā)送和接收均為8位數(shù)據(jù),低位在先,高位在后。波特率固定為fosc/12。

1、方式0輸出80C51的串行口第37頁

2、方式0輸入

方式0接收和發(fā)送電路80C51的串行口第38頁方式0應(yīng)用舉例:80C51串行口工作在方式0,外接移位存放器CD4094RXDTXDP1.080C51STBCLKABGNDCD4094并接8個顯示燈,使顯示燈從右至左輪番顯示。解:硬件連接以下,STB接P1.0為控制端,STB=1打開并行門數(shù)據(jù)輸出。串口采取查詢方式工作。參考程序:

org0100hmain:movscon,#00h movA,#01h crlp1.0start:movsbuf,Alop: jnbTI,lopsetbp1.0

acalldelay

crlTIrLAcrlp1.0sjmpstartdelay:…end80C51的串行口第39頁

二、方式1

方式1是10位數(shù)據(jù)異步通信口。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳,傳送一幀數(shù)據(jù)格式如圖所表示。其中1位起始位,8位數(shù)據(jù)位,1位停頓位。

1、方式1輸出80C51的串行口第40頁

2、方式1輸入

用軟件置REN為1時,接收器以所選擇波特率16倍速率采樣RXD引腳電平,檢測到RXD引腳輸入電平發(fā)生負(fù)跳變時,則說明起始位有效,將其移入輸入移位存放器,并開始接收這一幀信息其余位。接收過程中,數(shù)據(jù)從輸入移位存放器右邊移入,起始位移至輸入移位存放器最左邊時,控制電路進行最終一次移位。當(dāng)RI=0,且SM2=0(或接收到停頓位為1)時,將接收到9位數(shù)據(jù)前8位數(shù)據(jù)裝入接收SBUF,第9位(停頓位)進入RB8,并置RI=1,向CPU請求中止。80C51的串行口第41頁

三、方式2和方式3

方式2或方式3時為11位數(shù)據(jù)異步通信口。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳。

方式2和方式3時起始位1位,數(shù)據(jù)9位(含1位附加第9位,發(fā)送時為SCON中TB8,接收時為RB8),停頓位1位,一幀數(shù)據(jù)為11位。方式2波特率固定為晶振頻率1/64或1/32,方式3波特率由定時器T1溢出率決定。

80C51的串行口第42頁

1、方式2和方式3輸出

發(fā)送開始時,由軟件設(shè)置TB8,將要發(fā)送數(shù)據(jù)寫入SBUF,并將TB8裝入移位存放器第九位,開啟發(fā)送,由TXD引腳輸出。發(fā)送完一幀信息后,自動置TI=1,向CPU請求中止。在發(fā)送下一幀信息之前,TI必須清零。80C51的串行口第43頁

2、方式2和方式3輸入

REN=1,允許接收,當(dāng)接收器采樣到RXD端負(fù)跳變,判斷起始位有效后,數(shù)據(jù)由RXD輸入,移入輸入移位存放器,在起始位0移到最左邊時,控制電路進行最終一次移位。當(dāng)RI=0,且SM2=0(或接收到第9位數(shù)據(jù)為1)時,接收到數(shù)據(jù)裝入接收緩沖器SBUF和RB8(接收數(shù)據(jù)第9位),置RI=1,向CPU請求中止。假如條件不滿足,則數(shù)據(jù)丟失。80C51的串行口第44頁

四、波特率計算

在串行通信中,收發(fā)雙方對發(fā)送或接收數(shù)據(jù)速率要有約定。經(jīng)過軟件可對單片機串行口編程為四種工作方式,其中方式0和方式2波特率是固定,而方式1和方式3波特率是可變,由定時器T1溢出率來決定。串行口四種工作方式對應(yīng)三種波特率。因為輸入移位時鐘起源不一樣,所以,各種方式波特率計算公式也不相同。方式0波特率=fosc/12

方式2波特率=(2SMOD/64)·fosc

方式1波特率=(2SMOD/32)·(T1溢出率)方式3波特率=(2SMOD/32)·(T1溢出率)80C51的串行口第45頁定時器1溢出率:(1)溢出率取決于計數(shù)速率和定時器預(yù)置值X。(2)溢出率與工作方式相關(guān):當(dāng)定時時計數(shù)速率為fosc/12;計數(shù)時速率和外部輸入時時鐘相關(guān)。(3)假如T1工作在方式2,計算初值為X,則每過256-X個Tcy(機器周期),定時器T1將溢出一次,故溢出周期為:(256-X)/Tcy=12*(256-X)/fosc。(4)溢出率為溢出周期倒數(shù):fosc/[12*(256-X)]。80C51的串行口第46頁

方式1和方式3波特率可變,由下式?jīng)Q定

當(dāng)T1采取方式2時由下式?jīng)Q定T1定時初值:80C51的串行口第47頁

當(dāng)T1作為波特率發(fā)生器時,最經(jīng)典使用方法是使T1工作在自動再裝入8位定時器方式(即方式2,且TCONTR1=1,以開啟定時器)。這時溢出率取決于TH1中計數(shù)值。

T1溢出率=fosc/{12×[256-(TH1)]}

在單片機應(yīng)用中,慣用晶振頻率為:12MHz和11.0592MHz。所以,選取波特率也相對固定。慣用串行口波特率以及各參數(shù)關(guān)系如表所表示。80C51的串行口第48頁

80C51的串行口第49頁

串行口工作之前,應(yīng)對其進行初始化,主要是設(shè)置產(chǎn)生波特率定時器1、串行口控制和中止控制。詳細步驟以下:確定T1工作方式(編程TMOD存放器);計算T1初值,裝載TH1、TL1;開啟T1(編程TCON中TR1位);確定串行口控制(編程SCON存放器);串行口在中止方式工作時,要進行中止設(shè)置(編程IE、IP存放器)。80C51的串行口第50頁

雙機通信舉例設(shè):甲機發(fā)送乙機接收,串行口工作在方式1,波特率為1200fosc=11.0592MHz

硬件連接如圖:

計算時間常數(shù):

TXDRXD

GNDRXDTXDGND

T1作為波特率發(fā)生器,工作于方式2。由表查得時間常數(shù)為E8H。

雙機通信乙甲80C51的串行口第51頁

甲機發(fā)送程序

開始T1方式2,裝入時間常數(shù) 開啟T1

置SCON方式1發(fā)送傳送數(shù)據(jù)首地址和字節(jié)數(shù) 取數(shù)據(jù) 置校驗位

開啟發(fā)送

發(fā)完否?清TI

修正地址和計數(shù)全部發(fā)完?結(jié)束80C51的串行口第52頁

甲機將內(nèi)部RAM單元20H~3FH32個字節(jié)ASCII碼數(shù)據(jù),在最高位上加奇校驗位后,由串行口TXD發(fā)送給乙機。

ORG0030HSTART:MOVTMOD,#20H;T1為方式2

MOVTL1,#0E8H;時間常數(shù)低8位

MOVTH1,#0E8H;波特率1200SETBTR1;開啟T1工作

MOVSCON,#01000000B;串行口方式1

MOVR0,#20H;數(shù)據(jù)首地址

MOVR7,#32;32字節(jié)數(shù)據(jù)80C51的串行口第53頁LOOP:MOVA,@R0;取數(shù)據(jù)

MOVC,P;置奇校驗位

CPLCMOVACC.7,C

MOVSBUF,A

;開啟發(fā)送DONE:JNBTI,DONE;等候發(fā)完一幀

CLRTI;清TI,允許再發(fā)送

INCR0;指向下一數(shù)據(jù)

DJNZR7,LOOP;未送完,送下一個數(shù)

AJMP$END返回80C51的串行口第54頁

開始

T1方式2接收 開啟T1

置SCON方式1接收接收數(shù)據(jù)首地址和字節(jié)數(shù) 等候接收 清RI

接收數(shù)據(jù)檢驗校驗位偶校驗?存放數(shù)據(jù)修正地址接收完?結(jié)束乙機接收程序80C51的串行口第55頁

乙機接收程序:接收器把接收到32個字節(jié)數(shù)據(jù)存放在內(nèi)部RAM20H~3FH中,波特率與晶振頻率同上。若奇校驗犯錯,則置進位位1。程序以下:

ORG0030HSTART:MOVTMOD,#20H;T1方式2

MOVTL1,#OE8H ;波特率與發(fā)送相同

MOVTH1,#OE8HSETBTR1MOVR0,#20HMOVR7,#32LOOP:MOVSCON,#01010000B;串行口方式1,能接收80C51的串行口第56頁DONE:JNBRI,DONE;等候接收一幀

CLRRI;清RI,再接收

MOVA,SBUF;取數(shù)據(jù)

JNBP,ERROR;校驗錯,轉(zhuǎn)犯錯處理

ANLA,#7FH;去掉奇校驗位

MOV@R0,A;存數(shù)據(jù)

INCR0;指向下一數(shù)據(jù)

DJNZR7,LOOP;數(shù)據(jù)塊,未接收完,循環(huán)

AJMP$ERROR:…;犯錯處理從略

END返回80C51的串行口第57頁6.3單片機串行口應(yīng)用舉例

在計算機分布式測控系統(tǒng)中,經(jīng)常要利用串行通信方式進行數(shù)據(jù)傳輸。80C51單片機串行口為計算機間通信提供了極為便利條件。利用單片機串行口還能夠方便地擴展鍵盤和顯示器,對于簡單應(yīng)用非常便利。這里僅介紹單片機串行口在通信方面應(yīng)用,關(guān)于鍵盤和顯示器擴展將在下一章介紹。80C51的串行口第58頁6.3.1單片機與單片機通信

一、點對點通信

1、硬件連接

80C51的串行口第59頁2、應(yīng)用程序

80C51的串行口第60頁

設(shè)1號機是發(fā)送方,2號機是接收方。當(dāng)1號機發(fā)送時,先發(fā)送一個“E1”聯(lián)絡(luò)信號,2號機收到后回答一個“E2”應(yīng)答信號,表示同意接收。當(dāng)1號機收到應(yīng)答信號“E2”后,開始發(fā)送數(shù)據(jù),每發(fā)送一個數(shù)據(jù)字節(jié)都要計算“校驗和”,假定數(shù)據(jù)塊長度為16個字節(jié),起始地址為40H,一個數(shù)據(jù)塊發(fā)送完成后馬上發(fā)送“校驗和”。2號機接收數(shù)據(jù)并轉(zhuǎn)存到數(shù)據(jù)緩沖區(qū),起始地址也為40H,每接收到一個數(shù)據(jù)字節(jié)便計算一次“校驗和”,當(dāng)收到一個數(shù)據(jù)塊后,再接收1號機發(fā)來“校驗和”,并將它與2號機求出校驗和進行比較。80C51的串行口第61頁

若二者相等,說明接收正確,2號機回答00H;若二者不相等,說明接收不正確,2號機回答0FFH,請求重發(fā)。1號機接到00H后結(jié)束發(fā)送。若收到回復(fù)非零,則重新發(fā)送數(shù)據(jù)一次。雙方約定采取串行口方式1進行通信,一幀信息為10位,其中有1個起始位、8個數(shù)據(jù)位和一個停頓位;波特率為2400波特,T1工作在定時器方式2,振蕩頻率選取11.0592MHZ,查表可得TH1=TL1=0F4H,PCON存放器SMOD位為0。

80C51的串行口第62頁發(fā)送程序清單以下:

ASTART:CLREAMOVTMOD,#20H;定時器1置為方式2MOVTH1,#0F4H;裝載定時器初值,波特率2400MOVTL1,#0F4HMOVPCON,#00HSETBTR1;開啟定時器

MOVSCON,#50H;設(shè)定串口方式1,且準(zhǔn)備接收應(yīng)答信號

ALOOP1:MOVSBUF,#0E1H;發(fā)聯(lián)絡(luò)信號

JNBTI,$;等候一幀發(fā)送完成

CLRTI;允許再發(fā)送

80C51的串行口第63頁

JNBRI,$;等候2號機應(yīng)答信號

CLRRI;允許再接收

MOVA,SBUF;2號機應(yīng)答后,讀至A XRLA,#0E2H;判斷2號機是否準(zhǔn)備完成

JNZALOOP1;2號機未準(zhǔn)備好,繼續(xù)聯(lián)絡(luò)ALOOP2:MOVR0,#40H;2號機準(zhǔn)備好,設(shè)定數(shù)據(jù)塊地 址指針初值

MOVR7,#10H;設(shè)定數(shù)據(jù)塊長度初值

MOVR6,#00H;清校驗和單元ALOOP3:MOVSBUF,@R0;發(fā)送一個數(shù)據(jù)字節(jié)

MOVA,R6ADDA,@R0 ;求校驗和

MOVR6,A ;保留校驗和

INCR0JNBTI,$80C51的串行口第64頁

CLRTIDJNZR7,ALOOP3;整個數(shù)據(jù)塊是否發(fā)送完成

MOVSBUF,R6;發(fā)送校驗和

JNBTI,$CLRTIJNBRI,$;等候2號機應(yīng)答信號

CLRRIMOVA,SBUF;2號機應(yīng)答,讀至AJNZALOOP2;2號機應(yīng)答“錯誤”,轉(zhuǎn)重新發(fā)送

RET;2號機應(yīng)答“正確”,返回80C51的串行口第65頁接收程序清單以下:BSTART:CLREAMOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HMOVPCON,#00HSETBTR1MOVSCON,#50H;設(shè)定串口方式1,且準(zhǔn)備接收

BLOOP1:JNBRI,$;等候1號機聯(lián)絡(luò)信號

CLRRIMOVA,SBUF;收到1號機信號

XRLA,#0E1H;判是否為1號機聯(lián)絡(luò)信號

JNZBLOOP1;不是1號機聯(lián)絡(luò)信號,再等候

80C51的串行口第66頁MOVSBUF,#0E2H;是1號機聯(lián)絡(luò)信號,發(fā)應(yīng)答信號

JNBTI,$CLRTIMOVR0,#40H;設(shè)定數(shù)據(jù)塊地址指針初值

MOVR7,#10H;設(shè)定數(shù)據(jù)塊長度初值

MOVR6,#00H;清校驗和單元BLOOP2:JNBRI,$CLRRIMOVA,SBUFMOV@R0,A;接收數(shù)據(jù)轉(zhuǎn)儲

INCR0ADDA,R6;求校驗和80C51的串行口第67頁 MOVR6,ADJNZR7,BLOOP2;判數(shù)據(jù)塊是否接收完成

JNBRI,$;完成,接收1號機發(fā)來校驗和

CLRRIMOVA,SBUFXRLA,R6;比較校驗和

JZEND1;校驗和相等,跳至發(fā)正確標(biāo)志

MOVSBUF,#0FFH;校驗和不相等,發(fā)錯誤標(biāo)志

JNBTI,$;轉(zhuǎn)重新接收

CLRTIEND1:MOVSBUF,#00HRET80C51的串行口第68頁二、多機通信

1、硬件連接

單片機組成多機系統(tǒng)常采取總線型主從式結(jié)構(gòu)。所謂主從式,即在數(shù)個單片機中,有一個是主機,其余是從機,從機要服從主機調(diào)度、支配。80C31單片機串行口方式2和方式3適于這種主從式通信結(jié)構(gòu)。當(dāng)然采取不一樣通信標(biāo)按時,還需進行對應(yīng)電平轉(zhuǎn)換,有時還要對信號進行光電隔離。在實際多機應(yīng)用系統(tǒng)中,常采取RS-485串行標(biāo)準(zhǔn)總線進行數(shù)據(jù)傳輸。80C51的串行口第69頁2、通信協(xié)議全部從機SM2位置1,處于接收地址幀狀態(tài)。主機發(fā)送一地址幀,其中8位是地址,第9位為地址/數(shù)據(jù)區(qū)分標(biāo)志,該位置1表示該幀為地址幀。全部從機收到地址幀后,都將接收地址與本機地址比較。對于地址相符從機,使自己SM2位置0(以接收主機隨即發(fā)來數(shù)據(jù)幀),并把本站地址發(fā)回主機作為應(yīng)答;對于地址不符從機,仍保持SM2=1,對主機隨即發(fā)來數(shù)據(jù)幀不予理會。從機發(fā)送數(shù)據(jù)結(jié)束后,要發(fā)送一幀校驗和,并置第9位(TB8)為1,作為從機數(shù)據(jù)傳送結(jié)束標(biāo)志。80C51的串行口第70頁

主機接收數(shù)據(jù)時先判斷數(shù)據(jù)接收標(biāo)志(RB8),若RB8=1,表示數(shù)據(jù)傳送結(jié)束,并比較此幀校驗和,若正確則回送正確信號00H,此信號命令該從機復(fù)位(即重新等候地址幀);若校驗和犯錯,則發(fā)送0FFH,命令該從機重發(fā)數(shù)據(jù)。若接收幀RB8=0,則存數(shù)據(jù)到緩沖區(qū),并準(zhǔn)備接收下幀信息。主機收到從機應(yīng)答地址后,確認(rèn)地址是否相符,假如地址不符,發(fā)復(fù)位信號(數(shù)據(jù)幀中TB8=1);假如地址相符,則清TB8,開始發(fā)送數(shù)據(jù)。從機收到復(fù)位命令后回到監(jiān)聽地址狀態(tài)(SM2=1)。不然開始接收數(shù)據(jù)和命令。80C51的串行口第71頁3、應(yīng)用程序主機發(fā)送地址聯(lián)絡(luò)信號為:00H,01H,02H,…(即從機設(shè)備地址),地址FFH為命令各從機復(fù)位,即恢復(fù)SM2=1。主機命令編碼為:01H,主機命令從機接收數(shù)據(jù);02H,主機命令從機發(fā)送數(shù)據(jù)。其它都按02H對待。RRDY=1:表示從機準(zhǔn)備好接收。TRDY=1:表示從機準(zhǔn)備好發(fā)送。ERR=1:表示從機接收命令是非法。

程序分為主機程序和從機程序。約定一次傳遞數(shù)據(jù)為16個字節(jié),以01H地址從機為例。

80C51的串行口第72頁主機程序清單:設(shè)從機地址號存于40H單元,命令存于41H單元。

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

JNBTI,$ CLRTI

80C51的串行口第73頁 JNBRI,$ ;等候從機對聯(lián)絡(luò)應(yīng)答

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

JZAD_OKAD_ERR:MOVSBUF,#0FFH;應(yīng)答錯誤,發(fā)命令FFHJNBTI,$CLRTISJMPLOOP1;返回重新發(fā)送聯(lián)絡(luò)信號80C51的串行口第74頁AD_OK:CLRTB8;應(yīng)答正確

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

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

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

JNZCO_OK SETBTB8SJMPAD_ERR;錯誤處理80C51的串行口第75頁CO_OK:MOVA,SBUF;應(yīng)答正確,判是發(fā)送還是 接收命令

XRLA,#01HJZSE_DATA;從機準(zhǔn)備好接收,能夠發(fā)送

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

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

MOVR0,#30H MOVR7,#10H80C51的串行口第76頁LOOP2:JNBRI,$CLRRIMOVA,SBUFMOV@R0,A INCR0ADDA,R6 MOVR6,ADJNZR7,LOOP2JNBRI,$ CLRRIMOVA,SBUF;接收校驗和并判斷

XRLA,R6 JZXYOK;校驗正確

80C51的串行口第77頁 MOVSBUF,#0FFH ;校驗錯誤

JNBTI,$CLRTILJMPRE_DATAXYOK:MOVSBUF,#00H ;校驗和正確,發(fā)00H JNBTI,$ CLRTISETBTB8 ;置地址標(biāo)志

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

MOVR0,#30H MOVR7,#10H80C51的串行口第78頁LOOP3:MOVA,@R0 MOVSBUF,AJNBTI,$ CLRTIINCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP3 MOVA,R6 MOVSBUF,A ;發(fā)校驗和

JNBTI,$CLRTIJNBRI,$80C51的串行口第79頁

CLRRIMOVA,SBUF XRLA,#00H JZRET_END;從機接收正確

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

RET_END:RET從機程序清單:設(shè)本機號存于40H單元,41H單元存放“發(fā)送”命令,42H單元存放“接收”命令。80C51的串行口第80頁MAIN:MOVTMOD,#20H;初始化串行口

MOVTH1,#0FDH MOVTL1,#0FDHMOVPCON,#00H SETBTR1MOVSCON,#0F0H

LOOP1:SETBEA;開中止

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

SETBTRDY SJMPLOOP180C51的串行口第81頁SERVE:PUSHPSW;中止服務(wù)程序

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

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

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

JNBTI,$ CLRTIJNBRI,$

80C51的串行口第82頁CLRRIJBRB8,ENDII;是復(fù)位命令,恢復(fù)監(jiān)聽

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

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

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

SJMPFFML;非法命令,轉(zhuǎn)非法處理SERISE:JBTRDY,SEND;從機發(fā)送是否準(zhǔn)備好

MOVSBUF,#00HSJMPWAIT01SEND:MOVSBUF,#02H;返回“發(fā)送準(zhǔn)備好”80C51的串行口第83頁WAIT01:JNBTI,$ CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主機接收是否準(zhǔn)備就緒

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

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

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

MOVSBUF,#00H SJMPWAIT0280C51的串行口第84頁RECE:MOVSBUF,#01H;返回“接收準(zhǔn)備好”WEIT02:JNBTI,$CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主機發(fā)送是否就緒

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

LJMPENDENDII:SETBSM2ENDI:SETBESEND:POPACC POPPSW RETI80C51的串行口第85頁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

80C51的串行口第86頁 MOVSBUF,AJNBTI,$;發(fā)送校驗和

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

JZSEND_OK SJMPSE_DATA;發(fā)送錯誤,重發(fā)SEND_OK:SETBSM2;發(fā)送正確,繼續(xù)監(jiān)聽

SETBES RET80C51的串行口第87頁RE_DATA:CLRRRDY;接收數(shù)據(jù)塊子程序

MOVR6,#00HMOVR0,#30HMOVR7,#10HLOOP3: JNBRI,$ CLRRI MOVA,SBUF MOV@R0,A INCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP3;接收數(shù)據(jù)塊完成?80C51的串行口第88頁

JNBRI,$ ;接收校驗和

CLRRIMOVA,SBUF XRLA,R6 ;判斷校驗和是否正確

溫馨提示

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

最新文檔

評論

0/150

提交評論