51学习第七天(二)--80c51串行口内部结构介绍--串行口控制寄存器SCON--特殊功能寄存器PCON///80c51的串行口工作方式--波特率计算-串口使用之前的初始化

article/2025/10/24 21:35:32

学习串行口时,感觉挺复杂得 ,但是进入代码之后感觉还行,所以说还是得多练习实践。

2.80c51的串行口结构

2.1、内部结构介绍

AT89S51单片机串行口的内部结构如下图所示。它有两个物理上独立的接收、发送缓冲器SBUF(属于特殊功能寄存器),可同时发送、接收数据发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入,两个缓冲器共用一个特殊功能寄存器字节地址(99H)。

TXD(P3.0)发送数据 Transmit(tx) Data 简写形式 

RXD(P3.1)接受数据 Receive(rx) Data 简写形式 

  1. 串行口的控制寄存器共有两个:特殊功能寄存器SCON和PCON。下面介绍这两个特殊功能寄存器各位的功能。

2.1.1、串行口控制寄存器SCON

串行口控制寄存器SCON,字节地址98H,可位寻址,位地址为98H~9FH。SCON时一个特殊功能寄存器,用以设定串行口的工作方式,接收发送控制以设置状态标志,格式如下图所示。(不用的话 设置0,一般默认是0)

下面介绍SCON中各位的功能。

(1) SM0、SMl:串行口4种工作方式选择位。

SM0、SM1两位的编码所对应的4种工作方式见下表。

表 串行口的4种工作方式

注:方式1最常用,以此为例!

(2)SM2:多机通信控制位。

 

因为多机通信是在方式2和方式3下进行的,因此SM2位主要用于方式2或方式3中。当串行口以方式2或方式3接收时,

如果SM2=1,则只有当接收到的第9位数据(RB8)为1时,才使RI置l,产生中断请求,并将接收到的前8位数据送人SBUF;当接收到的第9位数据(RB8)为0时,则将接收到的前8位数据丢弃。

而当SM2=0时,则不论第9位数据是l还是0,都将前8位数据送入SBUF中,并使RI置1,产生中断请求。(RB8不具有激活RI的功能)

在方式1时,如果SM2=1,则只有收到有效的停止位时才会激活RI(接受控制器)。

在方式0时,SM2必须为0。

(3)REN:允许串行接收位

由软件置1或清0。

REN=1,允许串行口接收数据。

REN=O,禁止串行口接收数据。

(4)TB8:发送的第9位数据。

方式2和方式3时,TB8是要发送的第9位数据,其值由软件置l或清O。在双机串行通信时,TB8一般作为奇偶校验位使用;在多机串行通信中用来表示主机发送的是地址帧还是数据帧,TB8=1为地址帧,TB8=0为数据帧

在方式0和1中,该位未用(0)

(5) RB8:接收的第9位数据。

工作在方式2和方式3时,RB8存放接收到的第9位数据。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。

(6)TI:发送中断标志位

串行口工作在方式0时,串行发送的第8位数据结束时TI由硬件置1,在其他工作方式中,串行口发送停止位的开始时置TI为1。TI=1,表示一帧数据发送结束。TI位的状态可供软件查询,也可申请中断。CPU响应中断后,在中断服务程序中向SBUF写入要发送的下一帧数据。TI必须由软件清0

(7) RI:接收中断标志位

串行口工作在方式0时,接收完第8位数据时,RI由硬件置1。在其他工作方式中,串行接收到停止位时,该位置l。RI=1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据。该位的状态也可供软件查询。RI必须由软件清0。

SCON的所有位都可进行位操作清0或置1。

2.1.2、特殊功能寄存器PCON

特殊功能寄存器PCON字节地址为87H,不能位寻址。PCON的格式如下图所示。

其中,仅仅是最高位SMOD与串行口有关。

SMOD位:波特率选择位。

当SMOD=1时,要比SMOD=O时的波特率加倍,所以也称SMOD位为波特率倍增位。

2.2、80c51的串行口工作方式

由SM0、SM1两位的编码决定有4种方式!

2.2.1、方式1、

只介绍方式1。

传送一帧数据的格式如图所示,其中:

TXD为发送端引脚,RXD为接收端引脚。一帧为10位,1位起始位、8位数据位(先低后高)、1位停止位。波特率由T1或T2的溢出率确定。

在发送或接收到一帧数据后,硬件置TI=1或RI=1,向CPU申请中断;但必须用软件清除中断标志(置0),否则,下一帧数据无法发送或接收。

(1)发送:

CPU执行一条写SBUF指令,启动了串行口发送,同时将1写入输出移位寄存器的第9位。发送起始位后,在每个移位脉冲的作用下,输出移位寄存器右移一位,左边移入0,在数据最高位移到输出位时,原写入的第9位1的左边全是0,检测电路检测到这一条件后,使控制电路作最后一次移位,/SEND和DATA无效,发送停止位,一帧结束,置TI=1。

 

