80C51的串行口課件_第1頁
80C51的串行口課件_第2頁
80C51的串行口課件_第3頁
80C51的串行口課件_第4頁
80C51的串行口課件_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1

80C51的串行口

2

6.1電腦串行通信基礎(chǔ)

隨著多微機系統(tǒng)的廣泛應(yīng)用和電腦網(wǎng)絡(luò)技術(shù)的普及,電腦的通信功能愈來愈顯得重要。電腦通信是指電腦與外部設(shè)備或電腦與電腦之間的資訊交換。通信有並行通信和串行通信兩種方式。在多微機系統(tǒng)以及現(xiàn)代測控系統(tǒng)中資訊的交換多採用串行通信方式。電腦通信是將電腦技術(shù)和通信技術(shù)的相結(jié)合,完成電腦與外部設(shè)備或電腦與電腦之間的資訊交換??梢苑譃閮纱箢悾簛K行通信與串行通信。並行通信通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時進行傳送。並行通信控制簡單、傳輸速度快;由於傳輸線較多,長距離傳送時成本高且接收方的各位同時接收存在困難。

4

串行通信是將數(shù)據(jù)字節(jié)分成一位一位的形式在一條傳輸線上逐個地傳送。串行通信的特點:傳輸線少,長距離傳送時成本低,且可以利用電話網(wǎng)等現(xiàn)成的設(shè)備,但數(shù)據(jù)的傳送控制比並行通信複雜。

5

6.1.1串行通信的基本概念

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

6

非同步通信是以字元(構(gòu)成的幀)為單位進行傳輸,字元與字元之間的間隙(時間間隔)是任意的,但每個字元中的各位是以固定的時間傳送的,即字元之間是非同步的(字元之間不一定有“位間隔”的整數(shù)倍的關(guān)係),但同一字元內(nèi)的各位是同步的(各位之間的距離均為“位間隔”的整數(shù)倍)。7

非同步通信的數(shù)據(jù)格式:一幀包含內(nèi)容:起始位(1位,低電平);數(shù)據(jù)位(5~8位);奇偶校驗位(1位);停止位(1~2位,高電平)從起始位到停止位結(jié)束的時間週期稱為1幀。例如:用ASCII碼編碼傳送,數(shù)據(jù)位為7位,加一個奇偶校驗位、一個起始位及一個停止位,每幀共10位。低位高位8

相鄰兩個字元之間的間隔可以是任意長度的,兩個相鄰字元之間根據(jù)需要插入任意個高電平的空閒位。例如:字元A(ASCII碼)非同步通信的幀格式,設(shè)採用偶校驗,1位停止位。非同步通信的特點:不要求收發(fā)雙方時鐘的嚴格一致,實現(xiàn)容易,設(shè)備開銷較小,但每個字元要附加2~3位用於起止位,各幀之間還有間隔,因此傳輸效率不高。

0100000101數(shù)據(jù)位起始位偶校驗位停止位9

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

外同步自同步10

面向字元的同步格式:此時,傳送的數(shù)據(jù)和控制資訊都必須由規(guī)定的字元集(如ASCII碼)中的字元所組成。圖中幀頭為1個或2個同步字元SYN(ASCII碼為16H)。SOH為序始字元(ASCII碼為01H),表示標題的開始,標題中包含源地址、目標地址和路由指示等資訊。STX為文始字元(ASCII碼為02H),表示傳送的數(shù)據(jù)塊開始。數(shù)據(jù)塊是傳送的正文內(nèi)容,由多個字元組成。數(shù)據(jù)塊後面是組終字元ETB(ASCII碼為17H)或文終字元ETX(ASCII碼為03H)。然後是校驗碼。典型的面向字元的同步規(guī)程如IBM的二進位同步規(guī)程BSC。

11

面向位的同步格式:此時,將數(shù)據(jù)塊看作數(shù)據(jù)流,並用序列01111110作為開始和結(jié)束標誌。為了避免在數(shù)據(jù)流中出現(xiàn)序列01111110時引起的混亂,發(fā)送方總是在其發(fā)送的數(shù)據(jù)流中每出現(xiàn)5個連續(xù)的1就插入一個附加的0;接收方則每檢測到5個連續(xù)的1並且其後有一個0時,就刪除該0。典型的面向位的同步協(xié)議如國際標準化組織ISO的高級資料鏈路控制規(guī)程HDLC和IBM的同步資料鏈路控制規(guī)程SDLC。同步通信的特點是以特定的位組合“01111110”作為幀的開始和結(jié)束標誌,所傳輸?shù)囊粠瑪?shù)據(jù)可以是任意位。所以傳輸?shù)男瘦^高,但實現(xiàn)的硬體設(shè)備比非同步通信複雜。

