MCU-51:单片机串口详解

article/2025/10/14 21:50:52

目录

  • 一、计算机通信简介
  • 二、串口通信简介
    • 2.1 同步通信
    • 2.2 异步通信
  • 三、串行通信的传输方式
  • 四、串口通信硬件电路
  • 五、常见接口介绍
  • 六、串口相关寄存器详解
    • 6.1 特殊功能寄存器SCON
    • 6.2 PCON寄存器
    • 6.3 TMOD寄存器
  • 七、代码演示-单片机和电脑通信
    • 7.1 串口向电脑发送数据
    • 7.2 电脑通过串口控制LED
  • 注意:一定要看

一、计算机通信简介

概念:计算机与外部设备或计算机与计算机之间的信息交换。
主要的通信形式有两种:并行通信和串行通信。

**并行通信:**将数据字节的多位用多根数据线连接同时进行传送。
优点:控制简单、传输速度快。
缺点:长距离通信时,成本高且接受方的各位同时接收存在困难。
在这里插入图片描述
**串行通信:**将数据字节分成一位一位的形式在一条传输线上进行数据传输。
优点:传输线少、长距离传输成本低。
缺点:传输控制相对并行困难。
在这里插入图片描述

二、串口通信简介

串口通信可以分为同步通信和异步通信。

2.1 同步通信

同步通信:一种比特同步通信技术,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。

同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过两种方法实现
在这里插入图片描述

2.2 异步通信

异步通信:异步通信是指通信中两个字符(8位)之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。

异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。

通信的发送与接收设备使用格子的时钟控制数据的发送和接受过程。为了使双方的手法协调,要求发送和接收设备的时钟尽可能一致
在这里插入图片描述
异步通信特点:
1.不要求收发双方时钟的严格一致
2.容易实现
3.设备开销较小
4.每个字符需要附加2到3位用于起止位
5.各帧之间还有间隔
6.传输效率不高

三、串行通信的传输方式

传输方式有三种,分别为单工、半双工和全双工
单工:数据传输仅能延一个方向,不能实现反向传输。
半双工:数据传输可以延两个方向,但是需要分时进行(不能同时进行通信)。
全双工:数据可以同时进行双向传输(不需要要分时)。
在这里插入图片描述

四、串口通信硬件电路

1.简单的串口通信有两根通信线(发送端TXD 和 接收端RXD)。
2.TXD 和 RXD 需要交叉连接。
3.当只需要单向传输时,也可以只接一根传输线。
4.当电平标标准不一致时,需要加电平转换芯片。
在这里插入图片描述

五、常见接口介绍

在这里插入图片描述
除此之外还有CAN、USB等。

六、串口相关寄存器详解

51单片机串口通信相关寄存器有SCON、SBUF、PCON、TMOD等

6.1 特殊功能寄存器SCON

SCON:用来设定串行口的工作方式、接受/发送控制以及设置状态指示。
在这里插入图片描述
SM2:多机通讯控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。

REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。

TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位。

RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。

TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。

RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。RI也必须用软件清0。

SM1,SM0:串行工作方式:
在这里插入图片描述

6.2 PCON寄存器

注意:改寄存器中只有一位与串行口工作有关
在这里插入图片描述
SMOD:波特率倍增位。在串口工作在方式2、方式3,波特率与SMOD有关。

当SMOD = 1时,波特率提高一倍。
当SMOD = 0时,不加倍。

6.3 TMOD寄存器

在这里插入图片描述
高四位为定时计数器1的设置,低四位是定时计数器0设置,串口通信波特率设置占用定时计数器1,这里主要说串口通信,不过多说定时计数器,只需要设置定时计数器1的工作方式即可

当GATE=1时,“与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRx·INTx),当且仅当TRx=1,INTx=1(高电平)时,计数启动;否则,计数停止。

当INT0引脚为高电平时且TR0置位,TR0=1;启动定时器T0;当INT1引脚为高电平时且TR1置位,TR1=1;启动定时器T1。

当GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。

当TR0=1,启动定时器T0。当TR1=1,启动定时器T1。

C/T:定时器和计数器选择位,0为定时器,1为计数器
在这里插入图片描述

七、代码演示-单片机和电脑通信

7.1 串口向电脑发送数据

