(51单片机)第十一章-串行口应用提高

11.1 方式0应用

        在第6章中,已经对51单片机的串行口结构做过详细介绍,并且通过实例讲解了串行口的4种工作方式中方式1的具体用法,本节详细讲述串行口方式0的用法。

        串行口方式0被称为同步移位寄存器的输入/输出方式,主要用于扩展并行输入或输出口。数据由 RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均8位数据低位在先高位在后波特率固定为fosc/12。在该模式下,串行口的SBUF是作为同步移位寄存器使用的。在串行口发送时,SBUF相当于一个并行进入、串行输出的移位寄存器,由单片机的内部总线并行接收8位数据,并从RXD信号线串行输出。在接收操作时,它又相当于一个串行输入、并行输出的移位寄存器。该模式下SM2RB8TB8不起作用。其数据输出时序图如下图所示,数据输入时序图如下下图所示。

        发送操作在 TI=0 时进行,CPU将数据移入SBUF之后,RXD线上即可发出8位数据,TXD上发送同步脉冲。8位数据发送完后,TI由硬件置位,并在中断允许的情况下向CPU申请中断。CPU 响应中断后,先用软件使TI清0,然后再给SBUF 送下一个需要发送的字符如此重复上面的过程。

        接收过程是在 REN=1和 RI=0 的条件下启动的。此时,串行数据由 RXD 线输入,TXD线输出同步脉冲。接收电路接收到8位数据后,RI自动置位并在中断允许的条件下向CPU发出中断请求。CPU查询到RI为1或者响应中断以后便将SBUF 中的数据送到累加器。RI需要由软件复位。

        需要注意,串行口工作模式0并不是一个同步串口通信方式,它的主要用途是与外面的同步移位寄存器相连,以达到扩展单片机输入并行口和输出并行口的目的,其典型应用图如下图所示。

        74LS164 是一个8位串行输入、并行输出的移位寄存器,CLR用来清0,A、B 两个输入端,可使用任一个作为输入端,也可两个同时作为输入端,单片机的RXD 引脚将数据送至 A、B端,然后在CLK同步时钟脉冲作用下,8位串行数据全部移至8位并行口上。

        74LS165 是一个8位并行输入、串行输出的移位寄存器,上图中Q为串行输出端,S/L端为启动移位信号端,一个低脉冲可启动移位操作。

        示例

        设置单片机串行口工作模式 0,间隔循环发送十六进制数 0xAA,然后用双路示波器观察 P3.0和 P3.1口波形。程序代码如下:

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

void main()
{
	void delayxms(uint xms); //延时函数 ms为单位

	SCON=0;
	EA=1;
	ES=1;
	TI=0;
	while(1)
	{
		SBUF=0xaa;
		delayxms(1);
	}
}

void delayxms(uint xms) //延时函数 ms为单位
{
	uint x,y;
	for(x=xms;x>0;x--)
		for(y=124;y>0;y--);	
}

void ser() interrupt 4
{
	TI=0;
}

11.2 方式2和方式3应用

        方式2和方式3都为11位数据的异步通信口,它们的唯一区别是传输速率不同。TXD为数据发送引脚,RXD为数据接收引脚。用这两种方式传输数据时,起始位1位,数据位9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。一帧数据传输格式如图11.2.1所示。

        数据输出和数据输入的时序图如下图所示:

        发送开始时,先把起始位0输出到TXD引脚,然后发送移位寄存器的输出位(D0)到TXD 引脚。每一个移位脉冲都使输出移位寄存器的各位右移一位,并由TXD引脚输出。第一次移位时,停止位1移入输出移位寄存器的第9位,以后每次移位,左边都移入0。当停止位移至输出位时,左边其余位全为0,检测电路检测到这一条件时,使控制电路进行最后一次移位,并置 TI=1,向 CPU 请求中断。

        接收时,数据从右边移入输入移位寄存器,在起始位0移到最左边时,控制电路进行最后一次移位。当RI=0目SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器 SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失,且不置位 RI,继续搜索 RXD引脚的负跳变。

