2021-912--51单片机串口通信--SCON方式1

article/2025/10/24 21:33:10

计算机的通信分为:串行通信和并行通信

串行通信分为:异步通信和同步通信

异步通信:发送设备与接受设备有各自的时钟,通信时双方的时钟尽量保持一致,
以字符为单位进行传输,
字符与字符间的时间间隔是任意的,
每个字符中的各位是以固定时间传送的,
异步通信的数据格式:起始位,7位数据,校验位,停止位(这10位数据就是所说的字符,叫1帧数据)

同步通信:
建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。
传输数据的位之间的距离均为“位间隔的整数倍”,
传输的字符间不留间隙,保持位同步和字符同步,
两种方式实现同步:外同步,自同步
外同步:计算机甲控制计算机乙的时钟,
自同步:???

串行通信的传输方向:
单工:仅能沿1个方向传输数据
半双工:可以沿着两个方向传输,但是要分时进行
全双工:可同时进行双向传输

接下来介绍全双工的使用:
前面说过有校验位这个概念,
介绍一下串行通信中常见的错误校验,
1.奇偶校验:
在发送数据时,数据位尾随的一位叫奇偶校验位(1/0),
奇校验时,数据中的1的个数与校验位1的个数为奇数,
偶校验时,数据中1的个数与校验位1的个数为偶数,
接受数据时,对1的个数进行校验,若与规范不一致,则数据传输过程有错误。
例如:
8位数据:1101 1101
8位数据中6个1
8位数据中的最后一位为校验位
校验位为1,
6+1=7
若采用奇校验,则正常

2.代码和校验
发送方将所发数据求和(或个字节异或),
产生一个字节的校验字符(校验和),
附加到数据块末尾。
接收方接收数据时,
同时对数据块(不包括校验字节)求和(或对个字节异或),
将所得结果与发送方的校验和比较,
若一致,则认为传输正常。
否则,传输出错。

传输速率:
比特率也叫波特率
是每秒钟传输二进制代码的位数
单位:位/秒(bps)
比如:每秒钟传输240个字符,
每个字符是10位:1个起始位,8个数据位(包括一位校验位),1个停止位
那么,
波特率=10*240=2400bps

传输距离与传输速率的关系:
当传输线为0.3m,50pf电容的非平衡屏蔽双绞线,传输距离随传输速率的增加而减小。
当比特率超过1000bps,最大传输距离迅速下降,如9600bps时,最大距离下降到76米。

串口通信需要关注三个引脚
TXD RXD GND

80c51串行口结构
在这里插入图片描述
物理上是有2个SUBF,
但是,这两个地址相同,
所以,
在软件上直接配置SBUF就行,
单片机在运行时会自己做出区分,发送和接收不会重叠。

想要使用串行口,需要配置SCON
这是一个特殊功能寄存器,
功能:设定串口的工作方式,接收/发送控制,设置状态标志
在这里插入图片描述在这里插入图片描述
通常使用方式1进行串口通信

SM2是多机通信控制位,主要用于方式2方式3
使用方式2或方式3时,SM2设置为1,---------------------------------------------------------------------------------------------------------------------------------------------还没用过--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

补充一句
SM2=0时,不用作其他配置就能使收到的数据进入SBUF,并激活RI
而且方式1时,若SM2==1,则只有接收到有效停止位,RI才置1

REN:允许串行接收位
由软件置REN=1,启动串行口接收数据
REN=0,禁止接收

TI发送中断标志位
RI接收中断标志位

PCON中有一个SMOD与串行口工作有关
SMOD是波特率倍增位
串行口方式1,2,3的波特率与SMOD有关
SMOD=1,波特率提高1倍
复位时,SMOD=0

串行口工作方式
发送和接收数据时,由低位到高位
起始位 D0 D1 D2 D3 D4 D5 D6 D7 停止位

方式1
用软件置REN为1
接收器以所选波特率的16倍速率采样RXD引脚电平,
检测到RXD引脚发生负跳变时,说明起始位有效,
将其移入输入移位寄存器,
并开始接收这一帧数据的其余位,
接收数据时,数据从输入移位寄存器右边移入,
起始位移动至最左边时,控制电路进行最后一次移位。
当RI=0且SM2=0(或接收到的停止位为1时)
将接收到的9位数据的前8位数据装到SUBF
第9位(停止位)进入RB8
并置RI=1,
向CPU请求中断。

