MCS-51---串行通信的特点

news2025/2/25 20:32:55

目录

一.同步通信和异步通信

1.异步通信

2.同步通信

二.串行通信的方式

1.单工

2.半双工

3.全双工

三.串行通信的速率

四.MCS-51单片机结构

五.串行口的控制

1.串行口控制寄存器(SCON)

2.电源控制寄存器(PCON)

六.波特率的设计

七.串行口的工作方式

1.方式0

2.方式1

3.方式2与方式3


一.同步通信和异步通信

串行通信有两种基本通信方式,即同步通信和异步通信。

1.异步通信

在异步通信中,数据或字符是一帧一帧地传送的。帧定义为一个字符的完整的通信格式。
一般也称为顿格式。在格式中,一个字符由 4 个部分组成:起始位、数据位、奇偶校验和停止位。首先是一个起始位“0”表示字符的开始;然后是 5~8 位数据,规定低位在前高位在后:接下来是奇偶校验位(该位可省略);最后是一个停止位“1”,用以表示字符的结束,停止位可以是1位、1.5 位、2位,不同的计算机规定有所不同。如图所示为11位的帧格式

由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格式来发送和接收数据,所以,硬件结构比较简单;此外,它还能利用奇偶校验位检测错误,因此,这种通信方式应用比较广泛。

2.同步通信

同步通信中,在数据开始传送前用同步字符来指示,同步字符通常为 1~2个,数据传
送由时钟系统实现发送端和接收端同步,即检测到规定的同步字符后,下面就连续按顺序传送数据,直到通信告一段落。同步传送时,字符与字符之间没有间隙,不用起始位和停止位,仅在数据块开始时用同步字符SYNC来指示,同步传送格式如图所示。

同步通信中数据块传送时去掉了字符开始和结束的标志,因而其速度高于异步传送,但这种通信方式对硬件的结构要求比较高。

二.串行通信的方式

在串行通信中,数据是在两机之间进行传送的。按照数据传送的方向,串行通信可以分为单工制式、半双工制式和全双工制式。

1.单工

单工制式的数据传送是单向的。如图所示,通信双方中一方固定为发送端,另一方固定为接收端。单工制式的串行通信,只需要一条数据线。

2.半双工

在半双工制式下,甲乙两机之间只有一个通信回路,接收和发送不能同时进行,只能分时接收和发送,即在任一时刻只能由两机中的一方发送数据,另一方接收数据。因而两机之间只需一条数据线即可,如图所示

3.全双工

在全双工制式下,甲乙两机之间的数据发送和接收可以同时进行,全双工制式的串行通信必须使用两根数据线,如图所示。不管哪种形式的串行通信,两机之间均应有共地线。

三.串行通信的速率

传送速率是指数据传送的速度。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据的位数来表示,称之为波特率(baud/s)。例如数据传送速率是120个bit/s.每个字符由1个起始位、8个数据位和1个停位构成,则其传送波特率为:

10X120=1200baud/s

异步通信的传送速度一般在 50~19200baud/s 之间,常用于计算机低速终端以及双机或多机之间的通信等。在波特率选定之后,对于设计者来说,就是如何得到能满足波特率要求的发送时钟脉冲和接收时钟脉冲。

四.MCS-51单片机结构

MCS-51 的行口是一个可编程的全双工串行通信接口,通过软件编程可以用作通用异步接收和发送器,也可以用作同步移位寄存器。其格式有 8 位、10位和 11 位,并能设置各种波特率,使用灵活方便。

MCS-51单片机的串行口结构框图如图所示。由图可见,它主要由两个数据缓冲器SBUF和一个输入移位寄存器,以及一个串行口控制寄存器 SCON 等组成。MCS-51串行口能以全双工方式通信,即两个缓冲器可以同时接收和发送数据,但是对于单片机内部总线来说,发送和接收是不能同时进行的,所以给这两个缓冲器指定相同的名称(SBUF),且占用同一个地址99H

串行发送与接收的速率与移位脉冲同步。MCS-51常用定时器T1(方式2)作为串行通信的波特率发生器,T1 的溢出率经 2 分频(或不分频)后,再经 16 分频作为行发送或接收的移位脉冲。移位脉冲的频率即是串行通信的波特率。

此外,在接收缓冲器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,以避免在数据接收过程中出现的帧重叠错误。在前一个字符从接收缓冲器SBUF取走之前,当前字符即开始串行的方式被接收到移位寄存器。但是,在当前字符接收完毕之后,如果前一个字符还未被读取时,前一个字符就会被当前字符覆盖。与接收数据情况不同,在发送数据时,由于CPU是主动的,不会发生重叠错误,因此发送电路不需要双缓冲结构,以保持最大的传送速率。
串行口的发送和接收都是以特殊功能寄存器SBUF的名义进行读或写的当向SBUF写数据(执行“MOV SBUF,A”)时,即开始启动一个字符的发送,发送完毕置发送中断标志位(TI=1)。在满足接收中断标志位 RI=0的条件下,只要置接收使能位 REN=1,就会启动一个字符的接收过程。一个字符接收完毕,自动置接收中断标志位(RI=1),同时将移位寄存器中所接收的字符移送到接收缓冲器SBUF 中。执行“MOV A ,SBUF”时,便由接收缓冲器将接收的字符送到累加器A中。

五.串行口的控制

MCS-51的串行口是可编程接口,通过对两个特殊功能寄存器SCON和PCON的初始化编程,可以实现对串行口的控制。

1.串行口控制寄存器(SCON)

SCON 是一个可位寻址的专用寄存器,用于串行数据通信的控制。其单元地址为98H,位地址为98H~9FH。其内容及位地址表示如下:

•SM0、SM1:串行口工作方式选择位。

其状态组合所对应的工作方式如下:

SM2:多机通信控制位。

因多机通信是在方式2和方式3下进行,因此SM2主要用于方式2和方式3。当串行口以方式2或方式3接收时,若SM2=1,只有当接收到的第九位数据(RB8)为1才将接收到的前8位数据送入 SBUF,并置接收中断标志 (RI=1),产生中断请求;否则,将接收到的前 8 位数据丢弃。而当 SM2-0 时,则不论第九位数据 (RB8)为0还是1,都将前8位数据装入 SBUF 中,并产生中断请求。在方式0中,SM2必须为0。

•REN:接收使能位。
REN位用于对串行口数据的接收进行控制,该位由软件置位或清除。当REN=0时禁止接收;REN=1时,允许接收。

•TB8:发送数据的第九位。

在方式 2和方式 3中,根据需要由软件进行置位和复位。双机通信时该位可作奇校验位:在多机通信中可作为区别地址或数据的标识位。一般约定 TB8-1 时为地址帧,TB8=0时为数据帧。

•RB8:接收数据的第九位。

在方式2和方式3中,RB8 存放接收到的第九位数据。其功能类似于 TB8(例如可能是奇偶位,或是地址/数据帧标识)
•TI:发送中断标志位。
在方式0中,发送完 8 位数据后,由硬件置位;在其他方式中,在发送停止位之前由硬件置位。TI=1时,表示发送结束,其状态既可申请中断,也可供软件查询使用TI位必须由软件清0。
RI:接收中断标志位。
在方式0时,接收完8位数据后,由硬件置位;在其他方式中,在接收停止位的中间由硬件置位。RI=1时,表示接收结束,其状态既可申请中断,也可供软件查询使用RI位必须由软件清0。

2.电源控制寄存器(PCON)

PCON 寄存器主要是为 CHMOS 型单片机的电源控制而设的专用寄存器,单元地址为87H,其格式如下:

在HMOS单片机中,该寄存器中除最高位之外,其他位都是虚设的。最高位 SMOD是串行口波特率倍增位。当SMOD=1 时,串行口波特率加倍。系统复位时,SMOD=0。

六.波特率的设计

在串行通信中,收发双方对发送或接收的数据速率(即波特率)要有一定的约定。通过软件对串行口编程可约定为4种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器1的溢出率来控制。

1.方式0的波特率
在方式0中,每个机器周期接收或发送一位数据,因此波特率的数值固定为时钟频率数值(f_{osc})的1/12,且不受SMOD的影响。

2.方式2的波特率

串行口方式2的波特率取决于PCON中SMOD的值,当SMOD-0时,波特率为/的1/64:若SMOD=1,则波特率为f_{osc}的 1/32,即:

3.方式1和方式3的波特率
方式1和方式3的波特率由定时器T1的溢出率与SMOD的值决定,即:

常用的波特率初值:

七.串行口的工作方式

根据需要,MCS-51单片机的串行口可设置四种工作方式,可有8 位、10位或11 位帧格式。

1.方式0