12

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

單工半雙工全雙工13

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

利用調(diào)製器(Modulator)把數(shù)字信號轉(zhuǎn)換成模擬信號,然後送到通信線路上去,再由解調(diào)器(Demodulator)把從通信線路上收到的模擬信號轉(zhuǎn)換成數(shù)字信號。由於通信是雙向的,調(diào)製器和解調(diào)器合併在一個裝置中,這就是數(shù)據(jù)機MODEM。

14

四、串行通信的錯誤校驗

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ā)現(xiàn)不一致,則說明傳輸數(shù)據(jù)過程中出現(xiàn)了差錯。2、代碼和校驗代碼和校驗是發(fā)送方將所發(fā)數(shù)據(jù)塊求和(或各位元組異或),產(chǎn)生一個位元組的校驗字元(校驗和)附加到數(shù)據(jù)塊末尾。接收方接收數(shù)據(jù)同時對數(shù)據(jù)塊(除校驗位元組外)求和(或各位元組異或),將所得的結(jié)果與發(fā)送方的“校驗和”進行比較,相符則無差錯,否則即認為傳送過程中出現(xiàn)了差錯。3、迴圈冗餘校驗這種校驗是通過某種數(shù)學運算實現(xiàn)有效資訊與校驗位之間的迴圈校驗,常用於對磁片資訊的傳輸、存儲區(qū)的完整性校驗等。這種校驗方法糾錯能力強,廣泛應(yīng)用於同步通信中。15

五、傳輸速率與傳輸距離

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

10位×240個/秒=2400bps串列傳輸速率表示每秒鐘調(diào)製信號變化的次數(shù),單位是:波特(Baud)。串列傳輸速率和比特率不總是相同的,對於將數(shù)字信號1或0直接用兩種不同電壓表示的所謂基帶傳輸,比特率和串列傳輸速率是相同的。所以,我們也經(jīng)常用串列傳輸速率表示數(shù)據(jù)的傳輸速率。16

2、傳輸距離與傳輸速率的關(guān)係串行介面或終端直接傳送串行資訊位流的最大距離與傳輸速率及傳輸線的電氣特性有關(guān)。當傳輸線使用每0.3m(約1英尺)有50PF電容的非平衡遮罩雙絞線時,傳輸距離隨傳輸速率的增加而減小。當比特率超過1000bps時,最大傳輸距離迅速下降,如9600bps時最大距離下降到只有76m(約250英尺)。17

6.1.2串行通信介面標準

一、RS-232C介面RS-232C是EIA(美國電子工業(yè)協(xié)會)1969年修訂RS-232C標準。RS-232C定義了數(shù)據(jù)終端設(shè)備(DTE)與數(shù)據(jù)通信設(shè)備(DCE)之間的物理介面標準。1、機械特性RS-232C介面規(guī)定使用25針連接器,連接器的尺寸及每個插針的排列位置都有明確的定義。(陽頭)

18

2、功能特性

19

4、過程特性過程特性規(guī)定了信號之間的時序關(guān)係,以便正確地接收和發(fā)送數(shù)據(jù)

。遠程通信連接20

近程通信連接21

5、RS-232C電平與TTL電平轉(zhuǎn)換驅(qū)動電路22

6、採用RS-232C介面存在的問題1、傳輸距離短,傳輸速率低

RS-232C匯流排標準受電容允許值的約束,使用時傳輸距離一般不要超過15米(線路條件好時也不超過幾十米)。最高傳送速率為20Kbps。2、有電平偏移

RS-232C匯流排標準要求收發(fā)雙方共地。通信距離較大時,收發(fā)雙方的地電位差別較大,在信號地上將有比較大的地電流並產(chǎn)生壓降。3、抗干擾能力差

RS-232C在電平轉(zhuǎn)換時採用單端輸入輸出,在傳輸過程中當干擾和雜訊混在正常的信號中。為了提高信噪比,RS-232C匯流排標準不得不採用比較大的電壓擺幅。23

二、RS-422A介面

