51單片機 | 串口工作原理知識點匯總


————————————————————————————————————————————

理論概念

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  • 不同型號的單片機使用的串口不同,根據需求選擇相應的單片機,在有些場合如果單片機如果沒有需要的串行通信接口,則可以通過單片機的I/O口進行模擬。
  • 全雙工UART(異步串行通信接口)

    UART有兩種工作狀態:

  1. 同步串行通信狀態:速率高,硬件電路復雜,需要同時使用兩條信號線,所以只能使用單工方式或半雙工方式工作。
  2. 異步串行通信狀態:方式簡單,傳輸速率不高,應用廣泛,方便與其他通信標准進行銜接。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

異步傳輸工作方式:

  • 傳輸效率較低,起始位,校驗位,停止位占用的位較多

數據格式:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

同步傳輸工作方式:

  • 雙方同時使用兩條通信線:
    • 一條用於產生時鍾並要求發送和接受的雙方必須保持完全同步(一般情況下,時鍾信號由發送端提供)。
    • 另一條用於傳送數據。
    • 如果需要雙向數據傳輸,需要再多添加兩條通信線(MCS-51不支持同時的雙向數據同步傳輸,只能使用分時復用)。
  • 除了用於通信外,同步方式還可以用於I/O口的擴展,與74LS164聯合使用時擴展成輸出口,與74LS165聯合使用時擴展成輸入口。
  • 因為沒有附加起始位和停止位,所以傳輸效率較高
  • 一旦發現數據出錯,所有的數據都需要重新傳輸,大量數據一次性傳輸時錯誤的概率較高。
  • 遠距離通信時,通過調試解調從數據流中提取同步信號,用鎖相的技術使接收方得到與發送方相同的時鍾信號。時鍾信號線與數據線分離可以實現高效率、大容量的數據通信。

數據格式:

————————————————————————————————————————————

使用方式

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

使用的寄存器:

  • 串行接口寄存器 SCON:規定了串行通信的方式和功能,可以選擇通信模式/ 允許接收/ 檢查狀態位

  • 電源控制寄存器 PCON

    SMOD = 0 波特率為原值;

    SMOD為1 波特率提高一倍。

    只有SMOD位對串口通信有影響

    注:該寄存器不能進行位尋址,只能整字節操作。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

工作方式:

p.s.:UART有一個接收數據緩沖區,當上一個字節未被處理時下一個字節收入緩沖區。但如果在下一個字節接收完畢時前一字節還未處理,則上一個字節會被覆蓋掉。因此軟件必須在下一個字節接收完畢之前處理上一個字節(當連續發送字節時也是如此)。

  • 用途:可以用來和某些具有8位串行口的EEPROM器件通信

    原理:

    • RXD從低位開始收發數據,TXD從發送同步移位脈沖。
    • 向SBUF寫入字節時開始發送數據,發送完畢后TI位置位。

         

    • 置位REN時,開始接收數據,接收完8位數據后RI位置位。

       

  • 方式1 10 位數據的異步通信口,波特率可變(與T1的溢出率有關)。RXD為數據接收,TXD為數據發送。

    數據幀格式:

    原理:

    • 軟件置REN為1時,接收器選擇波特率為16倍速率采樣RXD引腳電平,當檢測到RXD引腳輸入電平發生負跳變(1->0)說明起始位有效,移入輸入移位寄存器並開始接收這一幀信息的其余位。需要手動清零

         

    • 接收過程中,數據從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進行最后一次移位。當RI=0且SM2=0(或接收到的停止位為1)時,接收到的9位數據的前8位裝入接收SBUF,第9位(停止位)進入RB8並置RI=1,向CPU請求中斷。RI需要手動清零

       

    波特率計算裝入TH1的初值:

    p.s. SMOD=0時,K=1;SMOD=1時,K=2;

    代碼示例:

     1 #include <reg51.h>
     2 main()
     3 {
     4     TMOD = 0x20;
     5     SM0 = 0;
     6     SM1 = 1;
     7     REN = 1;
     8     PCON = 0;
     9     TH1 = 0xFD; //253=256-(1*11.0592*10^6)/(384*9600)
    10     TL1 = 0xFD;
    11     TR1 = 1;
    12     P1 = SBUF;
    13     while(!RI);
    14     RI = 0;
    15     SBUF = P1;
    16     while(!TI);
    17     TI = 0;
    18 }
  • 數據幀格式:起始位1位,數據9位(第9位在發送時為TB8,接收時為RB8)

       

    原理:

    • 發送開始時,先把起始位0 輸出到TXD引腳,然后發送移位寄存器的輸出位D0到TXD引腳,每一個移位脈沖都使輸出移位寄存器的各位向右移一位,並由TXD引腳輸出。第一次移位時,停止位"1 "移入輸出移位寄存器的第9 位,以后每次移位左邊都移 0 。當停止位移至輸出位時,左邊其余位全為0 ,當檢測到這一條件時,控制電路進行最后一次移位並置TI=1,請求中斷。需要手動清零

         

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

         

    代碼示例:多機互聯

     1 TMOD = 0x20;
     2 TH1 = 0xFD;
     3 TL1 = 0xFD;
     4 PCON = 0x00;
     5 TR1 = 1;
     6 SCON = 0xF8;
     7 SBUF = 0x01;
     8 while(!TI);
     9 TI = 0;
    10 P3_5 = 0;
    11 SM2 = 0;
    12 while(!RI);
    13 RI = 0;
    14 P2 = SBUF;
    15 SM2 = 1;
    16 P3_5 = 1;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

波特率的計算:

  • 當T1用作波特率發生器時,最典型的用法是使T1工作再自動重裝8位定時器方式(方式2),溢出率取決於TH1中的計數值

  • 常見波特率對照表

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

串口通信初始化步驟:

  • 確定T1的工作方式(編程TMOD寄存器)
  • 計算T1的初值,裝載TH1、TL1
  • 啟動T1
  • 確定串行口控制(編程SCON寄存器)
  • 在中斷方式工作時進行中斷設置(編程IE IP寄存器)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM