1、串行通信概述
(1)計算機通信是指計算機與外部設備或計算機與計算機之間的信息交換。
• 通信的基本方式可分為并行通信和串行通信兩種。
• 并行通信通常是將數據字節的各位用多條數據線同時進行傳送,如圖1所示。并行通信控制簡單、傳輸速度快;由于傳輸線較多,長距離傳送時成本高且接收方的各位同時接收存在困難。
•
串行通信是將數據字節分成一位一位的形式在一條傳輸線上逐個地傳輸,如圖2所示。 串行通信的特點:傳輸線少,長距離傳送時成本低,且可以利用電話網等現成的設備,但數據的傳送控制比并行通信復雜。
目前串行通信在單片機雙機、多機以及單片機與PC機之間的通信等方面得到了廣泛應用。
(2)同步通信和異步通信
1、異步通信
異步通信是指通信的發送與接收設備使用各自的時鐘控制數據的發送和接收過程。為使雙方的收發協調,要求發送和接收設備的時鐘盡可能一致。
異步通信是以字符(構成的幀)為單位進行傳輸,字符與字符之間的間隙(時間間隔)是任意的,但每個字符中的各位是以固定的時間傳送的,即字符之間不一定有“位間隔”的整數倍的關系,但同一字符內的各位之間的距離均為“位間隔”的整數倍。
異步通信的特點:不要求收發雙方時鐘的嚴格一致,實現容易,設備開銷較小,但每個字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。
同步通信時要建立發送方時鐘對接收方時鐘的直接控制,使雙方達到完全同步。此時,傳輸數據的位之間的距離均為“位間隔”的整數倍,同時傳送的字符間不留間隙,即保持位同步關系,也保持字符同步關系。發送方對接收方的同步可以通過兩種方法實現。
同步通信的特點是以特定的位組合“01111110”作為幀的開始和結束標志,所傳輸的一幀數據可以是任意位。所以傳輸的效率較高,但實現的硬件設備比異步通信復雜。
(3)串行通信的傳輸方向
1、單工
單工是指數據傳輸僅能沿一個方向,不能實現反向傳輸。
2、半雙工
半雙工是指數據傳輸可以沿兩個方向,但需要分時進行。
3、全雙工
全雙工是指數據可以同時進行雙向傳輸。
(4)串行通信的錯誤校驗
(5)傳輸速率與傳輸距離
1、傳輸速率
比特率是每秒鐘傳輸二進制代碼的位數,單位是:位/秒(bps)。如每秒鐘傳送240個字符,而每個字符格式包含10位(1個起始位、1個停止位、8個數據位),這時的比特率為:
10位×240個/秒 = 2400 bps
(6)RS-232C電平與TTL電平
2、串行通信編程時主要應注意的事項
3、51單片機串行口結構
串行口電路也稱為通用異步收發器(UART).從原理上講,一個UART應包括發送器電路、接收器電路和控制電路。51單片機的UART已集成在其中,構成一個全雙工串行口,這個口即可以用于網絡通信,也可以實現串行異步通信,還可以作為同步移位寄存器使用。
80C51的串行口通過引腳RXD(P30,串行口數據接收端)和引腳TXD(P31,串行數據發送端)與外療設備進行串行通信。如圖3為單片機串行口的結構。
圖中共有兩個串行口緩沖寄存器(SBUF),一個是發送寄存器,一個是接收寄存器,以便單片機能以全雙工方式進行通信。串行發送時,從片內總線向發送SBUF寫入數據;接收時,從接收SBUF向片內總線讀出數據。它們都是可尋址的寄存器,但因為發送和接收不能同時進行,所以給這兩個寄存器賦以同一地址99H.
在接收方式下,串行數據通過引腳RXD(P30)進入,由于在接收寄存器之前還有移位寄存器,從而構成了串行接收的雙緩沖結構,以避免在數據接收過程上中出現幀重疊錯誤,即在下一幀數據來時,前一幀數據還沒有讀走。
在發送方式下,串行數據通過引腳TXD(P31)發出。與接收情況不同的,發送數據時,由于CPU是主動的,不會發生幀重疊錯誤,因此發送電路就不需又重緩沖結構,這樣可以提高數據發送的速度。
4、相關的寄存器
與串口通信相關的相關的寄存器主要有四個,串行口控制寄存器SCON、電源控制寄存器PCON、定時器工作方式寄存器TMOD、定時器控制寄存器TCON、中斷允許寄存器IE,后面主要跟波特率設置及中波相關,前面在講中斷和定時器已作過介紹,所以這里只對SCON和PCON寄存器進行介紹。
(1)串行控制寄存器SCON
串行控制寄存器SCON用于設置串行口的工作方式、監視串行口的工作狀態、控制發送與接收的狀態等。它是一個既可以字節尋址又可以位尋址的8位特殊功能寄存器。其格式如下。
(1)SM0 SM1:串行口工作方式選擇位。其狀態組合所對應的工作方式如表9-1所示。
(2) SM2:多機通信控制器位。在方式0中,SM2必須設成0。在方式1中,當處于接收狀態時,若SM2=1,則只有接收到有效的停止位“1”時,RI才能被激活成“1”(產生中斷請求)。在方式2和方式3中,若SM2=0,串行口以單機發送或接收方式工作,TI和RI以正常方式被激活并產生中斷請求;若SM2=1,RB8=1時,RI被激活并產生中斷請求。
(3) REN:串行接受允許控制位。該位由軟件置位或復位。當REN=1,允許接收;當REN=0,禁止接收
(4) TB8:方式2和方式3中要發送的第9位數據。該位由軟件置位或復位。在方式2和方式3時,TB8是發送的第9位數據。在多機通信中,以TB8位的狀態表示主機發送的是地址還是數據:TB8=1表示地址,TB8=0表示數據。TB8還可用作奇偶校驗位。
(5) RB8:接收數據第9位。在方式2和方式3時,RB8存放接收到的第9位數據。RB8也可用作奇偶校驗位。在方式1中,若SM2=0,則RB8是接收到的停止位。在方式0中,該位未用。
(6)TI:發送中斷標志位。TI=1,表示已結束一幀數據發送,可由軟件查詢TI位標志,也可以向CPU申請中斷。
注意:TI在任何工作方式下都必須由軟件清0。
(7)RI:接收中斷標志位。RI=1,表示一幀數據接收結束。可由軟件查詢RI位標志,也可以向CPU申請中斷。
注意:RI在任何工作方式下也都必須由軟件清0。
在AT89C51中,串行發送中斷TI和接收中斷RI的中斷入口地址是同是0023H,因此在中斷程序中必須由軟件查詢TI和RI的狀態才能確定究竟是接收還是發送中斷,進而作出相應的處理。單片機復位時,SCON所有位均清0。
3、電源控制寄存器PCON
在串口通信時,我們只用PCON寄存器的SMOD位,這一位主要跟波特率的設置有關。下面僅對這一位進行介紹。
SMOD:串行口波特率倍增位。在工作方式1~工作方式3時,若SMOD=1,則串行口波特率增加一倍。若SMOD=0,波特率不加倍。系統復位時,SMOD=0。
5、串行口的工作方式
51單片機的串行口共有四種工種方式,分別為工作方式0、工作方式1、工作方式2及工作方式3,如圖1所示。采用何種工作方式主要靠串行口控制寄存器SCON中的SM0和SM1來決定。不同的工作方式,其一次傳送的數據位多少不同,同時,波特率的大小的設置也不同。
圖1 串行口的四種工作方式
(1)發送和接收
為了便于大家撐握,這里只介紹工作方式1,其它工作方式大家用到時再自行學習。工作方式1每次傳送一幀數據為10位,1 個起始位、1 個停止位和8個數據位,低位在前,高位在后,如圖2所示。
圖2 方式1的數據幀格式
在寫程序時,需看懂數據發送和接收的時序圖,分別如圖3、圖4所示。數據發送時使用的是單片機的TXD(P31)引腳,接收時使用的單片機的RXD(P30)引腳,這里我們結合這兩個引腳對時序進行分析。
圖3 方式1發送時的時序圖
圖4 方式1數據接收時的時序圖
首先我們單片機如何發送和接收一個數據。
發送時,數據從TXD(P31)端輸出,當TI=0時,執行數據寫入發送緩沖器SBUFF指令時,就啟動了串行口數據的發送指令。啟動發送后,串行口自動在起始位清0,而后是8位數據位和1位停止位,一幀數據是10位。數據依次從TXD端發出,一幀數據發送完畢,使TXD端的輸出線維持在1狀態下,并將SCON寄存器中的TI置1,以便查詢數據是否發送完畢或作為發送中斷請求信號。TI必須由軟件清0。
接收時,數據從RXD(P30)端輸入,SCON的REN位應處于允許接收狀(REN=1)。在此前提下,串行口采樣RXD端,當采樣從1向0的狀態跳變時,就認定是接收一起始位。隨后在移位脈沖的控制下,把接收到的數據位移入寄存器中,直接停止位到來之后把停止位送入RB8中,并置位中斷標志位RI,通知CPU從SBUF取走接收到的一個字符。
(2)波特率的設定
工作方式1的波特率是可變,波特率的產生與定時器1有關,其產生的電路如圖4所示。
圖4 方式1的波特率產生電路
以定時器T1作為波特率發生器使用,其值由定時器1的計數溢出率來決定,其公式為:
其中,T1溢出率為一次定時時間的倒數,即:
上式中,X為計數器的初值,M由定時器T1的工作方式所決定,即M=8、13或16,當定時器1作波特率發生器使用時,一般選用工作方式。之所以選擇工作方式2,是因為它具有自動加載功能,可以避免通過程序的反復裝入初值所引起的定時誤差,使波特率更加穩定。因此,對于定時器T1的工作方式2,其溢出率又可簡化為:
此時,波特率為:
因此計數初值X的值為;
例如,設兩機通信的波特率為2400波特,若晶振頻率為12MHZ,串行口工作在方式1,用定時器T1作為波特率發生器,先定時器工作在方式2(要禁止T1中斷,以免產生不必要的中斷帶來的頻率誤差)。
若SMOD=1,則計數值X的值為:
若SMOD=1,則計數值X的值為:
5程序舉例
在具體操作前,需對與串行口相關的寄存器作一些設置,主要用來設置跟波特率產生相關的定時器1、串行口工作方式以及中斷的一些設置,具體如下
(1)確定定時器的工作方式
(2)計算定時器的初值
(3)啟動定時器
(4)設置SCON寄存器
(5)中斷設置
例1 串口發送程序
例2 串口接收程序
源代碼詳見: http://www.zg4o1577.cn/mcu/2670.html
源代碼詳見: http://www.zg4o1577.cn/mcu/2670.html