串口方式2的波特率=(2SMOD/64)*fosc

串口方式3的波特率=(2SMOD/32)*T1溢出率

        在方式2和方式3中,要用到SCON寄存器中的TB8位和RB8位,TB8为数据发送的第9位,用于模式2和模式3,由软件更改。RB8为数据接收的第9位,用于模式2和模式 3。在模式1中,如果SM2=0,则RB8用于存放接收的停止位,在模式0下不使用该位。

示例

        设置单片机串行口工作模式 2,间隔循环发送十六进制数 0xAA,然后用示波器观察单片机 P3.1口波形。,程序代码如下:

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

void main()
{
	void delayxms(uint xms); //延时函数 ms为单位

	SM0=1;
	SM1=0;
	TB8=0;
	EA=1;
	ES=1;
	TI=0;
	while(1)
	{
		SBUF=0xaa;
		delayxms(1);
	}
}

void delayxms(uint xms) //延时函数 ms为单位
{
	uint x,y;
	for(x=xms;x>0;x--)
		for(y=124;y>0;y--);	
}

void ser() interrupt 4
{
	TI=0;
}

11.3 单片机双机通信

        单片机的双机通信有短距离和长距离之分,1m之内的通信称为短距离,1000m左右的通信称为长距离。若要更长距离通信,如几十或几千千米,就需要借助其他无线设备方可实现。通常单片机通信可以有以下4种实现方式:TTL电平通信(双机串行口直接互连)RS-232C通信、RS-422A 通信、RS-485 通信等,不同的传输方式各有自己的特点。

1. TTL 电平通信

        TTL电平通信时,直接将单片机A的TXD 端接单片机 B的RXD 端,单片机 A的RXD端接单片机B的TXD端。需要强调的是,两个单片机系统必须要共地,即把它们的系统电源地线连接在一起(重要,相对电压值要一定)。

        单片机的 TTL电平双机通信通常多用在同一个系统中。当一个系统中使用一个单片机资源不够时,可再加入一个或几个单片机,两两单片机之间可以构成双机通信。当一个单片机连接两个或两个以上的单片机时,可以采用一机对多机通信。通常一个系统中单片机之间的距离都不会太远,设计系统时,尽量使单片机之间的通信距离缩短,距离越短,通信越可靠若数据线过长,很有可能受外界的干扰而在通信过程中造成数据错误。

2. RS-232C 通信

        RS-232C是EIA(美国电子工业协会)1969年制定的通信标准。RS-232C定义了数据终端设备(DTE)数据通信设备(DCE)之间的物理接口标准。RS-232C标准接头如下图所示。

        RS232标准接口主要引脚定义如下表所示:

        标准的 RS-232C最初用于计算机远程通信时的调制解调器上,即通常我们所说的“猫”当使用“猫”时,上图中9条信号线都要用到。但我们用RS-232C 标准进行两个单片机之间通信时,只需要用到表中的三条线:RXD,TXD和GND。RS-232C双机通信接口电路如下图所示。

        RS-232C 电平传输数据时,相比TTL电平距离要远,RS-232C总线标准受电容允许值的约束,使用时传输距离一般不要超过15m(线路条件好时也不要超过30m)。其最高传送速率为 20kbps。RS-232C 总线标准要求收、发双方必须共地。通信距离较大时,由于收、发双方的地电位差较大,在信号地上将有比较大的地电流并产生压降,这样会形成电平偏移。RS-232C 在电平转换时采用单端输入/输出,在传输过程中,干扰和噪声会混在正常的信号中为了提高信噪比,RS-232C总线标准要采用比较大的电压摆幅

