RS485通信和Modbus协议
RS485和MODBUS的区别(包你明白)
RS485和MODBUS的区别(包你明白)Modbus是一种通讯协议,需要硬件作为实现平台。
不同的硬件平台具有不同的电气特性和连接方式,比如RS232和RS485.可以将Modbus比作英语,RS232比作印度人,RS485比作美国人。
印度人之间讲英语时,理解为基于RS232的Modbus通信,美国人之间讲英语时,理解为基于RS485的Modbus通信。
RS485是一个物理接口,简单来说是硬件。
Modbus是一种国际标准的通讯协议,用于不同厂商之间的设备交换数据,一般用于工业用途。
协议也可以理解为“语言”,是软件。
一般情况下,两台设备通过Modbus协议传输数据,最早是用RS232C作为硬件接口,也有用RS422的,但常用的是RS485,因为这种接口传输距离远,在一般工业现场用的比较多。
Modbus协议又分为Modbus RTU、Modbus ASCII和后来发展的Modbus TCP三种模式。
其中前两种(Modbus RTU、Modbus ASCII)所用的物理硬件接口都是串行(Serial)通讯口(RS232、RS422、RS485)。
而Modbus TCP则是为了顺应当今世界发展潮流,来连接,传送数据。
因此,又有ModbusTCP模式,该模式的硬件接口就是以太网()口了,也就是我们电脑上一般用的网络口。
协议分为硬件协议和软件协议,而通讯协议属于软件协议,它包含报头包围的格式。
Modbus是应用层的通讯协议,主要用于传送和接收文件包的格式。
RS232、RS485是物理层的串行接口,可以支持几十种通讯协议,Modbus只是其中的一种。
Modbus可分为Modbus RTU/ACSI、Modbus +(也叫Modbus PLUS)和Modbus TCP/IP等。
前两种是在串行链路上使用的通讯协议(串口通讯),后一种是在以太网口基于TCP/IP协议的Modbus通讯协议。
在工业控制场合,RS485总线因其接口简单、组网方便、传输距离远等特点而得到广泛应用。
RS485通讯 modbus 协议
使用说明书 - 1 -_MODBUS 通讯协议说明一.通讯说明控制器采用RS-485总线,协议符合ModBus RTU 规约。
数据传输均采用8位数据位、1位停止位、无奇偶校验位。
波特率可设为1200-9600 bit/s 。
通讯传送分为独立的信息头,和发送的编码数据。
以下的通讯传送方式定义与RTU 通讯规约相初始结构 = >=4字节的时间地址码 = 1 字节功能码 = 1 字节数据区 = N 字节错误校检 = 16位CRC 码结束结构 = >=4字节的时间地址码:地址码为通讯传送的第一个字节。
这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。
并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开始。
主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。
功能码:通讯传送的第二个字节。
ModBus 通讯规约定义功能号为1到127。
本控制器利用其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机执行什么动作。
作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。
如果从机发送的功能码的最高位(比如功能码大于127),则表明从机没有响应操作或发送出错。
数据区:数据区是根据不同的功能码而不同。
CRC 码:二字节的错误检测码。
当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。
返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。
如果出错就不发送任何信息。
1 2.信息帧格式:(1) 地址码: 地址码是信息帧的第一字节(8位),从0到255。
这个字节表明由用户设置地址的从机将接收由主机发送来的信息。
每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送。
当从机回送信息时,相当的地址码表明该信息来自于何处。
rs485通讯
RS485通讯1. 引言RS485是一种串行通信协议,用于在多个设备之间进行双向数据传输。
它是一种高性能的通讯协议,常用于工业自动化、仪器仪表、门禁系统等领域。
本文将介绍RS485通讯的基本原理、使用方法以及常见的应用场景。
2. 基本原理RS485通讯使用差分信号传输,可以抵抗电磁干扰和噪声。
它采用两条相对独立的传输线(A线和B线),通过不同的电平表示逻辑1或逻辑0。
其中,逻辑1对应线A为高电平,线B为低电平;逻辑0对应线A为低电平,线B为高电平。
通过这种方式,数据可以在多个设备之间进行可靠的传输。
3. 硬件连接在使用RS485通讯时,需要将所有设备连接到一个共享的总线上。
每个设备都需要两条连接线(A线和B线)以及一个共享的地线。
通常,可以使用终端电阻来匹配总线阻抗并提高信号质量。
4. 传输方式RS485通讯可以采用两种传输方式:全双工和半双工。
4.1 全双工通讯在全双工通讯中,设备可以同时发送和接收数据。
发送数据的设备需要将数据发送到总线上,并通过差分信号传输给其他设备。
同时,接收数据的设备可以监听总线上的数据并将其解析。
4.2 半双工通讯在半双工通讯中,设备的发送和接收操作是交替进行的。
设备在发送数据时,需要先将总线设置为发送模式,并将数据发送到总线上。
其他设备在接收数据时,将总线设置为接收模式,并监听数据。
5. 通讯协议RS485通讯可以使用多种协议进行数据交换,常见的有MODBUS、DMX512等。
这些协议定义了数据的传输格式、通讯方式和功能码等。
5.1 MODBUS协议MODBUS是一种常用的通讯协议,适用于工业自动化领域。
它定义了数据的传输格式,并提供了读写寄存器等功能。
MODBUS协议支持点对点和多点通讯。
5.2 DMX512协议DMX512是一种用于舞台灯光控制的通讯协议。
它定义了数据的传输格式和通讯方式。
DMX512通讯一般采用全双工方式进行。
6. 应用场景RS485通讯在许多领域都有广泛的应用。
pci总线定时协议一文搞懂Modbus与RS485通信协议
pci总线定时协议一文搞懂Modbus与RS485通信协议在工业自动化领域中,Modbus与RS485通信协议是非常常见且广泛应用的一种通信方式。
而PCI总线定时协议则是与Modbus与RS485通信协议密切相关的一种技术。
本文将从Modbus与RS485通信协议的基本概念入手,逐步介绍PCI总线定时协议的相关知识,帮助读者全面了解这两个重要的通信协议。
1. Modbus与RS485通信协议的概念Modbus是一种串行通信协议,通常用于将工业设备与控制系统进行连接和通信。
它最早由Modicon公司于1979年开发,并逐渐成为工业自动化领域中的通信标准。
Modbus协议简单、可靠,支持主从模式和多主模式,广泛应用于工业控制系统、能源管理系统等领域。
RS485通信协议是一种串行通信协议的物理层标准,用于在数字设备之间进行数据传输。
它是一种差分信号传输方式,支持多点通信,通信距离可达1200米,具有抗干扰能力强等特点。
RS485通信协议常用于远距离的数据传输,适用于工业环境中对可靠性和稳定性要求较高的场合。
2. Modbus与RS485通信协议的关系Modbus协议本身并不规定通信的物理层标准,而是通过串行通信接口与物理层进行连接。
RS485通信协议可以提供满足Modbus协议要求的物理层连接方式。
因此,Modbus通常使用RS485作为物理层接口进行数据传输。
RS485通信协议提供了一种可靠而高效的物理层传输方式,可以满足Modbus协议的通信需求。
通过RS485通信协议,Modbus协议可以实现远距离的数据传输,并且具备良好的抗干扰性能。
因此,Modbus与RS485通信协议经常同时使用,成为工业自动化领域中常见的通信组合方式。
3. PCI总线定时协议的原理与应用PCI总线定时协议是一种用于Modbus与RS485通信协议的时序控制技术。
它在PCI总线上实现了定时控制,确保Modbus协议在RS485通信中的稳定传输。
RS232RS485RJ45以及Modbus协议
RS232,RS485,RJ45,以及Modbus协议设想直流电源,它的输出端插座接口有三个管脚,分别是正极、负极和接地极。
相应地,负载的插头也应当有三个管脚与电源侧一一对应,这样才能正确地获得电能供应。
注意到这里有三个必须满足的条件:第一是插头和插座管脚的形状、大小和插针直径及长度必须一一对应,否则无法完成接插操作。
这一点规定了插头组合的物理结构和管脚定义。
第二是电源的输出电压值必须满足载侧的需求值,否则无法完成电参量的要求。
这一点决定了插头组合的电平规范。
第三是电源的输出阻抗与负载的输入阻抗必须匹配,否则不能实现完善的供电。
这一点决定了电源的工作性质。
这三点其实就是电源插头组合在物理层面上的规范性协议。
再看通信接口。
在有关计算机信息交换的ISO/OSI模型里,物理层是最底层(第一层),它规定了接口的机械外形、接口管脚定义、接口电平和字节格式。
这里的字节格式,指的是一个字节中有几个数据位,有几个起始位/停止位,有几个奇偶校验位。
一般地,一个字节有8个数据位,1个起始位(停止位),和1个奇偶校验位。
注意:起始位和停止位可以合并。
再看通信接口和通信网络的工作制问题。
当我们拿手机挂电话时,我们发现通信双方在通话的同时也可以接听,这叫做全双工(双向工作制);如果说话的时候不能听,而接听的时候不能说,但任何一方都具有说和听的能力,也即对讲机的通话型式,这叫做半双工。
RS422接口和RS232接口是全双工接口,而RS485则是半双工接口。
对于半双工接口,显然需要有通信的发起者,所以RS485接口和网络一定具有主站和若干从站,并且从站的数量也有规定。
一般地,从站的数量是32个。
RS485主站与从站的关系问题,看似只是通信工作制的不同,其本质是通信各方对通信总线控制权的合理分配。
我们再看总线连接问题。
我们还是以电源为例。
我们可以从电源引出一条主干线,然后再并联若干个支路并分别送到若干个负载。
只要满足电源的功率要求,显然这是可行的。
MODBUS 485与RS485区别
MODBUS 485 与RS485 区别Modbus 协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在一Modbus 网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus 协议发出。
在其它网络上,包含了Modbus 协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
MODBUS485=rs458RS-485 具有以下特点:1). RS-485 的电气特性:逻辑1 以两线间的电压差为+(26)V 表示;逻辑0 以两线间的电压差为-(26)V 表示。
接口信号电平比RS-232-C 降低了,就不易损坏接口电路的芯片,且该电平与TTL 电平兼容,可方便与TTL 电路连接。
2). RS-485 的数据最高传输速率为10Mbps3). RS-485 接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。
4). RS-485 接口的最大传输距离标准值为4000 英尺,实际上可达3000 米,另外RS-232-C 接口在总线上只允许连接1 个收发器,即单站能力。
而RS-485 接口在总线上是允许连接多达128 个收发器。
即具有多站能力,这样用户可以利用单一的RS-485 接口方便地建立起设备网络。
因RS-485 接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点就使其成为首选的串行接口。
RS-485和Modbus通信协议及工作原理
RS-485和Modbus通信协议及工作原理在(工业控制)、电力通讯、(智能)仪表等领域,通常情况下是采用串口(通信)的方式进行数据交换。
最初采用的方式是(RS)232接口,由于(工业)现场比较复杂,各种(电气)设备会在环境中产生比较多的电磁千扰,会导致(信号)传输错误。
1979年施耐德电气制定了一个用于工业现场的总线协议Modbus协议,现在工业中使用RS485通信场合很多都采用Modbus 协议,所以今天我们来了解下RS485通信和Modbus通信协议。
什么是串口通信串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并目可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。
(RS-485)协议概述RS-485和RS-232一样,都是审行通信标准,现在的标准名称是(TI)A485/EIA-485-A,但是人们会习惯称为RS485标准,RS-485常用在工业、自动化、汽车和建筑物管理等领域。
RS-485总线弥补了RS-232通信距离短,速率低的缺点,RS-485的速率可高达10Mbit/s,理论通讯距离可达1200米;RS-485和RS-232的单端传输不一样是差分传输,使用一对双绞线,其中一根线定义为A,另一个定义为B。
通常情况下,RS485的信号在传送出去之前会先分解成正负对称的两条线路(即我们常说的A、B信号线),当到达接收端后,再将信号相减还原成原来的信号。
拓扑结构RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,多采用的是两线制接线方式,这种接线方式为总线拓扑结构,在同一总线上最多可以挂接32个节点RS-485总线同12C总线一样支持主从模式,支持点对点单从机模式,也支持多从机模式,不支持多主机模式。
【总线】UART、Modbus、I2C、SPI、RS232、RS485及串口通讯常用参数
【总线】UART、Modbus、I2C、SPI、RS232、RS485及串⼝通讯常⽤参数⼀、UART异步收发传输,作为集成于微处理器中的周边设备,把并⾏输⼊信号转成串⾏输出信号,(⼀般是RS-232C规格的,与类似Maxim的MAX232之类的标准信号幅度变换芯⽚进⾏搭配)作为连接外部设备的接⼝。
该总线双向通信,可以实现全双⼯传输和接收。
在嵌⼊式设计中,UART⽤于主机与辅助设备通信,如与PC机通信包括与监控调试器和其它器件,如EEPROM通信。
⼀个字符接着⼀个字符传输,⼀个字符的信息由起始位、数据位、奇偶校验位和停⽌位组成。
传输时低位在前⾼位在后。
发送端和接收端必须按照相同的字节帧格式和波特率进⾏通信。
UART的设计采⽤模块化的设计思想,主要分为 3个模块:数据发送模块、数据接收模块及波特率发⽣器控制模块。
发送模块实现数据由并⾏输⼊到串⾏输出,接收模块实现数据由串⾏输⼊到并⾏输出,波特率发⽣器模块控制产⽣UART时钟频率。
发送逻辑对从发送FIFO读取的数据执⾏“并→串”转换。
控制逻辑输出起始位在先的串⾏位流,并且根据控制寄存器中已编程的配置,后⾯紧跟着数据位(注意:最低位 LSB 先输出)、奇偶校验位和停⽌位。
在检测到⼀个有效的起始脉冲后,接收逻辑对接收到的位流执⾏“串→并”转换。
此外还会对溢出错误、奇偶校验错误、帧错误和线中⽌(line-break)错误进⾏检测,并将检测到的状态附加到被写⼊接收FIFO的数据中。
需要两根信号线和⼀根地线。
⼆、Modbus1、ASCII模式与RTU模式的区别(1)ASCII:消息中每个ASCII字符都是⼀个⼗六进制字符组成(2)RTU:消息中每个8位域都是两个⼗六进制字符组成在同样波特率下,RTU可⽐ASCII⽅式传输更多的数据三、RS232、RS485(1)RS232RS232接⼝可以实现点对点的通信⽅式,但这种⽅式不能实现联⽹功能。
个⼈计算机上的通讯接⼝之⼀,异步传输标准接⼝。
avm rs485 modbus 数据和命令广播原理
avm rs485 modbus 数据和命令广播原理引言概述:AVM RS485 Modbus是一种用于数据和命令广播的通信协议。
本文将详细介绍AVM RS485 Modbus的原理和工作方式,包括数据广播和命令广播的实现方法。
正文内容:1. 数据广播的原理1.1 Modbus协议介绍:Modbus是一种通信协议,用于在不同设备之间进行数据传输。
它采用了RS485通信接口,支持多个设备同时进行数据广播。
1.2 RS485通信接口:RS485是一种串行通信接口,可以实现多个设备之间的数据传输。
它具有高速传输、长距离传输和抗干扰能力强的特点,非常适合用于数据广播。
1.3 AVM RS485 Modbus的数据广播原理:AVM RS485 Modbus通过RS485通信接口实现数据广播。
首先,主设备将数据发送到RS485总线上,然后所有从设备都能够接收到这些数据。
从设备可以根据自身的需求,选择性地提取所需的数据。
2. 命令广播的原理2.1 Modbus协议中的命令广播:除了数据广播外,Modbus协议还支持命令广播。
命令广播是主设备向所有从设备发送命令,从而实现对多个设备的集中控制。
2.2 AVM RS485 Modbus的命令广播原理:AVM RS485 Modbus通过RS485通信接口实现命令广播。
主设备将命令发送到RS485总线上,所有从设备都能够接收到这些命令。
从设备根据命令的内容执行相应的操作。
3. 数据和命令广播的应用场景3.1 工业自动化:AVM RS485 Modbus广播功能在工业自动化领域得到广泛应用。
它可以实现对多个设备的集中监控和控制,提高生产效率和安全性。
3.2 智能家居:AVM RS485 Modbus广播功能也可以应用于智能家居系统中。
通过广播功能,可以实现对多个智能设备的集中控制,提升家居的智能化程度。
3.3 公共设施管理:AVM RS485 Modbus广播功能还可以用于公共设施管理,如路灯控制、停车场管理等。
RS485与Modbus通信协议教程
RS485与Modbus通信协议教程1979年施耐德电气订立了一个用于工业现场的总线协议Modbus协议,现在工业中使用RS485通信场合很多都采纳Modbus协议,所以今日我们来了解下RS485通信和Modbus通信协议。
【一】/前言在工业掌控、电力通讯、智能仪表等领域,通常情况下是采纳串口通信的方式进行数据交换。
最初采纳的方式是RS232接口,由于工业现场比较多而杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。
1979年施耐德电气订立了一个用于工业现场的总线协议Modbus协议,现在工业中使用RS485通信场合很多都采纳Modbus协议,所以今日我们来了解下RS485通信和Modbus通信协议。
【二】/RS485通信1、实际上在RS485之前RS232就已经诞生,但是RS232也有不足:1)接口的信号电平值较高,达到十几V,简单损坏接口电路的芯片,而且和TTL电平不兼容,因此和单片机电路接起来的话必需加转换电路。
2)接口使用的信号线与其他设备形成共地模式的通信,这种共地模式传输简单产生干扰,并且抗干扰性能也比较弱。
3)传输距离、速率都有限,最多只能通信几十米;只能两点之间进行通信,不能够实现多机联网通信。
2、针对RS232接口以上不足,显现了RS485等新的接口标准,RS485具备以下的特点:1)逻辑“1”以两线间的电压差为+(2—6)V表示;逻辑“0”以两线间的电压差为(2—6)V表示。
接口信号电平比RS232降低了,不易损坏电路的芯片,且该电平与TTL电平兼容,可便利与TTL电路连接。
2)RS485通信速度快,数据最高传输速率为10Mbps以上;其内部的物理结构,采纳的是平衡驱动器和查分接收器的组合,抗干扰本领大大加添。
3)传输距离最远可达到1200米左右,但传输速率和传输距离是成反比的,只有在100KB/s以下的传输速率,才能达到最大的通信距离,假如需要传输更远距离可以使用中继。
基于 RS485总线和 Modbus RTU 通讯协议的液位监测系统
周 莉 娟 ( 中航工业雷华电子技术研究所 , 江苏 无锡 2 1 4 0 0 0 )
摘
要
‘
针对非接触式液位检测 , 设 计 了一 套 适 用 于 工 业 生 产 的液 位 检 测 系统 。该 系统 采 用 Mo d b u s R T U协议 , 采用 R S 4 8 5
与 上 位机 进 行 通 信 。 首 先 进行 了 系统 方 案设 计 , 在分析 R S 4 8 5和 Mo d b u s协 议 相 关性 能基 础 上 , 进 行 了软 件 设 计 , 并给 出 部 分设 计 代 码 。 实 际工 程 应 用表 明 , 该 系统 能够 稳 定运 行 。
每个 字 节 通 信 传 输 方 式 如 下 :
起始位 1 位
式将检测信号发送至分控室的上位机。总线方式采用 Mo d b u s
总线 , R T U方 式 , 采用 R S 4 8 5接 口 , 上 位 机 由液 位 监 控 计 算 机 组
墼 8 塑 位 鱼 I 1 鱼 位 堡 或 蕉 无 堕 校 壁 验I 壁 生 垡 1 位
关键 词 : 液 位检 测 , R S 4 8 5 , M o d b u s 。 R T U
Abs t r ac t Ai med a t n o n-c o pe r des i gn s a f l u i d m e a s ur i n g s y s t e m f or i n du s t r i a l f i e l d. T hi s s y s t e m u s e
安可信RS485通讯协议(V1.2)
HTX48501操作手册该产品的功能是负责把控制器的信号转换为标准的modbus协议信号。
一、硬件接口该产品使用RS485接口与modbus协议的主站进行通信。
RS485接口采用3线进行通信,分别为A,B,PGND。
二、软件接口使用modbus标准协议对可燃气体报警系统的信号进行解析。
使用到modbus协议的功能代码为1,2,3,4,5。
三、Modbus协议说明1.传输协议modbus传输模式:RTU波特率:9,600bps传输字节特性:起始位:1位数据位(最小位优先):8位奇偶校验:奇校验停止位:1位错误校验:CRC校验2.协议解析该协议支持两种数据访问模式,分别为位地址和寄存器地址(16位)。
a.地址表示该从modbus设备的通信地址(该地址的范围为1~247),该地址由控制器进行设置。
b.c.数据访问地址数据访问地址:就是访问的寄存器起始地址。
各种类型数据的具体起始访问地址(十进制表示)如下:x000:探测器的浓度x064:探测器的状态x128:模块的开关状态x168:控制器状态控制器中最多允许接入128个探测器,64个外部模块,4个内部模块。
地址以十进制数进行表示,千位为X,表示x的值可以为1~9。
其它位数的值固定。
数据访问地址的增量为2,比如:x000表示1号探测器,x001也表示1号探测器,x002和x003表示2号探测器。
(即访问地址除以2然后加1就是具体设备的编号)。
d.数据数据:通信发送要处理的实际数据。
注意:应答数据不能够超过255个字节。
e.CRC校验Modbus协议采用16位的CRC校验。
3.设备状态说明探测器状态如下:0:探头短路1:探头断线2:探头老化3:其它故障4:未标定5:零点变化7:无响应9:探头自检a:正常d:预报警e:低限报警f:高限报警4.modbus消息例子a.读取模块的开关状态实例1:发送:表示1,2,3,4号模块都断开。
实例2:应答:表示模块2闭合,内部模块3断开,模块4~6闭合。
485通信和modbus协议
{ TI = 0; //手动清零发送中断标志位
flagOnceTxd = 1; //设置单次发送完成标志
}
} /***********************main.c 文件程序源代码*************************/
cntbkp = cntRxd; idletmr = 0; } else { if (idletmr < 30) //接收计数器未改变,即总线空闲时,累积空闲时间 {
idletmr += ms; if (idletmr >= 30) //空闲时间超过 30ms 即认为一帧命令接收完毕 {
cmdArrived = 1; //设置命令到达标志 } } } } else { cntbkp = 0; } } void InterruptUART() interrupt 4 //UART 中断服务函数 { if (RI) //接收到字节 { RI = 0; //手动清零接收中断标志位 if (cntRxd < sizeof(bufRxd)) //接收缓冲区尚未用完时, { bufRxd[cntRxd++] = SBUF; //保存接收字节,并递增计数器 } } if (TI) //字节发送完毕
#include <intrins.h> sbit RS485_DIR = P1^7; //RS485 方向选择引脚
bit flagOnceTxd = 0; //单次发送完成标志,即发送完一个字节
bit cmdArrived = 0; //命令到达标志,即接收到上位机下发的命令
unsigned char cntRxd = 0; unsigned char pdata bufRxd[40]; //串口接收缓冲区
Modbus通讯协议简介
Modbus协议一、Modbus 通讯协议简介:Modbus协议是基于RS485硬件接口的通讯协议,它可以实现点对多点的网络化控制。
具体的协议内容可参考GB/Z 19582,协议分为RTU协议和ASCII协议。
本公司所提供之基于Modbus的产品皆遵循RTU协议,允许一台主机(Master)和多台从机(Slave)之间进行数据交换。
通讯方式采用问答式(即主机提出请求命令,从机接收后分析是否符合通讯规约,若是则做应答)。
二、主从机之间的通讯规约:主机发送的每一帧数据应包含如下信息(16 进制)从机地址 命令字 信息字 校验码从机地址(1 个字节):从机设备号,主机利用从机地址来识别进行通讯的从机设备。
表明由用户设置地址的从机将接收由主机发送来的信息。
在一个Modbus网络中每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应。
命令字(1 个字节): 主机发送的功能码,通知从机执行什么任务。
信息字(N 个字节): 包括进行两机通讯中的各种数据地址、数据长度、数据信息。
校验码(2 个字节): 用于检测数据通讯错误,采用循环冗余CRC16校验。
三、通讯参数的设置:通讯地址:设置通讯网络中从机地址号,可以设置为1~247。
(默认值为1)通讯速度:设置通讯网络中通讯速度,可选择通讯波特率为9600、19200、38400、57600、115200。
(默认值为19200)数据格式:设置通讯网络中数据格式:1个起始位,8个数据位,1个停止位,1个偶校验位。
通讯协议:ModBus RTU通讯协议。
四、报文格式说明命令字03H:读取参数值主机请求:地址 命令字 参数地址 数据长度 校验码从机响应:地址 命令字 字节长度 参数值 校验码命令字04H:读取测量值主机请求:地址 命令字 数据地址 数据长度 校验码从机响应:地址 命令字 字节长度 数据信息 校验码命令字08H:诊断主机请求:地址 命令字 子功能 数据 校验码从机回送:地址 命令字 子功能 数据 校验码命令字10H:修改参数值主机请求:地址 命令字 参数地址 数据长度 字节长度 参数值 校验码从机响应:地址 命令字 参数地址 数据长度 校验码五、例程读取主测量值指令主机发送 01H 04H 00H 01H 00H 02H 20H 0BH 读取测量值注:01H为编码器通讯地址,04H为命令字,00 01H为数据地址,00 02H为数据长度,20 0BH为校验码.从机响应 01H 04H 04H 00H 00H 01H 00H FAH 14H注:01H为编码器通讯地址,04H为命令字,04H为数据字节长度,00 00 01 00H为数据,FA 14H为校验码.附:只有在标定模式下时,读取测量值会发送读取圈数的指令,数据地址为00 03H.读取参数指令主机发送 01H 03H 00H 44H 00H 02H 84H 1EH 读取工作模式参数值 注:01H为编码器通讯地址,03H为命令字,00 44H为数据地址,00 02H为数据长度,84 1EH为校验码.从机响应 01H 04H 04H 00H 00H 00H 00H FBH 84H注:01H为编码器通讯地址,04H为命令字,04H为数据字节长度,00 00 00 00H为参数值,FB 84H为校验码.修改参数指令主机发送 01H 10H 00H 44H 00H 02H 04H 00H 00H 00H 00H F6H 6CH 修改工作模式参数值 注:01H为编码器通讯地址,10H为命令字,00 44H为参数地址,00 02H为数据长度,04H为数据字节长度,00 00 00 00H为参数值,F6 6CH为校验码.从机响应 01H 10H 00H 44H 00H 02H 01H DDH注:01H为编码器通讯地址,10H为命令字,00 44H为参数地址,00 02H为数据长度,01 DDH为校验码.※ 正常工作状态时,使用Modbus RTU协议,只能发送读取主测量值指令。
手把手教你学51单片机之十八RS485通信与Modbus协议
在工业控制、电力通讯、智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换。
最初采用的方式是 RS232 接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。
除此之外,RS232 接口只能实现点对点通信,不具备联网功能,最大传输距离也只能达到几十米,不能满足远距离通信要求。
而 RS485 则解决了这些问题,数据信号采用差分传输方式,可以有效的解决共模干扰问题,最大距离可以到1200 米,并且允许多个收发设备接到同一条总线上。
随着工业应用通信越来越多, 1979 年施耐德电气制定了一个用于工业现场的总线协议 Modbus 协议,现在工业中使用RS485 通信场合很多都采用 Modbus 协议,本节课我们要讲解一下 RS485 通信和Modbus 协议。
单单使用一块KST-51 开发板是不能够进行RS485 实验的,应很多同学的要求,把这节课作为扩展课程讲一下,如果要做本课相关实验,需要自行购买USB 转 485 通信模块。
18.1 RS485通信实际上在 RS485 之前 RS232 就已经诞生,但是RS232 有几处不足的地方:1、接口的信号电平值较高,达到十几V ,容易损坏接口电路的芯片,而且和TTL 电平不兼容,因此和单片机电路接起来的话必须加转换电路。
2、传输速率有局限,不可以过高,一般到几十Kb/s 就到极限了。
3、接口使用信号线和GND 与其他设备形成共地模式的通信,这种共地模式传输容易产生干扰,并且抗干扰性能也比较弱。
4、传输距离有限,最多只能通信几十米。
5、通信的时候只能两点之间进行通信,不能够实现多机联网通信。
针对 RS232 接口的不足,就不断出现了一些新的接口标准,RS485 就是其中之一,他具备以下的特点:1、我们在讲A/D 的时候,讲过差分信号输入的概念,同时也介绍了差分输入的好处,最大的优势是可以抑制共模干扰。
尤其工业现场的环境比较复杂,干扰比较多,所以通信如果采用的是差分方式,就可以有效的抑制共模干扰。
KBM-30RS485通信MODBUS-RTU协议 单通道隔离变送器通讯说明
KBM-30通讯采集说明书 一、主要用途:用于可编程控制器PLC、DCS、PCS的模拟量输入扩展。
二、主要功能特点:模块支持标准modbus协议,简单易用。
三、直流电压电流采集模块原理框图及操作说明:四、通讯格式说明模块使用固定的通讯数据格式:9600,8,N,1。
模块支持标准的modbus rtu协议,模块使用功能码03(读取保持型寄存器)读取模拟量值,长度为一个字(2个字节),寄存器地址为00 00(大部分组态软件寄存器地址要加1,比如组态王里的地址为40001)。
模块指令解析:读取模块模拟量值,发送给模块的命令帧:03 03 00 00 00 01 85 E8其中第一个字节03为模块通讯地址,第二个03为读取模拟量值的功能码,00 00为寄存器地址,00 01为读取寄存器的字(两个字节)数,85 e8为crc校验,高位在前。
模块返回:03 03 02 00 50 C1 B8其中第一个03为模块通讯地址,第二个03为读取模拟量值的功能码,02 为返回数据的字节数,00 50为返回的数据,即模拟量值,c1 b8为crc检验。
其中返回数据00 50为一个有符号整形数值,00 50转换为十进制为80,然后乘以一个固定系数(见表格1)就是实际测得的温度值。
输入信号乘数(系数)数值范围分辨率4~20ma 0.001 4000~20000 0.001ma0~20ma 0.001 0~20000 0.001ma0~5v 0.0001 0~50000 0.0001v1~5v 0.0001 10000~50000 0.0001v0~10v 0.001 0~10000 0.001v技术规格:电源电压:24V直流电压±10%电流消耗:< 50mA(24VDC供电时)功率损耗:<1W(24VDC供电时)工作温度:-5℃至+55℃工作湿度:0-90%RH(无冷凝)输入:模拟量信号绝缘电阻:>100MΩ外形尺寸:宽16.6×高105×深65(mm)操作说明:红色数码管正常状态时显示模块地址,面板上有两个按键,其中方形按键设置模块通讯地址,一直按住方形按键,模块地址会往上增加,到16后变为1(模块地址不能重复,最大为16)。
RS485和MODBUS的区别(包你明白)
1、Modbus是一种协议,必须要有硬件为实现平台,而不同的硬件平台具有不同的电气特性和连接方式,比如RS232,RS485;可以把Modbus比作英语,RS232比作印度人,RS485比作美国人,印度人之间讲英语时,理解为基于RS232的modbus通信,美国人之间讲英语时,理解为基于RS485的modbus通信。
2、RS485是一个物理接口,简单的说是硬件。
MODBUS是一种国际标准的通讯协议,用于不同厂商之间的设备交换数据(一般是工业用途);所谓协议,也可以理解为上面有人说的“语言”吧,简单的说是软件。
一般情况下,两台设备通过MODBUS协议传输数据:最早是用RS232C作为硬件接口,(也就是普通电脑上的串行通讯口(串口));也有用RS422的,也有常用的RS485,这种接口传输距离远,在一般工业现场用的比较多。
MODBUS协议又分MODBUS RTU,MODBUS ASCII和后来发展的MODBUS TCP三种模式:其中前两种(MODBUS RTU,MODBUS ASCII)所用的物理硬件接口都是串行(Serial)通讯口(RS232,RS422,RS485)。
而MODBUS TCP则是为了顺应当今世界发展潮流,什么都可以用Ethernet网或Internet 来连接,传送数据。
所以又MODBUS TCP模式,该模式的硬件接口就是以太网(Ethernet)口了,也就是我们电脑上一般用的网络口了。
3、协议分为硬件协议和软件协议。
而通讯协议属于软件协议,它包含报头包围的格式,MODBUS是应用层的通讯协议,主要用于传送和接收文件包的格式。
而RS232,RS485是物理层的串行接口,它可以支持几十种通讯协议,MODBUS只是其中的一种。
MODBUS可分为MODBUS RTU/ACSI, MODBUS +(也叫modbus PLUS)和modbus tcp/ip等。
前两种是在串行链路上使用的通讯协议(串口通讯),后一种是在以太网口基于TCP/IP协议的MODBUS通讯协议。
RS485通讯型温湿度(MODBUS)通讯协议手册
1、概述1.1 引言通讯规约详细描述了本机通讯的读、写命令格式及信息和数据的定义,以便第三方开发使用。
1. 2 电气特点及符合标准1) 连接上位机的主通信接口,采用标准串行RS485通讯口,使用接线端子。
2) 信息传输方式为异步方式,字节格式为起始位1位,数据位8位,停止位1位,无校验。
3) 数据传输速率1200b/s, 2400b/s, 4800b/s, 9600b/s, 19200b/s可选,缺省为9600b/s。
4) 符合MODUBS RTU 协议标准。
2、MODBUS RTU通信协议详述2.1 协议基本规则以下规则确定在回路控制器和其他串行通信回路中设备的通信规则。
1)所有RS485通讯回路都应遵照主/从方式。
依照这种方式,数据可以在一个主站(如:PC)和多个子站(如:TH11S)之间传递。
任何一次通讯都不能从子站开始。
2)主站将初始化和控制在RS485通讯回路上传递的所有信息。
3)所有回路上的传送均分为两种方式:A) 主/从传送B) 从/主传送4)在RS485回路上的所有通讯都以“信息帧”方式传递。
如果主站或子站接收到含有未知命令的信息帧,则不予以响应“信息帧”就是一个由字节构成的字符串(最多255个字节),是由信息头和发送的编码数据构成标准的异步串行数据,该通讯方式也与RTU通讯规约相兼容。
2.2信息帧结构描述每个信息帧组成如下:3、字节格式通讯传输为异步方式,并以字节为单位。
在主站和子站之间传递的每一个字节帧都是10位(无校验位)的串行数据流。
字节帧格式:4、命令报文格式4. 1读数据:主站发送返回:5如:带符号整数范围 -32768---32767上传数据需除十,正数的范围为16进制0X0000-0X7FFF,负数采用正数的补码方式传输,其范围为16进制0X8000-0XFFFF,如:湿度上传16进制 0X0311,对应十进制785,表示78.5%温度上传16进制 0X00FF,对应十进制255,表示25.5℃温度上传16进制 0XFF9B,对应十进制100(0XFFFF-0XFF9B=0X64), 表示-10.0℃6、网络采样定时H-THS温湿度传感器中,上位机读取数据每次间隔时间不小于500ms,推荐值1s。
概念:modbus协议、RS232或者RS485
概念:modbus协议、RS232或者RS485modbus协议和RS232或者RS485之间不是⼀回事。
Modbus是通讯协议,⽽RS232、RS485只能代表通讯的物理介质层和链路层。
Modbus协议⽀持传统的RS-232、RS-422、RS-485和以太⽹设备。
许多⼯业设备,包括PLC,DCS,智能仪表等都在使⽤Modbus协议作为他们之间的通讯标准。
三者区别如下:1,Modbus 协议:为更好地普及和推动Modbus在基于以太⽹上的分布式应⽤,⽬前施耐德公司已将Modbus协议的所有权移交给IDA(Interface for DistributedAutomation,分布式⾃动化接⼝)组织,并成⽴了Modbus-IDA组织,为Modbus今后的发展奠定了基础。
在中国,Modbus已经成为国家标准GB/T19582-2008。
据不完全统计:截⽌到2007年,Modbus的节点安装数量已经超过了1000万个。
Modbus协议是应⽤于电⼦控制器上的⼀种通⽤语⾔。
通过此协议,控制器相互之间、控制器经由⽹络(例如以太⽹)和其它设备之间可以通信。
它已经成为⼀通⽤⼯业标准。
有了它,不同⼚商⽣产的控制设备可以连成⼯业⽹络,进⾏集中监控。
此协议定义了⼀个控制器能认识使⽤的消息结构,⽽不管它们是经过何种⽹络进⾏通信的。
它描述了⼀控制器请求访问其它设备的过程,如何回应来⾃其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在⼀Modbus⽹络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产⽣何种⾏动。
如果需要回应,控制器将⽣成反馈信息并⽤Modbus协议发出。
在其它⽹络上,包含了Modbus协议的消息转换为在此⽹络上使⽤的帧或包结构。
这种转换也扩展了根据具体的⽹络解决节地址、路由路径及错误检测的⽅法。
此协议⽀持传统的RS-232、RS-422、RS-485和以太⽹设备。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在工业控制、电力通讯、智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换。
最初采用的方式是RS232接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。
除此之外,RS232接口只能实现点对点通信,不具备联网功能,最大传输距离也只能达到几十米,不能满足远距离通信要求。
而RS485则解决了这些问题,数据信号采用差分传输方式,可以有效的解决共模干扰问题,最大距离可以到1200米,并且允许多个收发设备接到同一条总线上。
随着工业应用通信越来越多,1979年施耐德电气制定了一个用于工业现场的总线协议Modbus协议,现在工业中使用RS485通信场合很多都采用Modbus协议,本节课我们要讲解一下RS485通信和Modbus协议。
单单使用一块KST-51开发板是不能够进行RS485实验的,应很多同学的要求,把这节课作为扩展课程讲一下,如果要做本课相关实验,需要自行购买USB转485通信模块。
18.1 RS485通信实际上在RS485之前RS232就已经诞生,但是RS232有几处不足的地方:1、接口的信号电平值较高,达到十几V,容易损坏接口电路的芯片,而且和TTL电平不兼容,因此和单片机电路接起来的话必须加转换电路。
2、传输速率有局限,不可以过高,一般到几十Kb/s就到极限了。
3、接口使用信号线和GND与其他设备形成共地模式的通信,这种共地模式传输容易产生干扰,并且抗干扰性能也比较弱。
4、传输距离有限,最多只能通信几十米。
5、通信的时候只能两点之间进行通信,不能够实现多机联网通信。
针对RS232接口的不足,就不断出现了一些新的接口标准,RS485就是其中之一,他具备以下的特点:1、我们在讲A/D的时候,讲过差分信号输入的概念,同时也介绍了差分输入的好处,最大的优势是可以抑制共模干扰。
尤其工业现场的环境比较复杂,干扰比较多,所以通信如果采用的是差分方式,就可以有效的抑制共模干扰。
而RS485就是一种差分通信方式,它的通信线路是两根,通常用A和B或者D+和D-来表示。
逻辑“1”以两线之间的电压差为+(0.2~6)V表示,逻辑“0”以两线间的电压差为-(0.2~6)V来表示,是一种典型的差分通信。
2、RS485通信速度快,最大传输速度可以达到10Mb/s以上。
3、RS485内部的物理结构,采用的是平衡驱动器和差分接收器的组合,抗干扰能力也大大增加。
4、传输距离最远可以达到1200米左右,但是他的传输速率和传输距离是成反比的,只有在100Kb/s以下的传输速度,才能达到最大的通信距离,如果需要传输更远距离可以使用中继。
5、可以在总线上进行联网实现多机通信,总线上允许挂多个收发器,从现有的RS485芯片来看,有可以挂32、64、128、256等不同个设备的驱动器。
RS485的接口非常简单,和RS232所使用的MAX232是类似的,只需要一个RS485转换器,就可以直接和我们单片机的UART串行接口连接起来,并且完全使用的是和UART一致的异步串行通信协议。
但是由于RS485是差分通信,因此接收数据和发送数据是不能同时进行的,也就是说它是一种半双工通信。
那我们如何判断什么时候发送,什么时候接收呢?RS485类的芯片很多,这节课我们以MAX485为例讲解RS485通信,如图18-1所示。
图18-1 MAX485硬件接口MAX485是美信(Maxim)推出的一款常用RS485转换器。
其中5脚和8脚是电源引脚,6脚和7脚就是485通信中的A和B两个引脚,而1脚和4脚分别接到我们单片机的RXD和TXD引脚上,直接使用单片机UART进行数据接收和发送。
而2脚和3脚就是方向引脚了,其中2脚是低电平使能接收器,3脚是高电平使能输出驱动器。
我们把这两个引脚连到一起,平时不发送数据的时候,保持这两个引脚是低电平,让MAX485处于接收状态,当需要发送数据的时候,把这个引脚拉高,发送数据,发送完毕后再拉低这个引脚就可以了。
为了提高RS485的抗干扰性能,需要在靠近MAX485的A和B 引脚之间并接一个电阻,这个电阻阻值从100欧到1K都可以。
在这里我们还要介绍一下如何使用KST-51单片机开发板进行外围扩展实验。
我们的开发板只能把基本的功能给同学们做出来提供实验练习,但是同学们学习的脚步不应该停留在这个实验板上。
如果想进行更多的实验,就可以通过单片机开发板的扩展接口进行扩展实验。
大家可以看到蓝绿色的单片机座周围有32个插针,这32个插针就是把单片机的32个IO引脚全部都引出来了。
在原理图上体现出来的就是我们的J4、J5、J6、J7这4个器件,如图18-2所示。
图18-2 单片机扩展接口这32个IO口不是所有的IO口都可以用来对外扩展,其中既作为数据输出,又可以作为数据输入的引脚是不可以用的,比如P3.2、P3.4、P3.6引脚,这三个引脚是不可用的。
比如P3.2这个引脚,如果我们用来扩展,发送的信号如果和DS18B20的时序吻合,会导致DS18B20拉低引脚,影响通信。
除这3个IO口以外的其他29个IO口,都可以使用杜邦线接上插针,扩展出来使用。
当然了,如果把当前的IO口应用于扩展功能了,板子上的相应的功能就实现不了了,也就是说需要扩展功能和板载功能二选一。
在进行RS485实验中,我们通信用的引脚必须是P3.0和P3.1,此外还有一个方向控制引脚,我们使用杜邦线将其连接到P1.7上去。
RS485的另外一端,大家可以使用一个USB转485模块,用双绞线把开发板和模块上的A和B分别对应连起来,USB那头插入电脑,然后就可以进行通信了。
学习了第13章的实用串口通信的方法和程序后,做这种串口通信的方法就很简单了,基本是一致的。
我们使用实用串口通信的思路,做了一个简单的程序,通过串口调试助手下发任意个字符,单片机接收到后在末尾添加“回车+换行”符后再送回,在调试助手上重新显示出来,先把程序贴出来。
程序中需要注意的一点是:因为平常都是将485设置为接收状态,只有在发送数据的时候才将485改为发送状态,所以在UartWrite()函数开头将485方向引脚拉高,函数退出前再拉低。
但是这里有一个细节,就是单片机的发送和接收中断产生的时刻都是在停止位的一半上,也就是说每当停止位传送了一半的时候,RI或TI就已经置位并且马上进入中断(如果中断使能的话)函数了,接收的时候自然不会存在问题,但发送的时候就不一样了:当紧接这向SBUF写入一个字节数据时,UART硬件会在完成上一个停止位的发送后,再开始新字节的发送,但如果此时不是继续发送下一个字节,而是已经发送完毕了,要停止发送并将485方向引脚拉低以使485重新处于接收状态时就有问题了,因为这时候最后的这个停止位实际只发送了一半,还没有完全完成,所以就有了UartWrite()函数内DelayX10us(5)这个操作,这是人为的增加了延时50us,这50us的时间正好让剩下的一半停止位完成,那么这个时间自然就是由通信波特率决定的了,为波特率周期的一半。
/***********************RS485.c文件程序源代码*************************/#include <reg52.h>#include <intrins.h>sbit RS485_DIR = P1^7; //RS485方向选择引脚bit flagOnceTxd = 0; //单次发送完成标志,即发送完一个字节bit cmdArrived = 0; //命令到达标志,即接收到上位机下发的命令unsigned char cntRxd = 0;unsigned char pdata bufRxd[40]; //串口接收缓冲区void ConfigUART(unsigned int baud) //串口配置函数,baud为波特率{RS485_DIR = 0; //RS485设置为接收方向SCON = 0x50; //配置串口为模式1TMOD &= 0x0F; //清零T1的控制位TMOD |= 0x20; //配置T1为模式2TH1 = 256 - (11059200/12/32) / baud; //计算T1重载值TL1 = TH1; //初值等于重载值ET1 = 0; //禁止T1中断ES = 1; //使能串口中断TR1 = 1; //启动T1}unsigned char UartRead(unsigned char *buf, unsigned char len) //串口数据读取函数,数据接收指针buf,读取数据长度len,返回值为实际读取到的数据长度{unsigned char i;if (len > cntRxd) //读取长度大于接收到的数据长度时,{len = cntRxd; //读取长度设置为实际接收到的数据长度}for (i=0; i<len; i++) //拷贝接收到的数据{*buf = bufRxd[ i];buf++;}cntRxd = 0; //清零接收计数器return len; //返回实际读取长度}void DelayX10us(unsigned char t) //软件延时函数,延时时间(t*10)us{do {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();} while (--t);}void UartWrite(unsigned char *buf, unsigned char len) //串口数据写入函数,即串口发送函数,待发送数据指针buf,数据长度len{RS485_DIR = 1; //RS485设置为发送while (len--) //发送数据{flagOnceTxd = 0;SBUF = *buf;buf++;while (!flagOnceTxd);}DelayX10us(5); //等待最后的停止位完成,延时时间由波特率决定RS485_DIR = 0; //RS485设置为接收}void UartDriver() //串口驱动函数,检测接收到的命令并执行相应动作{unsigned char len;unsigned char buf[30];if (cmdArrived) //有命令到达时,读取处理该命令{cmdArrived = 0;len = UartRead(buf, sizeof(buf)-2); //将接收到的命令读取到缓冲区中buf[len++] = '\r'; //在接收到的数据帧后添加换车换行符后发回buf[len++] = '\n';UartWrite(buf, len);}}void UartRxMonitor(unsigned char ms) //串口接收监控函数{static unsigned char cntbkp = 0;static unsigned char idletmr = 0;if (cntRxd > 0) //接收计数器大于零时,监控总线空闲时间{if (cntbkp != cntRxd) //接收计数器改变,即刚接收到数据时,清零空闲计时 {cntbkp = cntRxd;idletmr = 0;}else{if (idletmr < 30) //接收计数器未改变,即总线空闲时,累积空闲时间{idletmr += ms;if (idletmr >= 30) //空闲时间超过30ms即认为一帧命令接收完毕{cmdArrived = 1; //设置命令到达标志}}}}else{cntbkp = 0;}}void InterruptUART() interrupt 4 //UART中断服务函数{if (RI) //接收到字节{RI = 0; //手动清零接收中断标志位if (cntRxd < sizeof(bufRxd)) //接收缓冲区尚未用完时,{bufRxd[cntRxd++] = SBUF; //保存接收字节,并递增计数器 }}if (TI) //字节发送完毕{TI = 0; //手动清零发送中断标志位flagOnceTxd = 1; //设置单次发送完成标志}}/***********************main.c文件程序源代码*************************/ #include <reg52.h>unsigned char T0RH = 0; //T0重载值的高字节unsigned char T0RL = 0; //T0重载值的低字节void ConfigTimer0(unsigned int ms);extern void ConfigUART(unsigned int baud);extern void UartRxMonitor(unsigned char ms);extern void UartDriver();void main (){EA = 1; //开总中断ConfigTimer0(1); //配置T0定时1msConfigUART(9600); //配置波特率为9600while(1){UartDriver();}}void ConfigTimer0(unsigned int ms) //T0配置函数{unsigned long tmp;tmp = 11059200 / 12; //定时器计数频率tmp = (tmp * ms) / 1000; //计算所需的计数值tmp = 65536 - tmp; //计算定时器重载值tmp = tmp + 34; //修正中断响应延时造成的误差T0RH = (unsigned char)(tmp >> 8); //定时器重载值拆分为高低字节T0RL = (unsigned char)tmp;TMOD &= 0xF0; //清零T0的控制位TMOD |= 0x01; //配置T0为模式1TH0 = T0RH; //加载T0重载值TL0 = T0RL;ET0 = 1; //使能T0中断TR0 = 1; //启动T0}void InterruptTimer0() interrupt 1 //T0中断服务函数{TH0 = T0RH; //定时器重新加载重载值TL0 = T0RL;UartRxMonitor(1); //串口接收监控}现在看这种串口程序,是不是感觉很简单了呢?串口通信程序我们反反复复的使用,加上随着我们学习的模块越来越多,实践的越来越多,原先感觉很复杂的东西,现在就会感到简单了。