在方式0下,串行口是作为同步移位寄存器使用。这时以RXD(P3.0)端作为数据移入的入口和出口,而由TXD(P3.1)端提供移位脉冲。移位数据的发送和接收以8位为一帧,不设起始位和停止位,低位在前高位在后。这种方式常用于扩展I/O口。

2.方式1

工作方式1真正用于串行发送和接收,为 10 位通用异步接口。TXD(P3.1)用于发选数据,RXD(P3.0)用于接收数据。接收或发送一帧数据的格式为:1位起始位,8位数据位和1位停止位,其波特率可调。
发送时,数据从TXD(P3.1)引脚输出,当数据写入发送缓冲器SBUF时,就启动发送。发送完一帧数据后,由硬件将TI置1,并申请中断,通知CPU可以发送下一个数据。

接收时,由软件使 REN 置1允许接收,串行口采样脚 RXD(P3.0)。当采样到由1至0的跳变时,确认是起始位“0”,就开始接收一帧数据。当停止位来到之后将停止位送入RB8位,由硬件将RI置1,并申请中断,通知CPU从SBUF取走接收到的一个数据。

3.方式2与方式3

在工作方式2下,串行口为11 位格式的异步通信接口。接收或发送一数据的格式为:1个起始位,8位数据位,1位可编程位和1位停止位。波特率与SMOD有关。
发送前,先根据通信协议由软件设置 TB8(如作奇偶校验位或地址/数据标志位),然后将要发送的数据写入SBUF即能启动发送。“写SBUF”指令把8位数据装入SBUF的同时,还把TB8装入发送移位寄存器的第9位上,然后从TXD(P3.1)端输出,一帧数据发送完后,由硬件将TI置1,并申请中断。
接收时,先将 REN 置1,使串行口处于允许接收状态,同时还要将RI清0在演是此条件的前提下,再根据SM2的状态和所接收到的 RB8 的状态决定行口在数据到来后是否使RI置1,并申请中断,接收信息。
SM2=0时,不管RB8为0还是为1,RI都置1,接收发来的信息,并申请中断。

SM2=1,且RB8为1时,表示在多机通信的状态下,接收的信息为地址帧,此时RI置1,串行口接收发来的地址,并申请中断。

SM2=1,且RB8为0时,表示接收的信息为数据帧,但不是发给本从机的,此时RI不置1,因而SBUF中所接收的数据将丢失。
方式3同样是11位为一帧的串行通信方式,其通信过程与方式2完全相同,所不同的仅仅是波特率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1383122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NLP论文阅读记录 - WOS | ROUGE-SEM:使用ROUGE结合语义更好地评估摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 ROUGE-SEM: Better evaluation of summarization using ROUGE combin…

操作系统详解(5.1)——信号(Signal)的相关题目

系列文章: 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 操作系统详解(5)——信号(Signal) 文章目录 题目第一问第二问第三问 题目…

python24.1.14while循环

当条件结束时间未知时,while循环比for循环更合适 实践

Debian(Linux)局域网共享文件-NFS

NFS (Network File system) 是一种客户端-服务器文件系统协议,允许多个系统或用户访问相同的共享文件夹或文件。最新版本是 NFS-V4,共享文件就像存储在本地一样。它提供了中央管理,可以使用防火墙和 Kerberos 身份验证进行保护。 本文将指导…

docker-compose部署kafka、SASL模式(密码校验模式)

一.基础kafka部署 zookeeper,kafka,kafka-ui docker-compose.yml 注意点:192.168.1.20 是宿主机的ip version: "3" services:zookeeper:image: wurstmeister/zookeepercontainer_name: zookeeperrestart: alwaysports:- 2181:2…

未来的失业将是常态吗?

2024年,科技巨头谷歌、亚马逊都在本周宣布大规模裁员,影响到众多部门。此外,社交平台 Discord 表示将裁员 17%,游戏服务商 Unity Software 宣布将裁员 25%,语言学习应用程序 Duolingo 则称解雇了 10% 的正式职工&#…

使用 rosdep 管理依赖关系

什么是rosdep? rosdep是 ROS 的依赖管理实用程序,可以与 ROS 包和外部库一起使用。 是一个命令行实用工具,用于标识和安装依赖项以生成或安装包。 在以下情况下,可以调用或调用它:rosdep 构建工作区并需要适当的依赖项…

关于CodeReview的一些实践和思考