3. RS-422A 通信

        RS-422A 输出驱动器为双端平衡驱动器。如果其中一条线为逻辑1态,另一条线就为逻辑0态,比采用单端不平衡驱动对电压的放大倍数大一倍。差分电路能从地线干扰中拾取有效信号,差分接收器可以分辨 200mV 以上电位差若传输过程中混入了干扰和噪声,由于差分放大器的作用,可使干扰和噪声相互抵消,因此可以避免或大大减弱地线干扰和电磁干扰的影响。RS-422A 传输速率 90kbps 时,传输距离可达1200m。RS-422A 双机通信接口电路如下图所示

4. RS-485 通信

        RS-485 是 RS-422A 的变型。RS-422A用于全双工,而RS-485 则用于半双工。RS-485 是种多发送器标准,在通信线路上最多可以使用 32对差分驱动器/接收器。如果在一个网络中连接的设备超过 32个,还可以使用中继器。RS-485 的信号传输采用两线间的电压来表示逻辑1和逻辑0。由于发送方需要两条传输线,接收方也需要两条传输线。传输线采用差动信道,所以它的干扰抑制性极好,又因为它的阻抗低,无接地问题,所以传输距离可达1200m传输速率可达1Mbps。RS-485双机通信接口电路如下图所示。

5. 远程无线通信

        当通信距离超过数百上千千米时,我们最好借助无线设备,当然如果距离较近,布线又不方便时,也可以使用近距离无线设备。近距离无线设备有无线数据传输模块、数据传输电台等,这些设备的传输距离很有限,通常与设备的发射功率有直接的关系,发射功率越大,传输距离就越远,但不会超过几十千米。通常的无线数据传输模块,小功率的只能传播数十米到一二百米,稍大功率的也就能传播几百米到几千米,这类设备价格较低,预留接口通常为 TTL电平、RS-232C或RS-485 接口,与单片机系统连接非常简单,编写程序也很容易,只需要一次性投入,便可永久使用。

11.4 单片机多机通信

        单片机构成的多机系统常采用总线型主从式结构。所谓主从式,即在数个单片机中,有一个是主机,其余的都是从机,从机要服从主机的调度、支配。51单片机的串行口方式2和方式3适于这种主从式通信结构。当然,采用不同的通信标准时,还需进行相应的电平转换有时还要对信号进行光电隔离。在实际的多机应用系统中,常采用RS-485 串行标准总线进行数据传输。多机通信连接如下图所示。

多机通信时,通信协议要遵守以下原则:

        (1)所有从机的 SM2 位置1,处于接收地址帧状态。

        (2)主机发送一地址帧,其中8位是地址,第9位为地址/数据的区分标志,该位置1表示该帧为地址帧。所有从机收到地址帧后,都将接收的地址与本机的地址比较。对于地址相符的从机,使自己的 SM2位置0(以接收主机随后发来的数据帧),并把本机地址发回主机作为应答;对于地址不符的从机,仍保持SM2=1,对主机随后发来的数据帧不予理睬。

        (3)从机发送数据结束后,要发送一帧校验和,并置第9位(TB8)为1,作为从机数据传送结束的标志。

        (4)主机接收数据时先判断数据接收标志(RB8),若RB8=1,表示数据传送结束,并比较此帧校验和,若正确则回送正确信号00H,命令该从机复位(即重新等待地址帧);若校验和出错,则发送信号 0FFH,命令该从机重发数据。若接收帧的RB8=0,则将数据存到缓冲区,并准备接收下一帧信息。

        (5)主机收到从机应答地址后,确认地址是否相符,如果地址不符,则发复位信号(数据帧中 TB8=1);如果地址相符,则TB8清0,开始发送数据。从机收到复位命令后回到监听地址状态(SM2=1),否则开始接收数据和命令。

编写程序时可以按以下方式操作:

        (1)主机发送的地址联络信号为00H,01H,02H,…(即从机设备地址):地址FFH为命令各从机复位,即恢复 SM2=1。

        (2)主机命令编码如下:01H—主机命令从机接收数据;02H—主机命令从机发送数据若有其他数据,则都按 02H对待。

        (3)从机状态字格式如下表所示。

        若 ERR=1,从机接收到非法命令

        若TRDY=1,从机发送准备就绪

        若RRDY=1,从机接收准备就绪。

        通常,从机以中断方式控制和主机的通信。

