【51單片機】程序實驗13.串口通信

主要參考學習資料:B站【普中官方】51單片機手把手教學視頻

開發資料下載鏈接:http://www.prechin.cn/gongsixinwen/208.html

前置知識:C語言

單片機套裝:普中STC51單片機開發板A4標準版套餐7

目錄

  • 通信的基本概念
    • 串行通信與并行通信
      • 串行通信
      • 并行通信
    • 異步通信與同步通信
      • 異步通信
      • 同步通信
    • 單工、半雙工與全雙工通信
    • 通信速率
  • 51單片機串口介紹
    • 串口通信簡介
      • 接口標準
      • 通信協議
      • 串口內部結構
    • 串口相關寄存器
      • 串口控制寄存器SCON
      • 電源控制寄存器PCON
    • 串口工作方式
      • 方式0
      • 方式1
      • 方式2和方式3
    • 串口的使用方法
      • 波特率計算
      • 串口初始化步驟
  • 硬件設計
  • 實驗13 串口通信

通信的基本概念

串行通信與并行通信

串行通信

使用一條數據線,8位順次傳送,適用于遠距離傳輸,數據處理較復雜。

并行通信

使用多條數據線,8位同時傳送,數據處理簡單,傳輸速度快,成本高。

異步通信與同步通信

異步通信

發送設備和接收設備使用各自的時鐘,要求兩者時鐘盡量但不嚴格一致。

相鄰字符幀間隙任意,相鄰位間隙相等。

同步通信

發送設備時鐘控制接收設備使兩者時鐘同步。

相鄰字符幀不留間隙,相鄰位間隙相等。

外同步:兩條線分別傳輸數據信號和時鐘信號。

自同步:一條線傳輸數據和時鐘的疊加信號。0先低后高,1先高后低。

單工、半雙工與全雙工通信

單工通信(廣播):數據只按一個方向傳輸,不能反向傳輸。

半雙工通信(對講機):數據可以按兩個方向傳輸,但只能分時進行。

全雙工通信(電話):數據可以同時按兩個方向傳輸。

通信速率

比特率(bps):每秒鐘傳輸二進制代碼的位數。

波特率(Baud):每秒鐘傳輸的碼元數。

碼元:承載信息量的基本信號單位。通常一個碼元表示兩種狀態0和1,此時波特率=比特率。

51單片機串口介紹

串口通信簡介

串口通信指外設和計算機之間以數據信號線和地線按照位進行數據傳輸的通信方式。

接口標準

串口(串行接口)是一種接口標準,規定了接口的物理標準,沒有規定電纜和使用協議。

接口根據針腳數量不同分為DB25和DB9:

帶孔的為母頭,帶針的為公頭,兩者管腳從同一方向看順序相反,連接時一一對應:

RS-232C標準接口主要引腳定義

(插針序號括號外為DB25腳位,括號內為DB9腳位)

插針序號信號名稱功能信號方向
1PGND保護接地
2(3)TXD發送數據(串行輸出)DTE→DCE
3(2)RXD接收數據(串行輸入)DTE←DCE
4(7)RTS請求發送DTE→DCE
5(8)CTS允許發送DTE←DCE
6(6)DSRDCE就緒(數據建立就緒)DTE←DCE
7(5)SGND信號接地
8(1)DCD載波檢測DTE←DCE
20(4)DTRDTE就緒(數據終端準備就緒)DTE→DCE
22(9)RI振鈴指示DTE←DCE

其中串口通信常用的為2/3/5腳(DB9)。

RS-232C電平規定邏輯1為-3V到-15V,邏輯0為3V到15V。51單片機需要通過MAX232芯片將RS232電平與TTL電平進行轉換。

通信協議

RS232的通信協議通常遵循96-N-8-1格式:9600bps-無校驗位-8位傳輸數據位-使用1為停止位

校驗位:解決串口通信因外部干擾導致的傳輸偏差問題,分為奇校驗、偶校驗和無校驗(零校驗)。

