日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

UART串口通信的基本應用

GReq_mcu168 ? 來源:玩轉單片機 ? 2020-08-05 10:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通信的三種基本類型

常用的通信從傳輸方向上可以分為單工通信、半雙工通信、全雙工通信三類。

單工通信就是指只允許一方向另外一方傳送信息,而另一方不能回傳信息。比如電視遙控器、收音機廣播等,都是單工通信技術

半雙工通信是指數(shù)據可以在雙方之間相互傳播,但是同一時刻只能其中一方發(fā)給另外一方,比如我們的對講機就是典型的半雙工。

全雙工通信就發(fā)送數(shù)據的同時也能夠接收數(shù)據,兩者同步進行,就如同我們的電話一樣,我們說話的同時也可以聽到對方的聲音。

UART 模塊介紹

IO 口模擬串口通信,讓大家了解了串口通信的本質,但是我們的單片機程序卻需要不停的檢測掃描單片機 IO 口收到的數(shù)據,大量占用了單片機的運行時間。這時候就會有聰明人想了,其實我們并不是很關心通信的過程,我們只需要一個通信的結果,最終得到接收到的數(shù)據就行了。這樣我們可以在單片機內部做一個硬件模塊,讓它自動接收數(shù)據,接收完了,通知我們一下就可以了,我們的 51 單片機內部就存在這樣一個 UART 模塊,要正確使用它,當然還得先把對應的特殊功能寄存器配置好。

51 單片機的 UART 串口的結構由串行口控制寄存器 SCON、發(fā)送和接收電路三部分構成,先來了解一下串口控制寄存器 SCON。如表 11-1 表 11-2 所示。

表 11-1 SCON——串行控制寄存器的位分配

表 11-2 SCON——串行控制寄存器的位描述

前邊學了那么多寄存器的配置,相信 SCON 這個地方,對于大多數(shù)同學來說已經不是難點了,應該能看懂并且可以自己配置了。對于串口的四種模式,模式 1 是最常用的,就是我們前邊提到的 1 位起始位,8 位數(shù)據位和 1 位停止位。下面我們就詳細介紹模式 1 的工作細節(jié)和使用方法,至于其它 3 種模式與此也是大同小異,真正遇到需要使用的時候大家再去查閱相關資料就行了。

在我們使用 IO 口模擬串口通信的時候,串口的波特率是使用定時器 T0 的中斷體現(xiàn)出來的。在硬件串口模塊中,有一個專門的波特率發(fā)生器用來控制發(fā)送和接收數(shù)據的速度。對于STC89C52 單片機來講,這個波特率發(fā)生器只能由定時器 T1 或定時器 T2 產生,而不能由定時器 T0 產生,這和我們模擬的通信是完全不同的概念。

如果用定時器 2,需要配置額外的寄存器,默認是使用定時器 1 的,我們本章內容主要就使用定時器 T1 作為波特率發(fā)生器來講解,方式 1 下的波特率發(fā)生器必須使用定時器 T1 的模式 2,也就是自動重裝載模式,定時器的重載值計算公式為:

TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率

和波特率有關的還有一個寄存器,是一個電源管理寄存器 PCON,他的最高位可以把波特率提高一倍,也就是如果寫 PCON |= 0x80 以后,計算公式就成了:

TH1 = TL1 = 256 - 晶振值/12 /16 /波特率

公式中數(shù)字的含義這里解釋一下,256 是 8 位定時器的溢出值,也就是 TL1 的溢出值,晶振值在我們的開發(fā)板上就是 11059200,12 是說 1 個機器周期等于 12 個時鐘周期,值得關注的是這個 16,我們來重點說明。在 IO 口模擬串口通信接收數(shù)據的時候,采集的是這一位數(shù)據的中間位置,而實際上串口模塊比我們模擬的要復雜和精確一些。他采取的方式是把一位信號采集 16 次,其中第 7、8、9 次取出來,這三次中其中兩次如果是高電平,那么就認定這一位數(shù)據是 1,如果兩次是低電平,那么就認定這一位是 0,這樣一旦受到意外干擾讀錯一次數(shù)據,也依然可以保證最終數(shù)據的正確性。