下面为多机通讯主机程序流程图和从机程序流程图。

参考资料: 

[1] 郭天祥. 新概念51单片机C语言教程:入门、提高、开发、拓展全攻略[M]. 北京: 电子工业出版社, 2009.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCDN与边缘计算的集成解决方案

PCDN与边缘计算的集成解决方案 在数字化时代&#xff0c;内容的快速、安全地传递至用户变得至关重要。无论是媒体、教育还是其他领域&#xff0c;所有这些行业都需要强大的技术支持以保证信息的实时更新和安全传输。PCDN&#xff08;Peer Content Delivery Network&#xff0c…

详解QListView、QListWidget、QTableView、QTableWidget的使用以及区别

在Qt框架中&#xff0c;QListView、QListWidget、QTableView和QTableWidget都是用于显示列表或表格数据的控件。它们在用途、数据模型、灵活性以及直接操作数据的便捷性等方面存在一定的差异。下面将详细阐述这些控件的使用方法以及它们之间的区别&#xff0c;并提供相应的C代码…

YAML教程-2-Python读写YAML文件

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们讲解了一下YAML文件的基本使用方法&#xff0c;本小节我们学习一下Python读写YAML文件的方法。 在Python中读写YAML文件&#xff0c;通常会使用PyYAML这个第三方库&#xff0c;因为它提供了与YAML格…

前后端交互概念

前后端交互概念 1前后端分离开发概念2搭建后端环境2.1配置文件commomcommon-utilservice-utilmodelservice gitee使用 1前后端分离开发概念 前段&#xff1a;运用html、css、js和现成库&#xff0c;对数据作展示。 后端&#xff1a;运用Java和Java框架&#xff0c;提供数据或操…

数据结构10:堆和堆排序

文章目录 树的概念及结构树的概念树的相关概念树的表示树在实际中的应用表示文件系统的目录树结构 二叉树概念及结构概念特殊的二叉树二叉树的性质二叉树的存储结构顺序存储链式存储 二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构 堆的实现堆的插入堆的删除堆的创建向…

C# winfrom 超详细UI创建过程 实现双色球选号器UI界面设计过程

一、 效果展示 1. 无点击效果展示&#xff1a;不选中——双色球为灰色&#xff0c;字体也为灰色 2.点击双色器效果展示&#xff1a;选中——双色球为红或者蓝&#xff0c;字体为白色 二、 使用控件标注说明 三、界面特点介绍 双色球代码控制生成---------由于红色33个球&…

上位机工作感想-从C#到Qt的转变-1

0.前言 接触Qt开发也有一年多的时间了&#xff0c;还记得去年初从杭州回合肥时&#xff0c;刚来公司面临的几个问题&#xff1a; 1.C#转上位机的迷茫2.新公司管理模式的差异3.试用期的各种紧急任务。 当时也是加班加点学习C和Qt的基础知识&#xff0c;做了两个考核项目后&am…

生态短讯 | Tapdata 与 TDengine 完成产品兼容性互认证,打造物联网实时数据生态

近月&#xff0c;深圳钛铂数据有限公司&#xff08;以下简称钛铂数据&#xff09;自主研发的实时数据平台&#xff08;Tapdata Live Data Platform&#xff09;与北京涛思数据科技有限公司&#xff08;以下简称涛思数据&#xff09;自主研发的大数据平台 TDengine&#xff0c;已…

arm版Linux下安装大数据集群各种组件

背景&#xff1a;由于本人是用的Macbookpro m2来进行开发的&#xff0c;很多环境和Intel芯片的都不一样&#xff0c;期间安装各种软件遇到各种问题&#xff0c;为了以后不走之前的老路&#xff0c;现记录各种软件的安装步骤。 系统安装组件说明 序号组件名称组件版本1jdkjdk-…