在日常开发中,Code Review 的重要性日益凸显。它不仅有助于提升代码质量,还促进了团队成员之间的知识共享和技能提升。本文将主要聚焦于 Code Review,分享在这个过程中的一些心得和思考。 CodeReview常用到的一些术语 之前看到公司的大佬经…

ssm基于Java的众惠商城的设计与实现论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统用户购物信息管理难度大,容错率低&#xff0c…

Python基础知识:整理14 利用pyecharts生成地图

1 地图可视化的基本使用 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts # 准备地图对象 map Map()# 准备数据 data [("北京市", 8), ("上海市", 99), ("广州省", 199), ("重庆市", 400), ("…

【Python学习】Python学习18- 方法OS 文件/目录方法

目录 【Python学习】Python学习17- File方法 前言os.access()语法: os.chdir(path)语法 os.chflags(path, flags)语法 os.chmod(path, mode)os.chown(path, uid, gid)os.chroot(path)os.close(fd)os.unlink(path)os.popen(command[, mode[, bufsize]])os.read(fd, …

【数据开发】大型离线数仓OLAP数据开发指南(目录)

文章目录 1、什么离线数仓OLAP2、OLAP数仓建设3、OLAP数仓开发指南 1、什么离线数仓OLAP 离线数仓OLAP(Online Analytical Processing)是一种数据分析技术,它通过对离线数据仓库中的数据进行分析,为企业提供决策支持的数据分析服…

瑞_Java开发手册_(五)MySQL数据库

文章目录 (一) 建表规约(二) 索引规约(三) SQL 语句(四) ORM 映射附:雪花算法(Java) 🙊前言:本文章为瑞_系列专栏之《Java开发手册》的MySQL数据库篇,主要介绍建表规约、索引规约、SQL语句、ORM映射。由于博…

Http协议简述

目录 HTTP-概述 2.1.1 介绍 2.2.2 特点 2.2 HTTP-请求协议 2.3 HTTP-响应协议 2.3.1 格式介绍 2.3.2 响应状态码 HTTP-概述 2.1.1 介绍 HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。 http是互联…

牛刀小试---二分查找(C语言)

题目&#xff1a;在给定的升序数组中查找指定的数字n&#xff0c;并输出其下标 代码举例&#xff1a; #include <stdio.h> int main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };//给定的升序数组int left 0;//定义左下标int right sizeof(arr) / sizeof(arr[0]) - 1;//…

.NET开源免费、企业级、可商用内容管理系统 - SSCMS

前言 今天给大家推荐一款基于.NET Core开源、企业级、可商用、能够以最低的成本、最少的人力投入在最短的时间内架设一个功能齐全、性能优异、规模庞大并易于维护的内容管理系统&#xff1a;SSCMS。 系统官方介绍 SSCMS 内容管理系统基于微软 .NET Core 平台开发&#xff0c…

YOLOv5源码中的参数超详细解析(7)— yolo.py

前言:Hello大家好,我是小哥谈。YOLOv5是一种先进的目标检测算法,它可以实现快速和准确的目标检测。yolo.py是YOLOv5项目中的一个Python文件,用于实现目标检测算法。该文件包含了YOLOv5模型的定义、训练和推理过程。本节课就结合源码对yolo.py文件进行逐行解析~!🌈 前期…

【Linux】线程池实现

&#x1f4d7;线程池实现&#xff08;单例模式&#xff09; 1️⃣线程池概念2️⃣线程池代码样例3️⃣部分问题与细节&#x1f538;类成员函数参数列表中隐含的this指针&#x1f538;单例模式&#x1f538;一个失误导致的bug 4️⃣调用线程池完成任务 1️⃣线程池概念 线程池是…

树莓派ubuntu22桌面配置(一)

烧录系统至树莓派 下载系统&#xff1a;https://ubuntu.com/download/raspberry-pi 选择合适的版本下载 镜像安装器安装&#xff1a;终端输入&#xff1a; sudo snap install rpi-imager 打开镜像安装器&#xff0c;按照需求选择树莓派版本与要写入的系统还有安装的u盘 方案…

阿里状态机引擎实现

状态机的技术选型看这篇就够了&#xff0c;最后一个直叫好&#xff01; - 掘金 实现一个状态机引擎&#xff0c;教你看清DSL的本质_cola状态机-CSDN博客 一、引入jar包 <!--阿里状态机jar--> <dependency><groupId>com.alibaba.cola</groupId><a…