波特率
T1作为波特率发生器时,
最典型的用法是使T1工作在自动重装8位定时器方式(即方式2,且TCON的TR1=1,启动定时器)
溢出率=TH1的计数值=fosc/(12*(256-TH1))
在这里插入图片描述
串口的使用:
1.确定T1的工作方式(配置TMOD)—8位自动重装
2.计算T1初值,装载TH1 TL1
3.启动T1(TCON中的TR1)
4.确定串行口控制(编程SCON寄存器)
5.配置中断(IE IP寄存器)
在这里插入图片描述

/*波特率4800*/
#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;void UsartInit()
{SCON=0X50;			//设置为工作方式1;SCON:SM0 SM1 SM2 REN TB8 RB8 TI RI  方式1:SM0 SM1 = 01,且打开REN即高4位为0101,第四位全为0,所以SCON=0x50TMOD=0X20;			//设置计数器工作方式2PCON=0X80;			//波特率加倍,PCON中的D7是SMOD,SMOD=1,则波特率加倍,即PCON=0x80TH1=0XF3;				//计数器初始值设置,注意波特率是4800的TL1=0XF3;ES=1;						//打开接收中断EA=1;						//打开总中断TR1=1;					//打开计数器
}void Usart() interrupt 4
{u8 receiveData;receiveData=SBUF;//出去接收到的数据RI = 0;//清除接收中断标志位SBUF=receiveData;//将接收到的数据放入到发送寄存器while(!TI);			 //等待发送数据完成TI=0;						 //清除发送完成标志位
}void main()
{	UsartInit();  //	串口初始化while(1);		
}

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

相关文章

串行口控制寄存器(SCON)(转载自百度文库)

SCON是MCS-51单片机的一个可位寻址的专用寄存器,用于串行数据通信的控制。单元地址为98H,位地址为98H~9FH。寄存器的内容及位地址表示如下: 位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H 位符号 SM0 SM1 SM2 …

51/STC12单片机SCON,PCON,TMOD寄存器定义及功能

串口工作方式寄存器SCON 串口工作方式寄存器SCON,SCON(Serial Control Register)串行口控制寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态。SCON既可以字节寻址,也可以位寻址,其字节地址…

TMOD、SCON、PCON寄存器的配置

TMOD控制寄存器 TMOD是定时器、计数器模式控制寄存器,它是一个逐位定义的8为寄存器,但只能使用字节寻址。 其各位是: 由上图我们就可以看出,这个寄存器控制了两个定时器/计数器 寄存器的高四位控制定时器1,低四位…

JDK 高版本没有VisualVM

VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,提供强大的分析能力,对 Java 应用程序做性能分析和调优。 在高版本JDK(大于1.8或后期更新的1.8版本)中已经不会再自动集成 VisualVM 1、下载&#xff…

visualvm下载和安装

visualvm下载和安装 官网下载地址: https://visualvm.github.io/index.html 电脑登录不上,可以使用手机打开, 附带我下载好的visualvm2.0.3版本的网盘地址:(适用于Jdk1.8) 链接:https://pan…

VisualVM的配置和使用

下载VisualVM:官网下载页面 解压缩后进入到etc目录 修改visualvm.conf配置文件 需要注意: 我当时使用的visualVM是2.0.3这个版本的只支持jdk8以前的,我本地配置的环境变量是jdk14,但是又不想配置jdk8作为环境变量,需…

Mac 系统下VisualVM的安装

1、preferences----plugins搜索插件visualvm 插件,点击下载。 2、下载完成后,在idea上配置visualvm参数:preferences----other settings----visualvm launcher其中第一个参数是在jdk中visualvm.exe;第二个参数是jdk的位置 3、按理说配置成功后重启idea,…

VisualVM 使用心得

JDK中有个好用的工具“VisualVM”可以实时可视化的查看到java程序内存变化情况,对于理解GC和java内存管理还是有很大帮助的,以前看论坛看帖子讲到java内存管理真是各说纷纭啊!有人说“JVM的内存分为两块堆和栈”,还有人说"JV…

Mac上安装VisualVM