SpringMvc的核心组件和执行流程

一、 springmvc的核心组件及作用 1.DispatcherServlet:前置控制器&#xff0c;是整个流程控制的核心&#xff0c;用来控制其他组件的执行&#xff0c;降低了其他组件的耦合性 2.Handler:控制器&#xff0c;完成具体的业务逻辑&#xff0c;当DispatcherServlet接收到请求后&am…

Linux华硕笔记本安装ROG Asusctl

基础环境 适用系统&#xff1a; linux mint 21ubuntu 22.04 安装版本&#xff1a; asusctl-5.0.10rust 1.77.2 构建 安装编译环境 sudo apt-get update sudo apt-get install -y \libasound2-dev \libfreetype6-dev \libexpat1-dev \libxcb-composite0-dev \libssl-dev …

mysql基础2——字段类型

整数类型 需要考虑存储空间和可靠性的平衡 浮点类型 浮点数类型不精准 将十进制数转换为二进制数存储 浮点数类型&#xff1a;float double real(默认是&#xff0c;double ) 如果需要将real设定为float &#xff0c;那么通过以下语句实现 set sql_mode "real_as…

Token 在 LLM

大语言模型不能理解原始文本,所以需要把原始文本转换成大语言模型可以理解的数字表示形式,经过大模型处理以后,需要将该数字表示形式转换为人可以理解的文本。 原始文本到 token 原始文本转换为token序列的过程通常是在LLM的预处理阶段完成的。 在大型语言模型(LLM)中,tok…

restful请求风格的增删改查-----查询and添加

一、restful风格的介绍 restful也称之为REST ( Representational State Transfer )&#xff0c;可以将它理解为一种软件架构风格或设计风格&#xff0c;而不是一个标准。简单来说&#xff0c;restful风格就是把请求参数变成请求路径的一种风格。例如&#xff0c;传统的URL请求…

Windows bat实现循环往txt文件插入1000条数据内容

bat脚本实现&#xff1a; echo off for /L %%i in (1,1,1000) do (echo "I am from 192.168.10.171" >> c:\ztj.txt ) echo off --在批处理运行命令的时候不会一条一条的显示执行的命令 for /L %variable in (start,step,end) do command [command-p…

SQLite导出数据库至sql文件

SQLite是一款实现了自包含、无服务器、零配置、事务性SQL数据库引擎的软件库。SQLite是世界上部署最广泛的SQL数据库引擎。 SQLite 是非常小的&#xff0c;是轻量级的&#xff0c;完全配置时小于 400KiB&#xff0c;省略可选功能配置时小于250KiB。 SQLite 源代码不受版权限制。…

BST+二分

二叉搜索树 二叉查找树是指一棵有下列性质的[二叉树]&#xff1a; 若任意节点的左子树不空&#xff0c;则左子树上所有节点的值均小于它的根节点的值&#xff1b;若任意节点的右子树不空&#xff0c;则右子树上所有节点的值均大于它的根节点的值&#xff1b;任意节点的左、右…

《计算思维导论》笔记:《第10章 数据化思维-数据聚集与管理》计算思维第17讲-从表的管理看数据库

《大学计算机—计算思维导论》&#xff08;战德臣 哈尔滨工业大学&#xff09; 《计算思维第17讲-从表的管理看数据库----结构化与非结构化数据管理》 一、引言 今天我们从表的管理看数据库&#xff0c;给大家讲一下结构化与非结构化数据管理的思维。 二、为什么需要数据库–工…

ExpertPrompting:指导大语言模型成为杰出专家

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 论文地址&#xff1a;https://arxiv.org/abs/2305.14688 作者 & 机构&#xff1a;Benfen…

cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间

问题 在shell输入命令按tab键时出现以下报错 (base) [link999hadoop102 ~]$ cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间 -bash: cd: /op: 没有那个文件或目录原因分析 磁盘空间不够 df -Th # 通过命令查看具体情况解决 1、清理大文件 进入到 容量-已用 使…