51單片機的通信方式分為並行通信和串行通信。前者是指通常是將數據字節的各位用多條數據線同時進行傳送,而后者是將數據字節分成一位一位的形式。
一、串行通信的傳輸方向
單工是指數據傳輸僅能沿一個方向,不能實現反向傳輸。半雙工是指數據傳輸可以沿兩個方向,但需要分時進行。全雙工是指數據可以同時進行雙向傳輸。串行通信常見的錯誤校驗有奇偶校驗、循環冗余校驗。傳輸速率以為比特率為單位,它是每秒鍾傳輸二進制代碼的位數,單位是:位/秒(bps)。
二、80C51串行口的結構
串口結構如下圖:
80C51有兩個物理上獨立的接收、發送緩沖器SBUF,它們占用同一地址99H ;接收器是雙緩沖結構 ;發送緩沖器,因為發送時CPU是主動的,不會產生重疊錯誤。
三、串行口的控制寄存器(SCON)
用以設定串行口的工作方式、接收/發送控制以及設置狀態標志:
SM0和SM1為工作方式選擇位,可選擇四種工作方式:
SM2,多機通信控制位,主要用於方式2和方式3。當接收機的SM2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數據進入SBUF,並激活RI,進而在中斷服務中將數據從SBUF讀走)。當SM2=0時,不論收到的RB8為0和1,均可以使收到的數據進入SBUF,並激活RI(即此時RB8不具有控制RI激活的功能)。通過控制SM2,可以實現多機通信。在方式0時,SM2必須是0。在方式1時,如果SM2=1,則只有接收到有效停止位時,RI才置1。
REN,允許串行接收位。由軟件置REN=1,則啟動串行口接收數據;若軟件置REN=0,則禁止接收。
TB8,在方式2或方式3中,是發送數據的第九位,可以用軟件規定其作用。可以用作數據的奇偶校驗位,或在多機通信中,作為地址幀/數據幀的標志位。在方式0和方式1中,該位未用。
RB8,在方式2或方式3中,是接收到數據的第九位,作為奇偶校驗位或地址幀/數據幀的標志位。在方式1時,若SM2=0,則RB8是接收到的停止位。
TI,發送中斷標志位。在方式0時,當串行發送第8位數據結束時,或在其它方式,串行發送停止位的開始時,由內部硬件使TI置1,向CPU發中斷申請。在中斷服務程序中,必須用軟件將其清0,取消此中斷申請。
RI,接收中斷標志位。在方式0時,當串行接收第8位數據結束時,或在其它方式,串行接收停止位的中間時,由內部硬件使RI置1,向CPU發中斷申請。也必須在中斷服務程序中,用軟件將其清0,取消此中斷申請。
四、波特率的計算(用波特率計算器)
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率)
T1 溢出率 = fosc /{12×[256 -(TH1)]}
在單片機的應用中,常用的晶振頻率為:12MHz和11.0592MHz。所以,選用的波特率也相對固定。常用的串行口波特率以及各參數的關系如表所示。
【參考資料】
51單片機的串口通信(一)https://blog.csdn.net/sinat_38816924/article/details/84706854