停止位:數據包的起始位由邏輯電平0表示,而停止位可以是0.5/1/1.5/2。

串口內部結構

TXD/RXD:單片機的串口管腳,TXD對應P3.1,RXD對應P3.0。

SBUF:串口數據緩存寄存器,存儲發送和接受的數據。

TH1/TL1:定時器1的功能,采用方式2工作,用于產生波特率。

SMOD:特殊寄存器,控制T1溢出率的分頻,進而控制T1/R1的采樣頻率。置零時先二分頻再十六分頻,置一時直接十六分頻。

TI/R1:發送/接收控制器,數據發送/接收完成時產生發送/接收中斷。

串口相關寄存器

串口控制寄存器SCON

76543210
字節地址:98HSM0SM1SM2RENTB8RB8TIRI
SM0SM1方式說明波特率( f o s c f_{\mathrm{osc}} fosc?為外部晶振頻率)
000移位寄存器 f o s c / 12 f_{\mathrm{osc}}/12 fosc?/12
01110位異步收發器(8位數據)可變
10211位異步收發器(9位數據) f o s c / 64 f_{\mathrm{osc}}/64 fosc?/64 f o s c / 12 f_{\mathrm{osc}}/12 fosc?/12
11311位異步收發器(9位數據)可變

SM2和RB8用于方式2和方式3中多級通信(一臺主機通過一條總線向多個設備發送數據)下數據的選擇性接收。

SM2控制RB8是否激活。當SM2=0,RB8不激活;當SM2=1,RB8激活。

RB8在激活狀態下控制RI是否激活。當RB8=0,收到信息即丟棄;當RB8=1,收到信息存儲進SBUF。RB8在非激活狀態下,收到信息均可以存儲進SBUF。

REN是允許接收位,置一時啟動串行口接收數據,置零時禁止接收,通常置一。

TB8和RB8工作在方式2和方式3用來發送數據的第9位,可用于奇偶校驗位或多級通信中地址幀和數據幀的標志位。

TI/R1是發送/接收中斷標志位,在方式0當串行發送/接收第8位數據結束時或在其他方式串行發送/接收停止位時置一發送中斷請求,需要軟件清零取消中斷申請等待下一次中斷。

電源控制寄存器PCON

76543210
字節地址:97HSMOD

PCON只用到最高位,用于控制波特率的分頻。

串口工作方式

方式0

方式0數據由RXD(P3.0)輸入或輸出,移位脈沖由TXD輸出,發送和接收均為8位數據,低位在前高位在后,波特率為 f o s c / 12 f_{\mathrm{osc}}/12 fosc?/12

輸出(圖中線條高低表示對應的高低電平)

輸入

方式1

方式1是10位數據的異步通信口,其中起始位為低電平,停止位為高電平。TXD為數據發送引腳,RXD為數據接收引腳。

輸出

發送開始時,存儲在輸出寄存器中的數據幀以起始位為首從左向右移入TXD引腳并輸出,同時輸出寄存器左邊的空缺補零。當停止位移至輸出寄存器右端時,左邊其余位全為0,檢測電路檢測到該條件使控制電路進行最后一次移位,并將TI置一。

輸入

位采樣脈沖為波特率,由TH1和TL1提供,控制對RXD的電平采樣。采樣接收到下降沿時起始位有效,開始接收一幀數據,數據幀以起始位為首從右向左移入移位寄存器。起始位移至移位寄存器左端時,控制電路進行最后一次移位。當RI=0且SM2=0時,移位寄存器將接收到9位數據的前8位存儲進SBUF,第9位進入RB8并將RI置一。

方式2和方式3

方式2和方式3與方式1的不同在于數據幀為11位,多出一位RB8/TB8。其數據幀的接收和發送過程與方式1類似,區別在于在接收數據時,進入RB8的信號從停止位變為了數據位的第9位,可以控制多級通信中信息的選擇性發送和接收(當RI=0且SM2=0時)。

