51單片機(三十一)—— 串口通信介紹

       隨着單片機系統的廣泛應用和計算機網絡技術的普及,單片機的通信功能越來越顯得重要。通信有並行和串行兩種方式。在單片機系統中,信息的交換多采用串行通信的方式。

        並行通信通常是將數據字節的各位用多條數據線同時進行傳送,每一位數據都需要一條傳輸線,如下圖所示。

        在8位數據總線的通信系統,一次傳送8位數據,需要8條數據線。這種方式只適合短距離傳輸。

        並行通信控制簡單,性對傳輸速度快,但由於傳輸線較多,產距離傳送時成本高,且收發方的各位同時接收存在困難。

        串行通信是將數據字節分成一位一位的形式在一條傳輸線上逐個地傳送,此時只需要一條數據線,外加一條公共的地線。因此一次只能傳送一位,所以對於一個字節的數據至少要分8位才能傳送完畢。如下圖所示。

        串行通信的必要過程是:發送時,要把並行數據變成串行數據發送到線路上去,接收時,要把串行信號再變成並行數據,這樣才能被計算機及其他設備處理。串行通信傳輸線少,長距離傳送時成本低,且可以利用電話網等現成的設備,且數據的傳送控制比並行通信複雜。

        串行通信又有兩種方式:異步串行通信和同步串行通信。

        異步串行通信是指通信的發生與接收設備使用各自時鐘控制數據的發送和接收過程。爲使雙方收、發協調,要求發送和接收設備的時鐘儘可能一致。異步通信是以字符爲單位進行傳輸,字符與字符之間的間隙是任意的,但每個字符中的各位是以固定的時間傳送的。

        異步通信一幀字符信息由4部分組成:起始位、數據位、奇偶校驗位和停止位,如下圖所示。有的字符信息也有帶空閒位形式,即在字符之間有空閒字符。

        異步通信的特點:不要求收發方時鐘的嚴格一致,實現容易,設備開銷較小,但每個字符要附加2~3位,用於起止位、校驗位和停止位,各幀之間還有間隔,因此傳輸效率不高。在單片機與單片機之間,單片機與計算機之間通信時,通常採用異步串行通信方式。

        同步通信時要建立發送方時鐘對接收方時鐘的直接控制,使雙方達到完全同步。此時,傳輸數據的位之間的距離均爲“位間隔”的整數倍,同時傳送的字符間不留間隙,即保持位同步關係,也保持字符同步關係。

         STC89C516單片機內部有一個異步串行口,用來與計算機通信。串口與單片機的P30和P31接口複用。P30爲串口的接收端RXD,P31爲串口的發送端TXD。單片機的串口不能直接與計算機進行通信。單片機的串口的電平制式爲TTL電平,計算機的串口的電平制式爲RS-232電平。TTL電平,5V代表邏輯“1”,0V代表邏輯“0”;計算機的串口電平爲RS-232電平,-12V代表邏輯“1”,12V代表邏輯“0”。要使計算機能夠接收到單片機的數據,就必須將TTL電平轉換爲RS-232電平;要使單片機能夠接收到計算機的數據,就必須將RS-232電平轉換爲TTL電平。實現這兩種電平轉換的芯片主要有MAX232、MAX202、HIN232等。本開發板上使用MAX232實現兩路串口電平的互換。電路如下圖所示。

        MAX232可以兩路異步串行信號進行轉換。我們使用的開發板上只使用了其中的一路。MAX232芯片的9腳和10腳與單片機相連。7腳和8腳與計算機的串口相連。

        不過,目前一般的計算機上很多都不裝備串口。如果要進行串口的實驗,智能用USB口虛擬出一個串口。我使用的開發板上用PL2303芯片將單片機的串口信號,轉換爲USB信號。電路如下圖所示。這個電路也是單片機的下載接口電路。

        MAX232芯片和PL2303芯片都需要與單片機的串口相連。開發板上設計了一個轉接口JP3來設置單片機與哪個芯片相連。如下圖所示。

       將JP3上的兩個跳線帽跳到標有USB一端時,單片機的串口與PL2303芯片相連,計算機可以通過USB口與單片機的串口進行通信。將JP3上的兩個跳線帽跳到標有232一端時,單片機的串口與MAX232芯片相連,計算機可以通過RS232串口與單片機的串口進行通信。

        在這個實驗中,我們主要通過USB口模擬的串口與單片機的串口進行通信。

        接下來我們介紹一些STC89C516單片機的串口的基礎知識。

         STC89C516單片機的串行口是一個可編程全雙工的通信接口,具有UART(通用異步收發器)的全部功能,能同時進行數據的發送和接收,也可以作爲同步移位寄存器使用。

          STC89C516單片機的串行口由兩個獨立的串行數據緩衝寄存器SBUF(一個發送緩衝寄存器,一個接收緩衝寄存器)和發送控制器、接收控制器、輸入移位寄存器及若干控制門電路組成。

          STC89C516單片機可以通過特殊功能寄存器SBUF堆串行接收或串行發送寄存器進行訪問,兩個寄存器公用一個地址99H,但在物理上是兩個獨立的寄存器:執行讀命令時,訪問串行接收寄存器。接收器具有雙緩衝結構,即在從接收寄存器中讀出前一個已經收到的字節之前,便能接收第二個字節。如果第二個字節已經接收完畢,第一個字節沒有讀出,則將丟失其中一個字節,編程時應引起注意。對於發送器,因爲數據是由CPU控制和發送的,所以不需要考慮。

       與串行口祕密相關的一個特殊功能寄存器是串行口控制寄存器SCON,它用來設定串行口的工作方式、接收/發送控制以及設置狀態標誌等。

 串行口控制寄存器SCON

