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

下載本文檔

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

文檔簡介

1

80C51的串行口

2

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

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

4

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

5

6.1.1串行通信的基本概念

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

6

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

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

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

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

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

外同步自同步10

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

11

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

12

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

單工半雙工全雙工13

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

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

14

四、串行通信的錯(cuò)誤校驗(yàn)

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

五、傳輸速率與傳輸距離

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

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

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

6.1.2串行通信介面標(biāo)準(zhǔn)

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

18

2、功能特性

19

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

。遠(yuǎn)程通信連接20

近程通信連接21

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

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

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

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

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

二、RS-422A介面

RS-422A是平衡型電壓數(shù)字介面電路的電氣標(biāo)準(zhǔn)

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

24

三、RS-485介面

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

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

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

6.280C51的串行口

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

(P3.1)(P3.0)27

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

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

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

6.2.280C51串行口的控制寄存器

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

30

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

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

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

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

6.2.380C51串行口的工作方式

一、方式0方式0時(shí),串行口為同步移位寄存器的輸入輸出方式。主要用於擴(kuò)展並行輸入或輸出口。數(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輸入。當(dāng)接收完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時(shí),接收器以所選擇串列傳輸速率的16倍速率採樣RXD引腳電平,檢測到RXD引腳輸入電平發(fā)生負(fù)跳變時(shí),則說明起始位有效,將其移入輸入移位寄存器,並開始接收這一幀資訊的其餘位。接收過程中,數(shù)據(jù)從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時(shí),控制電路進(jìn)行最後一次移位。當(dāng)RI=0,且SM2=0(或接收到的停止位為1)時(shí),將接收到的9位數(shù)據(jù)的前8位數(shù)據(jù)裝入接收SBUF,第9位(停止位)進(jìn)入RB8,並置RI=1,向CPU請求中斷。38

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

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

39

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

2、方式2和方式3輸入

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

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

定時(shí)器T1溢出率的計(jì)算公式:

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

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

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

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

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

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ā)送中斷標(biāo)誌TISJMPWAITNEXT:INCR0

DJNZR7,LOOPRET46

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

REV:MOVTMOD,#20H;T1方式2,定時(shí)模式

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;奇偶校驗(yàn)位判別:RB8=1?JNBPSW.0,PNPJNBRB8,ERRSJMPRIGHTPNP:JBRB8,PERRIGHT:MOV@R0,A;數(shù)據(jù)至緩衝器

INCR0

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

CLRPSW.5;正確接收16個(gè)位元組置標(biāo)誌位F0=0RETERR:SETBPSW.5;置奇校驗(yàn)出錯(cuò)標(biāo)誌F0=1RET48

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

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

6.3.1單片機(jī)與單片機(jī)的通信

一、點(diǎn)對點(diǎn)的通信

1、硬體連接

50

二、應(yīng)用程式

51

設(shè)1號機(jī)是發(fā)送方,2號機(jī)是接收方。當(dāng)1號機(jī)發(fā)送時(shí),先發(fā)送一個(gè)“E1”聯(lián)絡(luò)信號,2號機(jī)收到後回答一個(gè)“E2”應(yīng)答信號,表示同意接收。當(dāng)1號機(jī)收到應(yīng)答信號“E2”後,開始發(fā)送數(shù)據(jù),每發(fā)送一個(gè)數(shù)據(jù)字節(jié)都要計(jì)算“校驗(yàn)和”,假定數(shù)據(jù)塊長度為16個(gè)位元組,起始地址為40H,一個(gè)數(shù)據(jù)塊發(fā)送完畢後立即發(fā)送“校驗(yàn)和”。2號機(jī)接收數(shù)據(jù)並轉(zhuǎn)存到數(shù)據(jù)緩衝區(qū),起始地址也為40H,每接收到一個(gè)數(shù)據(jù)字節(jié)便計(jì)算一次“校驗(yàn)和”,當(dāng)收到一個(gè)數(shù)據(jù)塊後,再接收1號機(jī)發(fā)來的“校驗(yàn)和”,並將它與2號機(jī)求出的校驗(yàn)和進(jìn)行比較。若兩者相等,說明接收正確,2號機(jī)回答00H;若兩者不相等,說明接收不正確,2號機(jī)回答0FFH,請求重發(fā)。1號機(jī)接到00H後結(jié)束發(fā)送。若收到的答復(fù)非零,則重新發(fā)送數(shù)據(jù)一次。雙方約定採用串行口方式1進(jìn)行通信,一幀資訊為10位,其中有1個(gè)起始位、8個(gè)數(shù)據(jù)位和一個(gè)停止位;串列傳輸速率為2400波特,T1工作在定時(shí)器方式2,振盪頻率選用11.0592MHZ,查表可得TH1=TL1=0F4H,PCON寄存器的SMOD位為0。