輸出(過程與方式1類似)

輸入

串口的使用方法

波特率計算

方式0: f o s c / 12 f_{\mathrm{osc}}/12 fosc?/12

方式2: ( 2 S M O D / 64 ) ? f o s c (2^{\mathrm{SMOD}}/64)\cdot f_{\mathrm{osc}} (2SMOD/64)?fosc?

方式1/3: ( 2 S M O D / 32 ) ? T 1 溢出率 (2^{\mathrm{SMOD}}/32)\cdot\mathrm{T1}溢出率 (2SMOD/32)?T1溢出率

2 S M O D 2^{\mathrm{SMOD}} 2SMOD的意義是當SMOD=0/1,進行/不進行二分頻。

T 1 溢出率 = f o s c / [ 12 × ( 256 ? T H 1 ) ] \mathrm{T1}溢出率=f_{\mathrm{osc}}/[12\times(256-\mathrm{TH1})] T1溢出率=fosc?/[12×(256?TH1)]

其中 12 / f o s c 12/f_{\mathrm{osc}} 12/fosc?是一個機器周期, 256 ? T H 1 256-\mathrm{TH1} 256?TH1為定時器在自動重載模式下溢出一次所需的機器周期數(參見外部中斷實驗中定時器中斷部分),兩者相乘取倒數得到溢出率。

串口初始化步驟

①確定T1工作方式(TMOD寄存器);

②確定串口工作方式(SCON寄存器);

③計算TI初值(設定波特率),裝載TH1、TL1;

④啟動T1(TCON中的TR1位);

⑤若使用中斷,需開啟串口中斷控制位(IE寄存器)。

//串口初始化函數
void uart_init(u8 baud)
{//設置定時器工作方式2,或運算不干擾其他位TMOD |= 0X20;//設置串口工作方式1SCON = 0X50;//不采用二分頻PCON = 0X80;//定時器初值設置TH1 = baud;TL1 = baud;//打開接收中斷ES = 1;//打開總中斷EA = 1;//打開定時器TR1 = 1;
}

硬件設計

該電路未采用MAX232電平轉換芯片,而是USB轉TTL的CH340G轉換芯片,現今筆記本電腦大多沒有RS232接口,因此通過USB串口互轉實現串口通信。其原理與下載電路相同,單片機程序燒錄的過程實質上也是串口通信。

實驗13 串口通信

實現功能:當串口助手發送數據給單片機,單片機原封不動轉發給串口助手顯示。

使用波特率計算器獲取十六進制初值:

#include "reg52.h"typedef unsigned char u8;
typedef unsigned int u16;
//串口初始化函數
void uart_init(u8 baud)
{TMOD |= 0X20;SCON = 0X50;PCON = 0X80;TH1 = baud;TL1 = baud;ES = 1;EA = 1;TR1 = 1;
}void main()
{//串口初始化uart_init(0XFA);while(1){}
}
//處理接收中斷(RI=1)的服務函數,串口中斷代號為4
void uart() interrupt 4
{//定義接收數據的變量u8 rec_data = 0;//將接收控制器置零RI = 0;//讀取SBUF接收的數據rec_data = SBUF;//將數據寫入SBUF進行發送SBUF = rec_data;//等待發送中斷(TI=1)while(!TI);//將發送控制器置零TI = 0;
}

先燒錄程序,然后打開串口助手軟件:

連接開發板,檢查端口號是否匹配,波特率設為實驗所用波特率,在串口設置中檢驗校驗方式,最后打開串口。

輸入數據后發送,上方窗口最新行顯示接收到的數據:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72457.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72457.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72457.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

論文閱讀筆記:ArcFace: Additive Angular Margin Loss for Deep Face Recognition

論文閱讀筆記:ArcFace: Additive Angular Margin Loss for Deep Face Recognition 1 背景2 創新點3 方法4 模塊4.1 Softmax4.2 權重歸一化4.3 乘性角度間隔4.4 特征歸一化4.5 加性余弦間隔4.6 加性角度間隔4.7 二值化情況下的比較4.8 目標Logit分析 5 效果5.1 消融實…