了解了串口采集模式,在這里要給大家留一個思考題。“晶振值/12/2/16/波特率”這個地方計算的時候,出現(xiàn)不能除盡,或者出現(xiàn)小數(shù)怎么辦,允許出現(xiàn)多大的偏差?把這部分理解了,也就理解了我們的晶振為何使用 11.0592M 了。

串口通信的發(fā)送和接收電路在物理上有 2 個名字相同的 SBUF 寄存器,它們的地址也都是 0x99,但是一個用來做發(fā)送緩沖,一個用來做接收緩沖。意思就是說,有 2 個房間,兩個房間的門牌號是一樣的,其中一個只出人不進人,另外一個只進人不出人,這樣的話,我們就可以實現(xiàn) UART 的全雙工通信,相互之間不會產生干擾。但是在邏輯上呢,我們每次只操作 SBUF,單片機會自動根據對它執(zhí)行的是“讀”還是“寫”操作來選擇是接收 SBUF 還是發(fā)送 SBUF,后邊通過程序,我們就會徹底了解這個問題。

UART 串口程序

一般情況下,我們編寫串口通信程序的基本步驟如下所示:

配置串口為模式 1。

配置定時器 T1 為模式 2,即自動重裝模式。

根據波特率計算 TH1 和 TL1 的初值,如果有需要可以使用 PCON 進行波特率加倍。

打開定時器控制寄存器 TR1,讓定時器跑起來。

這里還要特別注意一下,就是在使用 T1 做波特率發(fā)生器的時候,千萬不要再使能 T1 的中斷了。

我們先來看一下由 IO 口模擬串口通信直接改為使用硬件 UART 模塊時的程序代碼,看看程序是不是簡單了很多,因為大部分的工作硬件模塊都替我們做了。程序功能和 IO 口模擬的是完全一樣的。

#include 《reg52.h》

void ConfigUART(unsigned int baud);

void main(){

ConfigUART(9600); //配置波特率為 9600

while (1){

while (!RI); //等待接收完成

RI = 0; //清零接收中斷標志位

SBUF = SBUF + 1; //接收到的數(shù)據+1 后,發(fā)送回去

while (!TI); //等待發(fā)送完成

TI = 0; //清零發(fā)送中斷標志位

}

}

/* 串口配置函數(shù),baud-通信波特率 */

void ConfigUART(unsigned int baud){

SCON = 0x50; //配置串口為模式 1

TMOD &= 0x0F; //清零 T1 的控制位

TMOD |= 0x20; //配置 T1 為模式 2

TH1 = 256 - (11059200/12/32)/baud; //計算 T1 重載值

TL1 = TH1; //初值等于重載值

ET1 = 0; //禁止 T1 中斷

TR1 = 1; //啟動 T1

}

當然了,這個程序還是用在主循環(huán)里等待接收中斷標志位和發(fā)送中斷標志位的方法來編寫的,而實際工程開發(fā)中,當然就不能這么干了,我們也只是為了用直觀的對比來告訴同學們硬件模塊可以大大簡化程序代碼,那么實際使用串口的時候就用到串口中斷了,來看一下用中斷實現(xiàn)的程序。請注意一點,因為接收和發(fā)送觸發(fā)的是同一個串口中斷,所以在串口中斷函數(shù)中就必須先判斷是哪種中斷,然后再作出相應的處理。

#include 《reg52.h》

void ConfigUART(unsigned int baud);

void main(){

EA = 1; //使能總中斷

ConfigUART(9600); //配置波特率為 9600

while (1);

}

/* 串口配置函數(shù),baud-通信波特率 */

void ConfigUART(unsigned int baud){

SCON = 0x50; //配置串口為模式 1

TMOD &= 0x0F; //清零 T1 的控制位

TMOD |= 0x20; //配置 T1 為模式 2

TH1 = 256 - (11059200/12/32)/baud; //計算 T1 重載值

TL1 = TH1; //初值等于重載值

ET1 = 0; //禁止 T1 中斷

ES = 1; //使能串口中斷

TR1 = 1; //啟動 T1

}

/* UART 中斷服務函數(shù) */