RS-422A是平衡型電壓數(shù)字介面電路的電氣標準

,輸出驅(qū)動器為雙端平衡驅(qū)動器。如果其中一條線為邏輯“1”狀態(tài),另一條線就為邏輯“0”,比採用單端不平衡驅(qū)動對電壓的放大倍數(shù)大一倍。差分電路能從地線干擾中拾取有效信號,差分接收器可以分辨200mV以上電位差。若傳輸過程中混入了干擾和雜訊,由於差分放大器的作用,可使干擾和雜訊相互抵消。因此可以避免或大大減弱地線干擾和電磁干擾的影響。RS-422A傳輸速率(90Kbps)時,傳輸距離可達1200米。

24

三、RS-485介面

RS-485是RS-422A的變型:RS-422A用於全雙工,而RS-485則用於半雙工。RS-485是一種多發(fā)送器標準,在通信線路上最多可以使用32對差分驅(qū)動器/接收器。如果在一個網(wǎng)路中連接的設(shè)備超過32個,還可以使用中繼器。

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

RS-485是一點對多點的通信介面,一般採用雙絞線的結(jié)構(gòu)。普通的PC機一般不帶RS485介面,因此要使用RS-232C/RS-485轉(zhuǎn)換器。對於單片機可以通過晶片MAX485來完成TTL/RS-485的電平轉(zhuǎn)換。在電腦和單片機組成的RS-485通信系統(tǒng)中,下位機由單片機系統(tǒng)組成,主要完成工業(yè)現(xiàn)場信號的採集和控制,上位機為普通的PC機,負責監(jiān)視下位機的運行狀態(tài),並對其狀態(tài)資訊進行集中處理,以圖文方式顯示下位機的工作狀態(tài)以及工業(yè)現(xiàn)場被控設(shè)備的工作狀況。系統(tǒng)中各節(jié)點(包括上位機)的識別是通過設(shè)置不同的站地址來實現(xiàn)的。26

6.280C51的串行口

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

(P3.1)(P3.0)27

有兩個物理上獨立的接收、發(fā)送緩衝器SBUF,它們佔用同一地址99H;一個用來發(fā)送,一個用來接收。發(fā)送緩衝器只能寫不能讀出,接收緩衝器只能讀出不能寫入。在進行非同步通信時,數(shù)據(jù)的發(fā)送和接收分別在各自的時鐘(TCLK和RCLK)控制下進行,但必須與字元位數(shù)的串列傳輸速率保持一致。MCS-51串行口的發(fā)送和接收時鐘可由兩種方式產(chǎn)生:一種:由主機頻率fOSC經(jīng)分頻後產(chǎn)生。一種:是由內(nèi)部定時器T1或T2的溢出率經(jīng)16分頻後提供。28

串行口的發(fā)送過程由指令MOVSBUF,A啟動,即CPU由一條寫發(fā)送緩衝器的指令把數(shù)據(jù)(字元)寫入串行口的發(fā)送緩衝器SBUF中;再由硬體電路自動在字元的始、末加上起始位(低電平)、停止位(高電平)及其它控制位(奇偶位);然後在移位脈衝的控制下,低位在前,高位在後,從TXD端(方式0除外)一位位地向外發(fā)送。串行口的接收與否受制於允許接收位REN的狀態(tài),當REN被軟體置“1”後,允許接收器接收。接收端RXD一位位接收數(shù)據(jù),直到收到一個完整的字元數(shù)據(jù)後,控制電路進行最後一次移位,自動去掉起始位,使接收中斷標誌位RI置“1”,並向CPU申請中斷。CPU回應(yīng)中斷,用一條指令MOVA,SBUF把接收緩衝器SBUF的內(nèi)容讀入累加器A。29

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

6.2.280C51串行口的控制寄存器

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

30