52

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

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

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

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

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

CLRTI;允許再發(fā)送

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

CLRRI;允許再接收

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

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

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

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

MOVR6,#00H;清校驗(yàn)和單元53

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

MOVA,R6ADDA,@R0;求校驗(yàn)和

MOVR6,A;保存校驗(yàn)和

INCR0JNBTI,$CLRTIDJNZR7,ALOOP3;整個(gè)數(shù)據(jù)塊是否發(fā)送完畢

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

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

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

RET;2號機(jī)應(yīng)答“正確”,返回54

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

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

CLRRIMOVA,SBUF;收到1號機(jī)信號

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

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

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

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

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

MOVR6,#00H;清校驗(yàn)和單元55

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

INCR0ADDA,R6;求校驗(yàn)和

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

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

CLRRIMOVA,SBUFXRLA,R6;比較校驗(yàn)和

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

MOVSBUF,#0FFH;校驗(yàn)和不相等,發(fā)錯(cuò)誤標(biāo)誌

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

CLRTIEND1:MOVSBUF,#00HRET56

二、多機(jī)通信

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

57

2、通信協(xié)議所有從機(jī)的SM2位置1,處於接收地址幀狀態(tài)。主機(jī)發(fā)送一地址幀,其中8位是地址,第9位為地址/數(shù)據(jù)的區(qū)分標(biāo)誌,該位置1表示該幀為地址幀。所有從機(jī)收到地址幀後,都將接收的地址與本機(jī)的地址比較。對於地址相符的從機(jī),使自己的SM2位置0(以接收主機(jī)隨後發(fā)來的數(shù)據(jù)幀),並把本站地址發(fā)回主機(jī)作為應(yīng)答;對於地址不符的從機(jī),仍保持SM2=1,對主機(jī)隨後發(fā)來的數(shù)據(jù)幀不予理睬。從機(jī)發(fā)送數(shù)據(jù)結(jié)束後,要發(fā)送一幀校驗(yàn)和,並置第9位(TB8)為1,作為從機(jī)數(shù)據(jù)傳送結(jié)束的標(biāo)誌。

58

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

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

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

主機(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_OK61

AD_ERR:MOVSBUF,#0FFH;應(yīng)答錯(cuò)誤,發(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;錯(cuò)誤處理62

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個(gè)位元組數(shù)據(jù)

MOVR0,#30H MOVR7,#10H

63

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)錯(cuò)誤

JNBTI,$ CLRTILJMPRE_DATA64

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

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

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

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

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

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

RET_END:RET66

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

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

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

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

SETBTRDY SJMPLOOP167

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ù)監(jiān)聽

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

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

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

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

68

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 SJMPWAIT0269

RECE:MOVSBUF,#01H;返回“接收準(zhǔn)備好”WEIT02:JNBTI,$CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主機(jī)發(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ā)送校驗(yàn)和

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

JZSEND_OK SJMPSE_DATA;發(fā)送錯(cuò)誤,重發(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,$;接收校驗(yàn)和

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

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

評論

0/150

提交評論