(2)接收:

REN=1后,允许接收。接收器以所选波特率的16倍速率采样RXD

端电平,当检测到一个负跳变时,启动接收器,同时把1FFH写入输入移位寄存器(9位)。由于接、发双方时钟频率有少许误差,为此接收控制器把一位传送时间16等分采样RXD,以其中7、8、9三次采样中至少2次相同的值为接收值。接收位从移位寄存器右边进入,1左移出,当最左边是起始位0时,说明已接收8位数据,再作最后一次移位,接收停止位。将接收到的9位数据前8位装入SBUF,第九位进入RB8并置RI=1,向CPU请求中断

2.2.2、波特率计算

在串行通信中,收发双方对发送或接受数据的速率要有约定。通过软件可对单片机串行口编程为四种方式。

方式0和2波特率固定,

方式1和3波特率可变,由定时器的溢出率来决定。

各种方式的波特率计算公式;

1)方式0的波特率=fosc/12

2)方式2的波特率=2^smod*fosc/64

3)方式1、3的波特率=2^smod*fosc/32

由T1或T2的溢出率和SMOD位确定

定时器的溢出率由定时器中的TH1计数值决定。

T1定时器溢出率= fosc /[12*(256-TH1)]

在单片机中,最常用的晶振频率为12MHZ和11.0592MHZ,所以选择用的波特率也相对稳定,常用的波特率以及各参数的关系表

1)用T1:

波特率=2^smod*T1定时器的溢出率/32,T1为方式2(这个指的是计时器工作方式,自动重装8位)//T1定时器的溢出率由TH1

T1定时器溢出率= fosc /[12*(256-TH1)]

例:已知fosc=6MHz,SMOD=0,设置波特率为2400,求T1的计数初值TH1。

波特率=1/((12/fosc)*(256-X))/32=fosc/12*32(256-X)

(256-X)=fosc/2400/384=6M/2400/384;256-X~=6.5104

TH1~=250=FAH 只能近似计算。

若fosc=11.0592MHz, 则256-X=11.0592M/2400/384=4068/384=12 TH1=F4H;可精确算出,对其它常用的标准波特率也是能正确算出。所以这个晶振频率是最常用的。

如果SMOD=1,则同样的X初值得出的波特率加倍。

2)用T2:

在52型单片机中,串口方式1、3的波特率发生器选择由TCLK、RCLK位

确定是T1还是T2。若TCLK=1,则发送器波特率来自T2,否则来自T1。若RCLK=1,则接收器波特率来自T2,否则来自T1。

由T2产生的波特率与SMOD无关。T2定时的最小单元=2/fosc。T2的溢出脉冲16分频后作为串口的发送或接收脉冲。

波特率=(1/((2/fosc)(65536-X)))/16=fosc/(32(65536-X))

例:已知fosc=11.0592MHz,求波特率=2400时的X

2400=11059200/(32(65536-X)) 65536-X=144 X=65392=FF70H

2.2.3、串口使用之前的初始化

主要设置产生波特率的定时器1串行口控制中断控制。具体步骤如下:

1、确定T1的工作方式(编程TMOD的寄存器)

2、计算T1 的初值,装TH1.TL1

3、启动T1(编程中TCON中的TR1位)

4、确定串行口控制(编程SCON寄存器,这个寄存器可以位寻址即:0x??,也可以直接操作如:SM1=?,SM0=?

5、串行口在中断方式工作时,要进行中断设置编程IE.IP寄存器


http://chatgpt.dhexx.cn/article/8RwLIHqL.shtml

相关文章

MOD、SCON、PCON寄存器的配置

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

C51串口的SCON寄存器及工作方式

串行口控制寄存器SCON 它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表: 其中fosc为晶振频率 SM2:多机通讯控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2&…

TMOD、TCON、SCON、PCON、SBUF寄存器说明

TMOD:定时器/计数器工作方式寄存器 TCON:定时器/计数器控制寄存器 SCON:串行口控制寄存器 串行口控制寄存器SCON决定串行口通信工作方式,控制数据的接收和发送,并标示串行口的工作状态等,其位格式为&#…

51单片机定时器TMOD与TCON、SCON

51单片机中断级别 中断源 默认中断级别 序号(C语言用) INT0---外部中断0 最高 0 T0 ---定时器/计数器0中断 第2 1 INT1---外部中断1 第3 …

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

计算机的通信分为:串行通信和并行通信 串行通信分为:异步通信和同步通信 异步通信:发送设备与接受设备有各自的时钟,通信时双方的时钟尽量保持一致, 以字符为单位进行传输, 字符与字符间的时间间隔是任意…

串行口控制寄存器(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中的一种路由规则,它定义了如何将请求路由到服务的不同版本…