首先去下载 官网: https://visualvm.github.io/index.html然后访达找到应用程序,右键VisualVM显示包内容,找到: /Applications/VisualVM.app/Contents/Resources/visualvm/etc 下面的visualvm.conf文件 修改它 在文件最下面加…

Mac版VisualVM启动提示You are running VisualVM using Java Runtime Environment ( JRE ) . Please use

今天更新了VisualVM 2.0.5,启动的时候提示找不到jdk引用,于是到包内部的visualvm.conf中修改jdk引用地址。 visualvm.conf的路径 /Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf 将visualvm_jdkhome修改为类似以下的路径就…

VisualVM工具的下载及插件安装

文章目录 一.前言二.下载安装三.插件安装 一.前言 VisualVM作为GitHub的独立工具分发,并作为GraalVM的可选组件分发。两者都是具有相同功能的相同位。独立工具在任何兼容的JDK上运行,捆绑工具配置为使用主机GraalVM运行。 VisualVM也作为Java VisualVM…

IDEA-集成VisualVM插件,启动Java VisualVM

起因: 我忘了我之前起程序去关联Java VisualVM是咋配的了今天百度搜的时候意外发现idea可以直接起,只需要安装VisualVM插件然后启动Java VisualVM 安装VisualVM插件 路径: File->Setting->Plugins 操作:在marketplace里搜关键词VisualVM,然后点…

VisualVM【实践 01】工具VisualVM下载使用及插件Visual GC示例说明HashMap初始化容量initialCapacity的影响(源码及visualvm_215.zip分享)

VisualVM【官网】很难下载,懂得都懂 😢,简单叙述一下下载的过程: 使用PC各种浏览器失败【❌】使用Android手机多个浏览器失败【❌】使用IOS手机多个浏览器,仅有Safari浏览器成功【🆗】 大家可以体会一下&…

深入理解Java虚拟机——VisualVM工具的下载及安装

目录 一、VisualVM工具的概述二、VisualVM工具的下载地址如下:三、VisualVM工具的安装步骤: 一、VisualVM工具的概述 VisualVM(All-in-One Java Troubleshooting Tool)是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序…

vs = VirtualService

VirtualService 您是正确的。我混淆了Kubernetes中的资源类型。"vs"是Istio服务网格中的资源类型,代表Virtual Service(虚拟服务)。 Virtual Service是Istio中的一种路由规则,它定义了如何将请求路由到服务的不同版本…

深入理解java虚拟机(十一)VisualVM:多合-故障处理工具

文章目录 前言一、VisualVM兼容范围与插件安装二、生成、浏览堆转储快照三、分析程序性能四、BTrace动态日志跟踪结尾 前言 VisualVM在JDK 6 Update 7中首次发布,直到JRockit Mission Control与OracleJDK的融合工作完成之前,它都曾是Oracle主力推动的多…

visualvm安装并且讲解说明

Jvisualvm安装并且讲解说明 1.visualvm安装使用教程 1.visualvm安装使用教程 注意:JDK 1.8之前是自带的,我的是jdk11所以需要手动安装 安装软件地址: 链接:https://pan.baidu.com/s/1JEWpF6eyBCAVNo5rBEa08Q 提取码:8y37 安装教程 1.下载对应…

性能分析利器总结一《VisualVM》

VisualVM 随着JDK7而出现,位于JDK根目录下的bin目录下。运行环境需JDK1.6及以上,能监控JDK1.4以上版本的应用程序。 相比JConsole,感觉功能更强大,且可集成各类插件,使其更强大。Jconsole算是VisualVM的子集吧。另外…

VM 和 VC

一、vm 1、Vue的实例对象,以后简称vm。 (1) vm的隐式原型属性指向Vue的原型对象。 (2) VueComponent的原型对象的隐式原型属性指向Vue的原型对象。 二、vc 1、组件本质: 组件其实是一个名为VueComponent的构造函数,且不是程序员定义的&am…

杂记十五:VisualVM使用教程

一、插件下载 1.安装jdk并启动jvisualvm.exe 2.插件安装 点击已下载,第一次开启的时候已下载里面是空的,需要点击添加插件把已经下载的插件添加到已下载中。 如何下载插件? 下载地址:https://visualvm.github.io/pluginscente…