代碼隨想錄算法訓練營 | 圖論 | DFS

98. 所有可達路徑// DFS #include <bits/stdc.h> using namespace std;vector<vector<int>> result; vector<int> path;void dfs(const vector<list<int>> &graph, int i, int target) {if (i target) {result.push_back(path);retu…

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks KDD22 推薦指數&#xff1a;#paper/??#? 動機 本文探討了圖神經網絡&#xff08;GNN&#xff09;在遷移學習中“預訓練-微調”框架的局限性及改進方向。現有方法通過預訓練&#xff08…

迷你世界腳本方塊接口:Block

方塊接口&#xff1a;Block 彼得兔 更新時間: 2024-08-27 11:04:56 具體函數名及描述如下&#xff1a; 序號 函數名 函數描述 1 isSolidBlock(...) 是否是固體方塊 2 isLiquidBlock(...) 是否是液體方塊 3 isAirBlock(...) 是否是氣體方塊 4 getBl…

Windows下git疑難:有文件無法被跟蹤

Windows下git疑難&#xff1a;有文件無法被跟蹤 最近在寫一個c# WinFrom程序&#xff0c; 奇怪的是&#xff0c;frmMain.cs這個文件一直無法被跟蹤 研究了很久&#xff0c; 參考這一篇 https://blog.csdn.net/m0_37315653/article/details/83064810 git rm --cached ./ -r 之…

Live2d官方項目運行

Live2d官方項目運行 1-參考網址 教程網址&#xff1a;https://blog.csdn.net/qq_39123467/article/details/131735085live2d官方地址&#xff1a;https://live2d.com/cubism-sdk/download/ 2-上手實踐 1&#xff09;先打開官方項目-全部路徑打開2&#xff09;cd /CubismSdkFo…

BUU43 [BJDCTF2020]The mystery of ip 1

前置知識&#xff1a; X - Forwarded - For注入 X - Forwarded - For&#xff08;XFF&#xff09;是一個 HTTP 頭字段&#xff0c;用于記錄客戶端的真實 IP 地址。當客戶端請求經過代理服務器時&#xff0c;代理服務器會將客戶端的 IP 地址添加到 X - Forwarded - For 頭中。…

張岳教授:語言模型推理與泛化研究 | ICLR 2025 特邀報告與團隊專場

點擊藍字 關注我們 AI TIME歡迎每一位AI愛好者的加入&#xff01; AITIME 01 ICLR 2025預講會特邀報告 AITIME 02 ICLR 2025預講會西湖大學張岳老師實驗室專場 01 AI生成文本的自動化檢測 Glimpse: Enabling White-Box Methods to Use Proprietary Models for Zero-Shot LLM-Ge…

MySQL SQL 優化專題

MySQL SQL 優化專題 1. 插入數據優化 -- 普通插入&#xff08;不推薦&#xff09; INSERT INTO tb_user VALUES(1,tom); INSERT INTO tb_user VALUES(2,cat); INSERT INTO tb_user VALUES(3,jerry);-- 優化方案1&#xff1a;批量插入&#xff08;推薦&#xff0c;不建議超過1…

【AI深度學習基礎】NumPy完全指南進階篇:核心功能與工程實踐(含完整代碼)

NumPy系列文章 入門篇進階篇終極篇 一、引言 在掌握NumPy基礎操作后&#xff0c;開發者常面臨真實工程場景中的三大挑戰&#xff1a;如何優雅地處理高維數據交互&#xff1f;如何在大規模計算中實現內存與性能的平衡&#xff1f;怎樣與深度學習框架實現高效協同&#xff1f;…

Python學習第十八天之深度學習之Tensorboard