●SM2,多機通信控制位,主要用於方式2和方式3。當接收機的SM2=1時可以利用收到的RB8來控制是否啟動RI(RB8=0時不啟動RI,收到的資訊丟棄;RB8=1時收到的數(shù)據(jù)進入SBUF,並啟動RI,進而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。當SM2=0時,不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進入SBUF,並啟動RI(即此時RB8不具有控制RI啟動的功能)。通過控制SM2,可以實現(xiàn)多機通信。在方式0時,SM2必須是0。在方式1時,若SM2=1,則只有接收到有效停止位時,RI才置1?!馬EN,允許串行接收位。由軟體置REN=1,則啟動串行口接收數(shù)據(jù);若軟體置REN=0,則禁止接收。31

●TB8,在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,可以用軟體規(guī)定其作用??梢杂米鲾?shù)據(jù)的奇偶校驗位,或在多機通信中,作為地址幀/數(shù)據(jù)幀的標誌位。在方式0和方式1中,該位未用。●RB8,在方式2或方式3中,是接收到數(shù)據(jù)的第九位,作為奇偶校驗位或地址幀/數(shù)據(jù)幀的標誌位。在方式1時,若SM2=0,則RB8是接收到的停止位?!馮I,發(fā)送中斷標誌位。在方式0時,當串行發(fā)送第8位數(shù)據(jù)結(jié)束時,或在其他方式,串行發(fā)送停止位的開始時,由內(nèi)部硬體使TI置1,向CPU發(fā)中斷申請。在中斷服務(wù)程式中,必須用軟體將其清0,取消此中斷申請?!馬I,接收中斷標誌位。在方式0時,當串行接收第8位數(shù)據(jù)結(jié)束時,或在其他方式,串行接收停止位的中間時,由內(nèi)部硬體使RI置1,向CPU發(fā)中斷申請。也必須在中斷服務(wù)程式中,用軟體將其清0,取消此中斷申請。32

特殊功能寄存器PCON中只有一位SMOD與串行口工作有關(guān),無位尋址功能:

SMOD(PCON.7)串列傳輸速率倍增位。在串行口方式1、方式2、方式3時,串列傳輸速率與SMOD有關(guān),當SMOD=1時,串列傳輸速率提高一倍。複位時,SMOD=0。33

6.2.380C51串行口的工作方式

一、方式0方式0時,串行口為同步移位寄存器的輸入輸出方式。主要用於擴展並行輸入或輸出口。數(shù)據(jù)由RXD(P3.0)引腳輸入或輸出,同步移位脈衝由TXD(P3.1)引腳輸出。發(fā)送和接收均為8位數(shù)據(jù),低位在先,高位在後。串列傳輸速率固定為fosc/12。

1、方式0輸出發(fā)送操作在TI=0的情況下開始,由指令MOVSBUF,A啟動,8位數(shù)據(jù)發(fā)送完後,由硬體自動置TI=1,並向CPU發(fā)出中斷請求。34

2、方式0輸入滿足REN=1和RI=0的條件下,串行口處於方式0輸入。當接收完8位數(shù)據(jù)後,通過指令MOVA,SBUF將接收的數(shù)據(jù)傳送給累加器A。在再次接收之前,必須用軟體將RI清0。35

8031的串行口外接串行輸入並行輸出移位寄存器74LS164,並行輸入串行輸出移位寄存器74LS165。工作於方式0的接收和發(fā)送電路36

二、方式1

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

1、方式1輸出在TI=0的條件下,由指令MOVSBUF,A啟動,發(fā)送電路自動在8位數(shù)據(jù)前後加一位起始、停止位,發(fā)送完成後置TI=1。37

2、方式1輸入

用軟體置REN為1時,接收器以所選擇串列傳輸速率的16倍速率採樣RXD引腳電平,檢測到RXD引腳輸入電平發(fā)生負跳變時,則說明起始位有效,將其移入輸入移位寄存器,並開始接收這一幀資訊的其餘位。接收過程中,數(shù)據(jù)從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進行最後一次移位。當RI=0,且SM2=0(或接收到的停止位為1)時,將接收到的9位數(shù)據(jù)的前8位數(shù)據(jù)裝入接收SBUF,第9位(停止位)進入RB8,並置RI=1,向CPU請求中斷。38

三、方式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的溢出率決定。

39

1、方式2和方式3輸出發(fā)送開始時,先把起始位0輸出到TXD引腳,然後發(fā)送移位寄存器的輸出位(D0)到TXD引腳。每一個移位脈衝都使輸出移位寄存器的各位右移一位,並由TXD引腳輸出。第一次移位時,停止位“1”移入輸出移位寄存器的第9位上,以後每次移位,左邊都移入0。當停止位移至輸出位時,左邊其餘位全為0,檢測電路檢測到這一條件時,使控制電路進行最後一次移位,並置TI=1,向CPU請求中斷。40

2、方式2和方式3輸入

接收時,數(shù)據(jù)從右邊移入輸入移位寄存器,在起始位0移到最左邊時,控制電路進行最後一次移位。當RI=0,且SM2=0(或接收到的第9位數(shù)據(jù)為1)時,接收到的數(shù)據(jù)裝入接收緩衝器SBUF和RB8(接收數(shù)據(jù)的第9位),置RI=1,向CPU請求中斷。如果條件不滿足,則數(shù)據(jù)丟失,且不置位RI,繼續(xù)搜索RXD引腳的負跳變。41

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

定時器T1溢出率的計算公式:

T1溢出率=式中,K為定時器T1的位數(shù),它和定時器T1的設(shè)定方式有關(guān):T1為方式0,K=13T1為方式1,K=16T1為方式2或3,K=843

當T1作為串列傳輸速率發(fā)生器時,最典型的用法是使T1工作在自動再裝入的8位定時器方式(即方式2,且TCON的TR1=1,以啟動定時器)。這時溢出率取決於TH1中的計數(shù)值。

T1溢出率=fosc/{12×[256-(TH1)]}在單片機的應(yīng)用中,常用的晶振頻率為:12MHz和11.0592MHz。所以,選用的串列傳輸速率也相對固定。常用的串行口串列傳輸速率以及各參數(shù)的關(guān)係如表所示。44

串行口之前,應(yīng)對其進行初始化,主要是設(shè)置產(chǎn)生串列傳輸速率的定時器1、串行口控制和中斷控制。具體步驟如下:確定T1的工作方式(編程TMOD寄存器);計算T1的初值,裝載TH1、TL1;啟動T1(編程TCON中的TR1位);確定串行口控制(編程SCON寄存器);串行口在中斷方式工作時,要進行中斷設(shè)置(編程IE、IP寄存器)。45

串行口發(fā)送程式將片內(nèi)RAM40H-4FH中的數(shù)據(jù)串行發(fā)送,串行口設(shè)定為工作方式2,TB8作奇偶校驗位。在寫入發(fā)送SBUF之前,先將數(shù)據(jù)的奇偶位P寫入TB8,第9位數(shù)據(jù)作奇偶校驗位用。

ORG0000HAJMPMAIN

ORG0100HMAIN:MOVSCON,#80H;方式設(shè)定

MOVPCON,#80H;取串列傳輸速率為fosc/32MOVR0,#40H;首地址40H送R0MOVR7,#10H;數(shù)據(jù)長度送R7LOOP:MOVA,@R0;取數(shù)據(jù)送AMOVC,PSW.0;P寫入TB8MOVTB8,C

MOVSBUF,A;啟動發(fā)送

WAIT:JBCTI,NEXT;判斷發(fā)送中斷標誌TISJMPWAITNEXT:INCR0

DJNZR7,LOOPRET46

串行口接收程式將接收的16個位元組數(shù)據(jù)送片內(nèi)RAM40H-4FH單元中。設(shè)串行口以方式3狀態(tài)工作,串列傳輸速率為2400。T1用作串列傳輸速率發(fā)生器,工作於方式2,SMOD=0,計數(shù)常數(shù)為F4H,見表2

REV:MOVTMOD,#20H;T1方式2,定時模式

MOVTH1,#F4H;裝入初值

MOVTL1,#F4H

SETBTR1;啟動T1MOVR0,#40H;R0置地址初值

MOVR7,#10H;數(shù)據(jù)長度至R7MOVPCON,#00H;置SMOD=0MOVSCON,#BOH;串行口編程方式3接收

47

WAIT:JBCRI,PR;等待接收到數(shù)據(jù)

SJMPWAITPR:MOVA,SBUF;奇偶校驗位判別:RB8=1?JNBPSW.0,PNPJNBRB8,ERRSJMPRIGHTPNP:JBRB8,PERRIGHT:MOV@R0,A;數(shù)據(jù)至緩衝器

INCR0

DJNZR7,WAIT;判斷數(shù)據(jù)塊接收完否?

CLRPSW.5;正確接收16個位元組置標誌位F0=0RETERR:SETBPSW.5;置奇校驗出錯標誌F0=1RET48

6.3單片機串行口應(yīng)用舉例