#include <REGX52.H>
#include "Delay.h"unsigned char Sec;void UART_Init()//4800bps@12.000MHz
{SCON=0x40;PCON=PCON|0x80;TMOD=TMOD&0x0F;//把TM0D的低四位清零,高四位保持不变TMOD=TMOD|0x20;//把TM0D的最低位置置1,高四位保持不变TL0=0xF3;//设置定时初值TH0=0xF3;//设置定时初值ET1=0;//禁止定时器1中断TR1=1;
}void UART_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);TI=0;
}void main()
{ UART_Init();while(1){UART_SendByte(Sec);Sec++;Delay(1000);}
}

7.2 电脑通过串口控制LED

main.c

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"void main()
{ UART_Init();while(1){}
}void UART_Routine() interrupt 4
{if(RI==1){P2=~SBUF;UART_SendByte(SBUF);RI=0;}
}

UART.c

#include <REGX52.H>void UART_Init()//4800bps@12.000MHz
{SCON=0x50;PCON=PCON|0x80;TMOD=TMOD&0x0F;//把TM0D的低四位清零,高四位保持不变TMOD=TMOD|0x20;//把TM0D的最低位置置1,高四位保持不变TL0=0xF3;//设置定时初值TH0=0xF3;//设置定时初值ET1=0;//禁止定时器1中断TR1=1;EA=1;ES=1;
}void UART_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);TI=0;
}

注意:一定要看

千万不要直接复制代码,因为是模块化编写,模块的代码没有往上复制,大家一定要自己动手跟着教学视屏自己写!!!!!


http://chatgpt.dhexx.cn/article/EI5p7mRm.shtml

相关文章

51单片机学习入门(三):串口

1.串口是什么&#xff1f; 串口是一种应用十分广泛的通讯接口&#xff0c;串口成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信。单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信。 51单片机内部自带UART&#xff08;…

51单片机——串口通信(发送和接受数据)

目录 一、实现的功能 二、串口通信 2.1单片机发送数据 2.1.1串口初始化 2.1.2串口发送程序 2.1.3发送效果 ​2.2单片机接收数据 2.2.1串口初始化 2.2.2接收数据程序 2.2.3接收效果 一、实现的功能 通过串口&#xff08;UART&#xff09;让单片机与计算机进行通信。51单…

51单片机-串口通信

目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部结构 2.5.相关寄存器 2.6.工作模式&#xff08;模式1&#xff09; 2.7.如何配置串口中断 3.实际应用…

IDEA调试注解处理器AbstractProcessor

1.右击项目Open In->Terminal 执行命令mvnDebug clean package 查看端口号 2.添加远程调试配置监听的端口 3.debug启动远程调试就欧克了

强大的IDEA调试工具

在开发中难免会遇到bug&#xff0c;而如何去跟有效率的去修复bug&#xff0c;除了必要的经验之外&#xff0c;巧妙的使用工具也是非常有必要的。 一下就是对IDEA强大调试工具的介绍 在调试代码的时候&#xff0c;你的项目得debug模式启动&#xff0c;也就是点那个绿色的甲虫启动…

IntelliJ IDEA调试显示表达式结果

今天无意中看到使用IntelliJ IDEA调试代码时&#xff0c;可以看到某段表达式的结果&#xff0c;如 在调试时&#xff0c;若想看到optStu.get().getName()的值该怎么做&#xff1f; 只需选中它 然后右键 点击Evaluate按钮即可出现result

idea 调试 java,将Intellij-IDEA调试器附加到正在运行的java进程

Is it possible to attach Intellij-IDEA debugger to a running java process? 解决方案 Yes! Here is how you set it up. Run Configuration Create a Remote run configuration: Run -> Edit Configurations... Click the "+" in the upper left Select the …

idea调试unity里面的lua代码

前言 本人一名java后端开发&#xff0c;看到前端同事调试lua代码无脑print&#xff0c;甚为鄙视&#xff0c;百度加实操写一份调试unity的lua脚本文档 操作 1.安装lua lua官网下载页面 最终下载页面 2.idea安装插件 emmylua 3.idea打开unity的lua脚本 idea->file->op…

idea调试maven项目

maven debug 调试 关联maven项目启动调试进行调试 关联maven项目 启动调试 进行调试

宝塔 xdebug idea 调试 php

安装宝塔 安装php xdebug插件 查看是否安装成功 phpinfo 修改php.ini 配置 [XDebug] ;xdebug.profiler_append 0 ;xdebug.profiler_enable 1 ;xdebug.profiler_enable_trigger 0 ;xdebug.profiler_output_dir "D:\BtSoft\temp\xdebug" ;xdebug.trace_output_di…

IDEA调试程序的基本方法

IDEA基本调试步骤 版本 IntelliJ IDEA 2020.1 x64 操作系统 Windows10 64位 步骤 先上一段代码&#xff0c;求解如下问题&#xff0c;因为涉及了循环&#xff0c;判断等&#xff0c;可以用于调试 问题&#xff1a;寻找某两个数相除&#xff0c;其结果 离黄金分割点 0.618最…

IDEA调试模式技巧

记录自己在使用IDEA调试过程中的发现 文章目录 1.debug时在list或map中快速找到目标对象2.条件断点 1.debug时在list或map中快速找到目标对象 debug过程中map中对象很多&#xff1a; 在该map中获取指定对象可以右键该map&#xff0c;选择filter&#xff1a; 输入过滤条件&a…

使用IDEA调试DBeaver

使用IDEA调试DBeaver 工具准备代码准备准备 Eclipse IDE 和 workspace在 Eclipse 中运行和调试在 IDEA 中运行和调试 官方WIKI&#xff1a; Develop-in-IDEA 最近需要对DBeavar进行二次开发&#xff0c;整理一下搭建开发环境的步骤和遇到的一些问题 工具准备 IDEA版本&#…

IDEA调试技巧

Debug技巧 在我们的编程生涯中&#xff0c;调试代码是免不了的&#xff0c;而如何调试代码就显得尤为重要了&#xff0c;其中利用 IDE 自带的调试工具&#xff0c;是我们快速定位问题的重要手段之一。在此&#xff0c;我们就一起来了解一下 IntelliJ IDEA 自带的调试工具&…

Idea 调试自定义 AbstractProcessor 程序

我们常使用的 Lombok 可以自动生成 gettr 和 setter 方法,使用起来非常方便;有时候我们也要去实现自己的注解处理器,实现一些在编译阶段需要执行的逻辑,例如我之前写的 spring cloud 自动生成 openfeign 的Fallback 降级方法;自动生成 openfeign 的Fallback 但是自定义注…

idea调试jdk源码

前言&#xff1a; 最近想看看HashMap的实现过程&#xff0c;本来了解到private notes可以对源码添加注释&#xff0c;但最后没有获取到插件&#xff0c;该问题没有解决&#xff0c;于是就想直接对源码包进行调试以及修改。 一、解压源码包 在jdk的安装路径内找到src.zip复制一…

intellij idea调试之jar包调试

之前写过一篇文章《记一次“java: 程序包org.aspectj.lang不存在”问题解决》。但是有次我碰到用那种方法也解决不了的场景。想来想去只能直接跑jar包来运行程序了。但是还需要用idea来调试程序&#xff0c;这个时候就需要做一些关联配置。通过网上搜索得到方案&#xff0c;整个…

使用IDEA调试debug小技巧

直接定位目标位置 调试想具体定位到目标断点处时做法有&#xff1a; 不断的按F8&#xff0c;直至定位到目标位置在目标定位处打个断点然后按F9&#xff0c;跳到具体目标位置直接点击目标位置前面的小数字&#xff08;推荐使用&#xff09; 例如下图&#xff0c;想从断点1处直接…

idea调试vue项目

前言 之前尝试的各种前端编辑器H5Builder,SublimeText,VSCode,NotePad等等&#xff1b;作为一名后端开发&#xff0c;自己是从Eclipse系列的IDE转向使用JetBrain系列&#xff0c;深受InteliJ IDEA的毒害 近期公司的项目使用VSCode开发。然而作为大集成的IDEA&#xff0c;更能…

IDEA 调试技巧

简介 在工作中看到很多水平不错的程序员&#xff0c;在调试代码的时候&#xff0c;也还只是停留在单步 debug 的阶段。如果能掌握更多的代码调试技巧&#xff0c;那么将大大提升工作效率。下面就让我么一起来系统的学习下 IDEA 的调试技巧吧。 debug界面介绍 默认设置下&…