void InterruptUART() interrupt 4{

if (RI){ //接收到字節(jié)

RI = 0; //手動清零接收中斷標志位

SBUF = SBUF + 1; //接收的數(shù)據+1 后發(fā)回,左邊是發(fā)送 SBUF,右邊是接收 SBUF

}

if (TI){ //字節(jié)發(fā)送完畢

TI = 0; //手動清零發(fā)送中斷標志位

}

}

大家可以試驗一下,看看是不是和前邊用 IO 口模擬通信實現(xiàn)的效果一致,而主循環(huán)卻 完全空出來了,我們就可以隨意添加其它功能代碼進去。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5622

    瀏覽量

    130485
  • uart
    +關注

    關注

    22

    文章

    1322

    瀏覽量

    107051
  • 串口通信
    +關注

    關注

    34

    文章

    1663

    瀏覽量

    58207

原文標題:UART串口通信的基本應用

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    JL杰理AC696N系列芯片開發(fā)UART串口應用寶典:打印、調音與通信Demo

    本文闡述了關于杰理AC696N系列芯片開發(fā)UART串口應用:打印、調音、通信Demo,能夠為大家對AC696N系列芯片做串口類方案時的一個小參考,從多個方面入手,提示大家在一些小細節(jié)方
    的頭像 發(fā)表于 03-31 10:00 ?502次閱讀
    JL杰理AC696N系列芯片開發(fā)<b class='flag-5'>UART</b><b class='flag-5'>串口</b>應用寶典:打印、調音與<b class='flag-5'>通信</b>Demo

    【瑞薩RA × Zephyr評測】LED、按鍵和UART

    實現(xiàn)在Zephyr操作系統(tǒng)下按鍵控制 LED 的開關狀態(tài),并通過 UART 輸出按鍵事件日志,驗證 GPIO 和串口通信功能。
    的頭像 發(fā)表于 01-10 10:21 ?2630次閱讀
    【瑞薩RA × Zephyr評測】LED、按鍵和<b class='flag-5'>UART</b>

    NS16C2552/NS16C2752雙串口UART芯片深度剖析

    NS16C2552/NS16C2752雙串口UART芯片深度剖析 在電子設計領域,UART(通用異步收發(fā)傳輸器)芯片是實現(xiàn)串行通信的關鍵組件。TI公司的NS16C2552和NS16C2
    的頭像 發(fā)表于 12-29 11:15 ?627次閱讀

    使用CW32 MCU來實現(xiàn)UART串口通信與GPIO控制

    最近在項目中使用CW32 MCU,完成了一個簡單的UART串口通信和GPIO控制的功能。CW32 MCU的資源相對豐富,特別適合一些低成本、低功耗的嵌入式應用。這里分享一下UART
    發(fā)表于 12-04 08:17

    UART 串口通信還能玩出什么花樣?

    還記得打印機、鼠標和調制解調器曾經使用粗線和笨重連接器嗎?那些必須擰進電腦里的連接器?這些設備很可能使用UART與電腦通信。雖然USB幾乎完全取代了那些老式的線纜和連接器,但UART絕非過時之物。你
    的頭像 發(fā)表于 11-24 19:05 ?588次閱讀
    <b class='flag-5'>UART</b> <b class='flag-5'>串口</b><b class='flag-5'>通信</b>還能玩出什么花樣?

    UART 升級到 USB-C: 串口通信演變史

    在嵌入式開發(fā)里,“串口”幾乎是每個人繞不開的關鍵詞。剛接觸單片機時,我們用的就是UART:插上線,打開串口調試助手,能收發(fā)數(shù)據就覺得世界都亮了。然而,當你回頭看,現(xiàn)在的桌面電腦幾乎找不到傳統(tǒng)
    的頭像 發(fā)表于 11-17 10:54 ?1791次閱讀
    <b class='flag-5'>UART</b> 升級到 USB-C: <b class='flag-5'>串口</b><b class='flag-5'>通信</b>演變史

    多路UART數(shù)據轉發(fā)芯片 支持1主4從UART接口 UART擴展芯片

    -40℃ 至 85℃ 的工業(yè)級溫度范圍,能夠在嚴苛環(huán)境下保持穩(wěn)定通信。該芯片提供 1 個主 UART 和 4 個從 UART,共 5 個獨立接口。主接口最高通信速率可達 460800
    的頭像 發(fā)表于 11-12 10:33 ?591次閱讀

    基于UART通訊控制TMC2208/2209模塊驅動兩相四線步進電機

    本文將介紹如何通過UART串口通信控制TMC2208/2209步進電機驅動模塊驅動42步進電機。從TMC2209詳細的說明的寄存器配置方法說明、常用指令說明、模塊的串口連接方式、電流、
    的頭像 發(fā)表于 11-10 19:33 ?3279次閱讀
    基于<b class='flag-5'>UART</b>通訊控制TMC2208/2209模塊驅動兩相四線步進電機

    全國產UART無線串口模塊技術全景解析與應用方案指南

    全國產UART無線串口模塊技術全景解析與應用指南 一、國產UART無線模塊技術發(fā)展現(xiàn)狀 1.1 技術演進歷程 UART無線串口模塊 作為物聯(lián)
    的頭像 發(fā)表于 10-27 10:27 ?757次閱讀

    基于FPGA開發(fā)板TSP的串口通信設計

    本文詳細介紹基于Terasic FPGA開發(fā)板TSP(又名C5P和OSK)和其板載CP2102N USB-UART橋接芯片的串口通信系統(tǒng)設計與實現(xiàn)。系統(tǒng)采用Verilog HDL編寫UART
    的頭像 發(fā)表于 10-15 11:05 ?4906次閱讀
    基于FPGA開發(fā)板TSP的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>設計

    基于FPGA開發(fā)板DE23-Lite的串口通信設計

    DE23-Lite開發(fā)板提供了一個UART通信接口(物理接口是下圖的Type C接口),用戶能夠通過主機與Agilex 3 FPGA進行串口通信。
    的頭像 發(fā)表于 10-15 10:57 ?4895次閱讀
    基于FPGA開發(fā)板DE23-Lite的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>設計

    Air780EGH串口通信優(yōu)化:硬件電路設計核心要素剖析

    要充分發(fā)揮Air780EGH的串口通信效能,硬件電路設計必須精準把控核心要素。下面將深入分析UART接口的電平標準、流控信號配置、波特率適配及調試串口管理,為優(yōu)化
    的頭像 發(fā)表于 08-11 15:44 ?932次閱讀
    Air780EGH<b class='flag-5'>串口</b><b class='flag-5'>通信</b>優(yōu)化:硬件電路設計核心要素剖析

    UART 擴展芯片 數(shù)據轉發(fā)多串口擴展 1主4從,高效通信

    uart
    穩(wěn)控自動化
    發(fā)布于 :2025年08月11日 14:20:36

    【沁恒CH585開發(fā)板免費試用體驗】UART 串口通信

    通信口(UART)就是我們在嵌入式中常說的串口,它還是一種通用的數(shù)據通信議。從名字上可以看出,USART在UART基礎上增加了同步功能,即U
    發(fā)表于 07-08 00:02

    芯知識|廣州唯創(chuàng)電子語音芯片UART通信協(xié)議解析:發(fā)碼長度與校驗碼計算

    一、UART通信協(xié)議概述UART(通用異步收發(fā)器)是一種廣泛應用于嵌入式系統(tǒng)的串行通信協(xié)議,其核心特點為無需時鐘同步,通過起始位、數(shù)據位、校驗位和停止位構成數(shù)據幀。在語音芯片應用中,
    的頭像 發(fā)表于 05-27 08:48 ?928次閱讀
    芯知識|廣州唯創(chuàng)電子語音芯片<b class='flag-5'>UART</b><b class='flag-5'>通信</b>協(xié)議解析:發(fā)碼長度與校驗碼計算
    东兴市| 手游| 罗平县| 阳高县| 阿克陶县| 白银市| 嵩明县| 特克斯县| 湟源县| 宝坻区| 通河县| 禹城市| 南木林县| 亚东县| 府谷县| 无锡市| 徐闻县| 许昌市| 普陀区| 山阴县| 新河县| 衡阳市| 志丹县| 鸡西市| 吉安县| 泾源县| 博客| 定安县| 金华市| 南昌市| 即墨市| 临海市| 泗阳县| 新巴尔虎左旗| 潜山县| 鄂托克前旗| 吴桥县| 肇州县| 荆州市| 祁连县| 辽宁省|