電工學習網

 找回密碼
 立即注冊
查看: 252|回復: 0
打印 上一主題 下一主題

單片機串口工作原理

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2019-11-6 17:21:36 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
 不同型號的單片機使用的串口不同,根據需求選擇相應的單片機,在有些場合如果單片機如果沒有需要的串行通信接口,則可以通過單片機的I/O口進行模擬。
  全雙工UART(異步串行通信接口)
  UART有兩種工作狀態:
  同步串行通信狀態:速率高,硬件電路復雜,需要同時使用兩條信號線,所以只能使用單工方式或半雙工方式工作。
  異步串行通信狀態:方式簡單,傳輸速率不高,應用廣泛,方便與其他通信標準進行銜接。
  異步傳輸工作方式:
  傳輸效率較低
  起始位
  校驗位
  停止位占用的位較多

  數據格式:
  同步傳輸工作方式:
  雙方同時使用兩條通信線:一條用于產生時鐘并要求發送和接受的雙方必須保持完全同步(一般情況下,時鐘信號由發送端提供)。
  另一條用于傳送數據。
  如果需要雙向數據傳輸,需要再多添加兩條通信線(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的初值:
  代碼示例:
  #include
  main()
  {
  TMOD = 0x20;
  SM0 = 0;
  SM1 = 1;
  REN = 1;
  PCON = 0;
  TH1 = 0xFD; //253=256-(1*11.0592*10^6)/(384*9600)
  TL1 = 0xFD;
  TR1 = 1;
  P1 = SBUF;
  while(!RI);
  RI = 0;
  SBUF = P1;
  while(!TI);
  TI = 0;
  }
  數據幀格式:起始位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引腳的負跳變。
  代碼示例:多機互聯
  TMOD = 0x20;
  TH1 = 0xFD;
  TL1 = 0xFD;
  PCON = 0x00;
  TR1 = 1;
  SCON = 0xF8;
  SBUF = 0x01;
  while(!TI);
  TI = 0;
  P3_5 = 0;
  SM2 = 0;
  while(!RI);
  RI = 0;
  P2 = SBUF;
  SM2 = 1;
  P3_5 = 1;
  波特率的計算:
  當T1用作波特率發生器時,最典型的用法是使T1工作再自動重裝8位定時器方式(方式2),溢出率取決于TH1中的計數值
  常見波特率對照表
  串口通信初始化步驟:
  確定T1的工作方式(編程TMOD寄存器)
  計算T1的初值,裝載TH1、TL1
  啟動T1
  確定串行口控制(編程SCON寄存器)
  在中斷方式工作時進行中斷設置(編程IE IP寄存器)

回復

使用道具 舉報

|電工學習網 ( )

GMT+8, 2019-12-11 23:34

Powered by © 2011-2019 www.mpwhoa.live 版權所有 免責聲明 不良信息舉報

技術驅動未來! 電工學習網—專業電工基礎知識電工技術學習網站。

欄目導航: 工控家園 | 三菱plc | 西門子plc | 歐姆龍plc | plc視頻教程

快速回復 返回頂部 返回列表
cctv5十在线直播高清360