在電腦分佈式測控系統(tǒng)中,經(jīng)常要利用串行通信方式進行數(shù)據(jù)傳輸。80C51單片機的串行口為電腦間的通信提供了極為便利的條件。利用單片機的串行口還可以方便地擴展鍵盤和顯示器,對於簡單的應(yīng)用非常便利。這裏僅介紹單片機串行口在通信方面的應(yīng)用,關(guān)於鍵盤和顯示器的擴展將在下一章介紹。49

6.3.1單片機與單片機的通信

一、點對點的通信

1、硬體連接

50

二、應(yīng)用程式

51

設(shè)1號機是發(fā)送方,2號機是接收方。當1號機發(fā)送時,先發(fā)送一個“E1”聯(lián)絡(luò)信號,2號機收到後回答一個“E2”應(yīng)答信號,表示同意接收。當1號機收到應(yīng)答信號“E2”後,開始發(fā)送數(shù)據(jù),每發(fā)送一個數(shù)據(jù)字節(jié)都要計算“校驗和”,假定數(shù)據(jù)塊長度為16個位元組,起始地址為40H,一個數(shù)據(jù)塊發(fā)送完畢後立即發(fā)送“校驗和”。2號機接收數(shù)據(jù)並轉(zhuǎn)存到數(shù)據(jù)緩衝區(qū),起始地址也為40H,每接收到一個數(shù)據(jù)字節(jié)便計算一次“校驗和”,當收到一個數(shù)據(jù)塊後,再接收1號機發(fā)來的“校驗和”,並將它與2號機求出的校驗和進行比較。若兩者相等,說明接收正確,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。

52

發(fā)送程式清單如下:

ASTART:CLREAMOVTMOD,#20H;定時器1置為方式2MOVTH1,#0F4H;裝載定時器初值,串列傳輸速率2400MOVTL1,#0F4HMOVPCON,#00HSETBTR1;啟動定時器

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

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

JNBTI,$;等待一幀發(fā)送完畢

CLRTI;允許再發(fā)送

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

CLRRI;允許再接收

MOVA,SBUF;2號機應(yīng)答後,讀至AXRLA,#0E2H;判斷2號機是否準備完畢

JNZALOOP1;2號機未準備好,繼續(xù)聯(lián)絡(luò)

ALOOP2:MOVR0,#40H;2號機準備好,設(shè)定數(shù)據(jù)塊地址指針初值

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

MOVR6,#00H;清校驗和單元53

ALOOP3:MOVSBUF,@R0;發(fā)送一個數(shù)據(jù)字節(jié)

MOVA,R6ADDA,@R0;求校驗和

MOVR6,A;保存校驗和

INCR0JNBTI,$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)答“正確”,返回54

接收程式清單如下:BSTART:CLREAMOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HMOVPCON,#00HSETBTR1MOVSCON,#50H;設(shè)定串口方式1,且準備接收

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

CLRRIMOVA,SBUF;收到1號機信號

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

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

MOVSBUF,#0E2H;是1號機聯(lián)絡(luò)信號,發(fā)應(yīng)答信號

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

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

MOVR6,#00H;清校驗和單元55

BLOOP2:JNBRI,$CLRRIMOVA,SBUFMOV@R0,A;接收數(shù)據(jù)轉(zhuǎn)儲

INCR0ADDA,R6;求校驗和

MOVR6,ADJNZR7,BLOOP2;判數(shù)據(jù)塊是否接收完畢

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

CLRRIMOVA,SBUFXRLA,R6;比較校驗和

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

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

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

CLRTIEND1:MOVSBUF,#00HRET56

二、多機通信

1、硬體連接單片機構(gòu)成的多機系統(tǒng)常採用匯流排型主從式結(jié)構(gòu)。所謂主從式,即在數(shù)個單片機中,有一個是主機,其餘的是從機,從機要服從主機的調(diào)度、支配。80C31單片機的串行口方式2和方式3適於這種主從式的通信結(jié)構(gòu)。當然採用不同的通信標準時,還需進行相應(yīng)的電平轉(zhuǎn)換,有時還要對信號進行光電隔離。在實際的多機應(yīng)用系統(tǒng)中,常採用RS-485串行標準匯流排進行數(shù)據(jù)傳輸。

57

2、通信協(xié)議所有從機的SM2位置1,處於接收地址幀狀態(tài)。主機發(fā)送一地址幀,其中8位是地址,第9位為地址/數(shù)據(jù)的區(qū)分標誌,該位置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é)束的標誌。

58

主機接收數(shù)據(jù)時先判斷數(shù)據(jù)接收標誌(RB8),若RB8=1,表示數(shù)據(jù)傳送結(jié)束,並比較此幀校驗和,若正確則回送正確信號00H,此信號命令該從機複位(即重新等待地址幀);若校驗和出錯,則發(fā)送0FFH,命令該從機重發(fā)數(shù)據(jù)。若接收幀的RB8=0,則存數(shù)據(jù)到緩衝區(qū),並準備接收下幀資訊。主機收到從機應(yīng)答地址後,確認地址是否相符,如果地址不符,發(fā)複位信號(數(shù)據(jù)幀中TB8=1);如果地址相符,則清TB8,開始發(fā)送數(shù)據(jù)。從機收到複位命令後回到監(jiān)聽地址狀態(tài)(SM2=1)。否則開始接收數(shù)據(jù)和命令。59

3、應(yīng)用程式主機發(fā)送的地址聯(lián)絡(luò)信號為:00H,01H,02H,……(即從機設(shè)備地址),地址FFH為命令各從機複位,即恢復(fù)SM2=1。主機命令編碼為:01H,主機命令從機接收數(shù)據(jù);02H,主機命令從機發(fā)送數(shù)據(jù)。其他都按02H對待。RRDY=1:表示從機準備好接收。TRDY=1:表示從機準備好發(fā)送。ERR=1:表示從機接收的命令是非法的。

程式分為主機程式和從機程式。約定一次傳遞數(shù)據(jù)為16個位元組,以01H地址的從機為例。60

主機程式清單:設(shè)從機地址號存於40H單元,命令存於41H單元。

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

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

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

JZAD_OK61

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

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;錯誤處理62

CO_OK:MOVA,SBUF;應(yīng)答正確,判是發(fā)送還是接收命令

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

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

LJMPSE_DATARE_DATA:MOVR6,#00H;清校驗和接收16個位元組數(shù)據(jù)

MOVR0,#30H MOVR7,#10H

63

LOOP2:JNBRI,$CLRRIMOVA,SBUF MOV@R0,A INCR0 ADDA,R6 MOVR6,ADJNZR7,LOOP2JNBRI,$ CLRRIMOVA,SBUF;接收校驗和並判斷

XRLA,R6 JZXYOK;校驗正確

MOVSBUF,#0FFH;校驗錯誤

JNBTI,$ CLRTILJMPRE_DATA64

XYOK:MOVSBUF,#00H;校驗和正確,發(fā)00HJNBTI,$ CLRTISETBTB8;置地址標誌

LJMPRETENDSE_DATA:MOVR6,#00H;發(fā)送16個位元組數(shù)據(jù)

MOVR0,#30H MOVR7,#10HLOOP3:MOVA,@R0 MOVSBUF,AJNBTI,$ CLRTIINCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP365

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

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

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

RET_END:RET66

從機程式清單:設(shè)本機號存於40H單元,41H單元存放“發(fā)送”命令,42H單元存放“接收”命令。

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

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

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

SETBTRDY SJMPLOOP167

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,$ CLRRIJBRB8,ENDII;是複位命令,恢復(fù)監(jiān)聽

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

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

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

SJMPFFML;非法命令,轉(zhuǎn)非法處理

68

SERISE:JBTRDY,SEND;從機發(fā)送是否準備好

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

WAIT01:JNBTI,$ CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主機接收是否準備就緒

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

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

JNBTI,$ CLRTILJMPENDIISERIRE:JBRRDY,RECE;從機接收是否準備好

MOVSBUF,#00H SJMPWAIT0269

RECE:MOVSBUF,#01H;返回“接收準備好”WEIT02:JNBTI,$CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主機發(fā)送是否就緒

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

LJMPENDENDII:SETBSM2ENDI:SETBESEND:POPACC POPPSW RETI70

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ā)送校驗和

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

JZSEND_OK SJMPSE_DATA;發(fā)送錯誤,重發(fā)71

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

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

MOVR6,#00HMOVR0,#30HMOVR7,#10H72

LOOP3:JNBRI,$ CLRRIMOVA,SBUFMOV@R0,A INCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP3;接收數(shù)據(jù)塊完畢?

JNBRI,$;接收校驗和

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

JZRECE_OK MOVSBUF,#0FFH;校驗和錯誤,發(fā)FFHJNBTI,$ CLRTI

溫馨提示

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

評論

0/150

提交評論