(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 intvoid 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 intvoid 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.

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

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

相关文章

【结构型模式】外观模式

​一、外观模式概述 外观模式定义与意图&#xff1a;外观类为复杂的子系统提供了一个统一的入口。外观模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。&#xff08;对象结构型模式&#xff09; 外观模式的特点&#xff1a; 1.又叫做门面模式&#xf…

试驾小米SU7后,我准备退了我的订单

文 | AUTO芯球 作者 | 雷歌 我真想退了我之前大定的小米SU7Pro版&#xff01; 前两天我不是和朋友三人一起开着问界M9去试驾SU7了嘛&#xff0c; 说实话&#xff0c;这一圈下来&#xff0c;有欣喜有失望。 SU7的优点特别明显&#xff0c;也很突出&#xff0c; 就是它的底…

了解MySQL InnoDB多版本

了解MySQL InnoDB多版本 在数据库管理系统中&#xff0c;多版本并发控制&#xff08;MVCC&#xff09;是一种用于实现高并发和事务隔离的技术。MySQL的InnoDB存储引擎支持MVCC&#xff0c;这使得它可以在提供高事务性能的同时&#xff0c;也保证了数据的一致性和隔离性 MVCC简…

MySQL中的死锁预防和解决

MySQL中的死锁预防和解决 死锁是数据库管理系统中常见的问题&#xff0c;特别是在高并发的应用场景下。MySQL数据库中的死锁会导致事务处理速度减慢&#xff0c;甚至完全停止&#xff0c;因此理解并预防死锁至关重要。本文将详细介绍如何预防MySQL中的死锁&#xff0c;包括常用…

IBM SPSS Statistics for Mac:数据分析的卓越工具

IBM SPSS Statistics for Mac是一款功能强大的数据分析软件&#xff0c;专为Mac用户设计&#xff0c;提供了一系列专业的统计分析和数据管理功能。无论是科研人员、数据分析师还是学生&#xff0c;都能从中获得高效、准确的数据分析支持。 IBM SPSS Statistics for Mac v27.0.1…

Ubuntu 安装 wine

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 如果你使用 Ubuntu 系统&#xff0c;而有些软件只在 Windows 上运行&#xff0c;例如&#xff1a;PotPlayer&#xff0c;那么该如何在 Ubuntu 系统中使用到这些 Windows 的软件呢&#xff1f;答案是安装 wine。 简单的安装步骤如…

IDEA使用SCALA

一、在IDEA中下载插件 在设置->插件中找到scala&#xff0c;并下载。 下载完成后重启idea 二、在idea中创建spark的RDD操作项目 新建项目选中Scala。 创建完成后为项目添加java包&#xff0c;这个添加的是spark安装包中jars目录下的所有jar包 然后编写RDD操作 import or…

HBuilder真机调试检测不到荣耀Magic UI系列(包括手机和电脑)解决办法

HBuilder真机调试检测不到荣耀Magic UI系列&#xff08;包括手机和电脑&#xff09;解决办法解决方法&#xff1a; 1.在开发人员选项中开启USB调试 如何进入开发者选项&#xff1f; 设置->关于->版本号&#xff0c;点击版本号直至出现您已处于开发者模式 2.选择USB配置…

【SQL每日一练】分组过滤练习题

文章目录 前言MySQL语法注意&#xff1a; 前言 题目&#xff1a;现在运营想查看每个学校用户的平均发贴和回帖情况&#xff0c;寻找低活跃度学校进行重点运营&#xff0c;请取出平均发贴数低于5的学校或平均回帖数小于20的学校。 drop table if exists user_profile; CREATE …

37-2 Python 的 requests 库发送 POST 请求

准备 sqlilabs 靶场: 构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、发送 POST 请求 首先使用bp对 sqlilabs 靶场的第12关抓个包,了解这个关卡是如何发包的 打开靶场:本地ip+ /sqli-labs-master/Less-12/ 先随便输入个账号登录如…

DevOps(七)Jenkins发布第一个流水线任务

Jenkins的流水线&#xff08;Pipeline&#xff09;是一种强大的工具&#xff0c;用于定义和管理持续集成和持续交付&#xff08;CI/CD&#xff09;过程。它允许你以代码的形式&#xff08;即"Pipeline as Code"&#xff09;定义整个构建、测试和部署流程&#xff0c;…

第10章 物理安全要求

10.1 站点与设施设计的安全原则 假如没有对物理环境的控制&#xff0c;任何管理的、技术的或逻辑的访问控制技术都无法提供足够的安全性。 如果怀有恶意的人员获取了对设施及设备的物理访问权&#xff0c;那么他们几乎可以为所欲为&#xff0c;包括肆意破坏或窃取、更改数据。…

原来是这样的Three.js,我悟了

最近在b站上面看到up主&#xff1a;gamemcu的3D作品&#xff0c;着实让人感到非常震撼&#xff0c;作品中的SU7模型&#xff0c;利用的是Blender进行建模&#xff0c;利用了webGL的技术进行开发。由此启发了我对3D极大的乐趣。因此&#xff0c;凭借一点点&#x1f90f;的前端知…

RK3588 Android13 TvSetting 中增加 Usb 模式 Host/OTG 切换

前言 电视产品,客户要求在设置中设备偏好设置子菜单下增加一个USB模式切换菜单,一开始准备直接开整。但发现在开发者选项里就已经包含了一个USB模式 菜单了,只是没有 OTG HOST 这两选项,那就把这个菜单挪出来再增加一下就完事了,开整。 客户提供对比机图 效果图 framew…

【计算机毕业设计】学习平台功能介绍——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

学习部分排序,插入排序,冒泡排序以及希尔排序

1.插入排序 <1>.首先我们举个例子 我们要把6进行前面的插入&#xff0c;那我们要进行比较&#xff0c;首先确定一个end的指针&#xff0c;然后他指向的数字就是我们需要比较的&#xff0c;如果end指向的数比我们end1 的大的话&#xff0c;那我们就往前挪一个&#xff0c…

有效Dk值提取方法的仿真分析

目录 1. TDR技术提取Dk值的方法 2. 传输线双端口Delta-L技术提取Dk值的方法 3. 传输线单端口Delta-L技术提取Dk值的方法 4. 总结 参考文献 1. TDR技术提取Dk值的方法 测试有效Dk值的一些传统而有效的方法[1][2]&#xff0c;是采用TDR阻抗测试仪测试专门设计的传输线的传播延…

我的AI数字人分身上线了!

说起AI数字人&#xff0c;大家一定不会陌生。随着全民AI时代的到来&#xff0c;许多机关单位、企业和个人&#xff0c;都纷纷制作了自己的数字人形象。 前些天&#xff0c;小灰的老东家刘强东也开始用数字人直播带货&#xff0c;瞬间引爆了全网。 这一切背后的本质是什么呢&…

抽真空规范操作

抽真空规范操作 抽真空操作中&#xff0c;一个被忽视的现象是&#xff1a;许多维修人员热衷于解决空调故障&#xff0c;却对施工过程中的规范操作敷衍了事。殊不知&#xff0c;正是这些看似微不足道的细节疏忽&#xff0c;往往诱发空调各类疑难故障&#xff0c;令售后维修陷入…

【创建型模式】原型模式

一、原型模式概述 原型&#xff08;Prototype&#xff09;模式的定义&#xff1a;用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里&#xff0c;原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效&#xf…