手把手教你学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 的时候,讲过差分信号输入的概念,同时也介绍了差分输入的好处,最大

的优势是可以抑制共模干扰。

尤其工业现场的环境比较复杂,

干扰比较多, 所以通信如果采

用的是差分方式,就可以有效的抑制共模干扰。而

RS485 就是一种差分通信方式,它的通

信线路是两根, 通常用 A 和 B 或者 D+ 和 D- 来表示。逻辑“ 1”以两线之间的电压差为 表示,逻辑“ 0”以两线间的电压差为

+(0.2~6)V

-(0.2~6)V 来表示,是一种典型的差分通信。

2、 RS485 通信速度快,最大传输速度可以达到 10Mb/s 以上。

3、RS485 内部的物理结构,采用的是平衡驱动器和差分接收器的组合,抗干扰能力也大大 增加。

4、传输距离最远可以达到 1200 米左右,但是他的传输速率和传输距离是成反比的,只有

在 100Kb/s 以下的传输速度, 才能达到最大的通信距离, 如果需要传输更远距离可以使用中继。

5、可以在总线上进行联网实现多机通信,总线上允许挂多个收发器,从现有的

RS485 芯片

来看,有可以挂 32、 64、 128、 256 等不同个设备的驱动器。 RS485 的接口非常简单,和

RS232 所使用的 MAX232 是类似的,只需要一个

UART 串行接口连接起来,并且完全使用的是和

RS485 转换

UART 一

器,就可以直接和我们单片机的

致的异步串行通信协议。但是由于

RS485 是差分通信,因此接收数据和发送数据是不能同

时进行的,也就是说它是一种半双工通信。 那我们如何判断什么时候发送, 什么时候接收呢? RS485 类的芯片很多,这节课我们以 MAX485 为例讲解 RS485 通信,如图 18-1 所示。

图 18-1 MAX485 硬件接口

MAX485 是美信 (Maxim) 推出的一款常用 RS485 转换器。其中 5 脚和 8 脚是电源引脚, 和 7 脚就是 485 通信中的 A 和 B 两个引脚,而 TXD 引脚上,直接使用单片机 其中 2 脚是低电平使能接收器,

1 脚和 4 脚分别接到我们单片机的

6 脚 RXD 和

UART 进行数据接收和发送。 而 2 脚和 3 脚就是方向引脚了, 3 脚是高电平使能输出驱动器。 我们把这两个引脚连到一起,

MAX485 处于接收状态,当需要发

平时不发送数据的时候,保持这两个引脚是低电平,让

送数据的时候, 把这个引脚拉高,发送数据, 发送完毕后再拉低这个引脚就可以了。为了提 高 RS485 的抗干扰性能, 需要在靠近 MAX485 阻值从 100 欧到 1K 都可以。

的 A 和 B 引脚之间并接一个电阻,

这个电阻

在这里我们还要介绍一下如何使用 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,此外还有一个方向控制引脚,

USB 转 485

P1.7 上去。 RS485 的另外一端,大家可以使用一个

模块,用双绞线把开发板和模块上的 可以进行通信了。

A 和 B 分别对应连起来, USB 那头插入电脑,然后就

学习了第 13 章的实用串口通信的方法和程序后,做这种串口通信的方法就很简单了,基本 是一致的。 我们使用实用串口通信的思路, 意个字符,单片机接收到后在末尾添加“回车 出来,先把程序贴出来。 程序中需要注意的一点是:

做了一个简单的程序, 通过串口调试助手下发任

+换行”符后再送回,在调试助手上重新显示

因为平常都是将 485 设置为接收状态, 只有在发送数据的时候才

将 485 改为发送状态, 所以在 UartWrite() 函数开头将 485 方向引脚拉高, 函数退出前再拉低。

但是这里有一个细节, 就是单片机的发送和接收中断产生的时刻都是在停止位的一半上,也

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4