Tensorboard 1.TensorBoard詳解2.安裝3.使用4.圖像數據格式的一些理解 后續會陸續在詞博客上更新Tensorboard相關知識 1.TensorBoard詳解 TensorBoard是一個可視化的模塊&#xff0c;該模塊功能強大&#xff0c;可用于深度學習網絡模型訓練查看模型結構和訓練效果&#xff08;…

【GraphQL API 漏洞簡介】

GraphQL API 漏洞簡介 一、漏洞原理與分類二、漏洞檢測方法三、典型利用方式四、工具推薦防御建議 GraphQL API 因其靈活性和高效性被廣泛應用&#xff0c;但也因設計和實現缺陷存在多種安全風險。以下從漏洞原理、檢測方法及利用方式三個維度進行詳細分析&#xff1a; 一、漏洞…

Windows逆向工程入門之MASM數據結構使用

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> ???鏈接點擊跳轉博客主頁 目錄 第一章&#xff1a;MASM數據定義體系精要 1.1 基礎數據類型全景 1.1.1 整型數據規范 1.1.2 浮點數據編碼 1.2 復合數據結構 1.2.1 多維數組定義 1.2.2 復雜結構體 第二章&#xf…

筑牢安全防線:工商業場所燃氣泄漏防護新方案

燃氣安全是企業經營不可逾越的生命線。在餐飲后廚、化工車間、酒店鍋爐房等場所&#xff0c;可燃氣體一旦泄漏&#xff0c;極易引發嚴重事故。如何實現精準監測、快速響應&#xff0c;成為工業及商業領域安全管理的核心訴求。旭華智能深耕安全監測領域&#xff0c;推出的工業及…

本地部署大數據集群前置準備

1. 設置VMware網段 虛擬網絡編輯器——更改設置——選擇VMnet8——子網改成192.168.88.0——NAT設置——網關設置為192.168.88.2 2. 下載CentOS操作系統 下載CentOS 7.6(1810)版本 3. 在VMware中安裝CentOS操作系統 創建新的虛擬機——典型——安裝光盤映像文件——輸入賬…

【藍橋杯單片機】第十二屆省賽

一、真題 二、模塊構建 1.編寫初始化函數(init.c) void Cls_Peripheral(void); 關閉led led對應的鎖存器由Y4C控制關閉蜂鳴器和繼電器 由Y5C控制 2.編寫LED函數&#xff08;led.c&#xff09; void Led_Disp(unsigned char ucLed); 將ucLed取反的值賦給P0 開啟鎖存器…

PyCharm接入本地部署DeepSeek 實現AI編程!【支持windows與linux】

今天嘗試在pycharm上接入了本地部署的deepseek&#xff0c;實現了AI編程&#xff0c;體驗還是很棒的。下面詳細敘述整個安裝過程。 本次搭建的框架組合是 DeepSeek-r1:1.5b/7b Pycharm專業版或者社區版 Proxy AI&#xff08;CodeGPT&#xff09; 首先了解不同版本的deepsee…

CSS 系列之:grid 布局

基本概念 <template><div class"parent"><div class"box">p1-1</div><div class"box">p1-2</div><div class"box">p1-3</div></div><div class"parent"><…

數學軟件Matlab下載|支持Win+Mac網盤資源分享

如大家所了解的&#xff0c;Matlab與Maple、Mathematica并稱為三大數學軟件。Matlab應用廣泛&#xff0c;常被用于數據分析、無線通信、深度學習、圖像處理與計算機視覺、信號處理、量化金融與風險管理、機器人&#xff0c;控制系統等領域。 Matlab將數值分析、矩陣計算、科學…

水仙花數(華為OD)

題目描述 所謂水仙花數&#xff0c;是指一個n位的正整數&#xff0c;其各位數字的n次方和等于該數本身。 例如153是水仙花數&#xff0c;153是一個3位數&#xff0c;并且153 13 53 33。 輸入描述 第一行輸入一個整數n&#xff0c;表示一個n位的正整數。n在3到7之間&#x…