位序號

D7

D6

D5

D4

D3

D2

D1

D0

位符號

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

SM0,SM1—工作方式選擇位。

    串行口有4中工作方式,它們由SM0,SM1設定,對應關係如表18.2所示。

表18.2串行口工作方式

SM0

SM1

方式

功能說明

0

0

0

同步移位寄存器方式(通常用於擴展I/O口)

0

1

1

10位異步收發(8位數據),波特率可變(由定時器1的溢出率控制)

1

0

2

11位異步收發(9位數據),波特率固定

1

1

3

11位異步收發(9位數據),波特率可變(由定時器1的溢出率控制)

    所謂波特率是指單片機與計算機在串口通信時的速率,它定義爲每秒傳輸二進制代碼的位數。即1波特=1位/秒。

    這4種方式的波特率的計算方式如下:

    方式0的波特率=fosc/12。

    方式1的波特率=(2SMOD/32)×(T1溢出率)

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

    方式3的波特率=(2SMOD/32)×(T1溢出率)

    其中SMOD是電源管理寄存器PCON中的一位。它用來設置串口在方式1、2、3時的波特率,SMOD=0時,波特率正常;SMOD=1時,波特率加倍。

SM2—多機通信控制位。

SM2主要用於方式2和方式3,當接收機的SM2=1時,可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的收據進入SBUF,並激活RI,進而在中斷服務中將數據從SBUF讀走)。當SM2=0時,不論收到的RB8是0還是1,均可以使收到的數據進人SBUF,並激活RI(即此時RB8不具有控制RI激活的功能)。通過控制RM2,可以實現多機通信,在方式0時,SM2必須是0,在方式1時,若RM2=1,則只有接收到有效停止位時,RI才置1。

REN—允許串行接收位。

REN=1:允許串口接收數據;

REN=0:禁止串行口接收數據。

TB8—方式2、3中發送數據的第9位。

在方式2或方式3中,是發送數據的第9位,可以用軟件規定其作用,可以用做數據的奇偶校驗位,或在多機通信中,作爲地址幀/數據幀的標誌位,在方式0和方式1中,該位未用。

RB8—方式2、3中接收數據的第9位。

在方式2或方式3中,是接收數據的第9位,可作爲奇偶校驗位或地址幀/數據幀的標誌位,在方式1時,若SM2=0,則RB8是接收到的停止位。

TI—發送中斷標誌位。

在方式0時,當串行發送第8位數據結束時,或在其他方式,串行發送停止位的開始時,由內部硬件使TI置1,向CPU發出中斷申請,也必須在中斷服務程序中,必須用軟件將其清0,取消此中斷申請。

RI—接收中斷標誌位。

在方式0時,當串行接收第8位數據結束時,或在其他方式,串行接收停止位的中間時,由內部硬件使RI置1,向CPU發出中斷申請,也必須在中斷服務程序中,用軟件將其清0,取消此中斷申請。

在這裏對串口4種方式做一下簡單介紹。

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

(2)方式1。方式1是10位數據的異步通信口,其中1位起始位,8位數據位,1位停止位。TXD(P3.1)爲數據發送引腳,RXD(P3.0)爲數據接收引腳。其傳輸波特率是可變的,對於51單片機,波特率由定時器1的溢出率決定。通常我們在做單片機與單片機串口通信、單片機與計算機串口通信、計算機與計算機串口通信時,基本都選擇方式1,因此這種方式大家務必要完全掌握。

(3)方式2、3。方式2、3時爲11位數據的異步通信口。TXD(P3.1)爲數據發送引腳,RXD(P3.0)爲數據接收引腳。這兩種方式下,起始位1位,數據9位(含1位附加的第9位,發送時爲SCON中的TB8,接收時爲RB8),停止位1位,一幀數據位11位。方式2的波特率固定爲晶振頻率的1/64或者1/32,方式3的波特率由定時器T1的溢出率決定。

方式2和方式3的差別僅在於波特率的選取方式不同,在兩種方式下,接收到的停止位與SBUF、TB8及RI都無關。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章