单片机上的RS485接口
- 格式:pdf
- 大小:167.20 KB
- 文档页数:5
单片机rs485接收数据不良原因下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!单片机RS485接收数据不良原因随着现代通信技术的发展,RS485通信在工业控制领域中得到了广泛的应用。
单片机485串口读写冲突1. 引言在单片机应用中,串口通信是一种常见的通信方式。
而在一些特殊应用场景下,需要通过RS485总线实现多个设备之间的串口通信。
然而,由于RS485总线的特殊性,可能会出现读写冲突的情况。
本文将深入探讨单片机485串口读写冲突的原因及解决方法。
2. 问题描述当多个设备通过RS485总线进行串口通信时,可能会出现读写冲突的情况。
读写冲突指的是多个设备同时进行读写操作,导致通信数据出错或丢失的现象。
读写冲突有以下几个可能的原因:1.冲突时间窗口较短:由于数据传输速率较快,读写操作可能会在非常接近的时间内发生,导致冲突。
2.总线抢占问题:多个设备同时发送数据时,会出现总线抢占的情况。
某一设备在发送数据时,可能会被其他设备中断,导致数据错误。
3.传输距离限制:RS485总线的传输距离较长,当总线上存在多个设备时,可能会出现信号干扰、衰减等问题,导致通信质量下降,从而导致读写冲突。
3. 解决方法为了解决单片机485串口读写冲突问题,我们可以采取以下几种方法:3.1 时间窗口分隔法在多个设备之间设置合理的时间窗口分隔,避免读写操作在非常接近的时间内发生。
具体操作如下:1.设定固定的时间间隔:可以通过软件控制,设置设备间的通信时间间隔,确保不同设备的读写操作不会在同一时间发生。
2.随机化时间间隔:在设备间的通信时间间隔上增加一定的随机化,避免多个设备同时进行读写操作。
时间窗口分隔法能够有效地降低读写冲突的概率,提高数据传输的准确性。
3.2 基于优先级的冲突解决方法通过设定优先级,来解决读写冲突。
具体操作如下:1.设定设备的通信优先级:为每个设备设置不同的优先级,在通信时根据优先级来确定读写操作的顺序。
2.优先级协调机制:当有多个设备具有相同的优先级时,通过协调机制来确定读写顺序,例如采用先到先服务(FIFO)策略。
基于优先级的冲突解决方法能够确保高优先级设备的读写操作得到优先处理,从而减少读写冲突发生的可能性。
rs485总线接口通讯协议定义标准以及管脚引脚介绍
RS485总线标准是工业中(考勤,监控,数据采集系统)使用非常广泛的双向、平衡传输标准接口,支持多点连接,允许创建多达32个节点的网络; 最大传输距离1200m,支持1200m时为100kb/s的高速度传输,抗干扰能力很强,布线仅有两根线很简单。
RS485通信网络接口是一种总线式的结构,上位机(以个人电脑为例)和下位机(以51系列单片机51hei为例)都挂在通信总线上,RS485物理层的通信协议由RS485标准和51单片机的多机通讯方式。
由于RS-485是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。
如都采用平衡传输方式、都需要在传输线上接终接电阻等。
RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信。
下面介绍以下rs485通讯接口定义的标准
1.英式标识为TDA(-)、TDB(+)、RDA(-)、RDB(+)、GND
2.美式标识为Y、Z、A、B、GND
3.中式标识为TXD(+)/A、TXD(-)/B、RXD(-)、RXD(+)、GND
rs485两线一般定义为:
A,B或Date+,Date-
即常说的:’485+,485-’
rs485四线一般定义为:
Y,Z,A,B,
一般rs485协议的接头没有固定的标准,可能根据厂家的不同引脚顺序和管脚功能可能不尽相同,但是官方一般都会提供产品说明书,用户可以查阅相关rs485管脚图定义或者引脚图。
RS-422与RS-485串行接口标准(1)平衡传输RS-422、RS-485与RS-232不一样,数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B。
通常情况下,发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2V~6V,是另一个逻辑状态。
另有一个信号地C,在RS-485中还有一“使能”端,而在RS-422中这是可用可不用的。
“使能”端是用于控制发送驱动器与传输线的切断与连接。
当“使能”端起作用时,发送驱动器处于高阻状态,称作“第三态”,即它是有别于逻辑“1”与“0”的第三态。
(2)RS-422电气规定由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点。
即一个主设备(MASTER),其余为从设备(Salve),从设备之间不能通信,所以RS-422支持点对多的双向通信。
RS-422四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF握手)或硬件方式(一对单独的双绞线)实现。
RS-422的最大传输距离为4000英尺(约1219米),最大传输速率为10Mbps。
其平衡双绞线的长度与传输速率成反比,在100Kbps速率以下,才可能达到最大传输距离。
只有在很短的距离下才能获得最高速率传输。
一般100米长的双绞线上所能获得的最大传输速率仅为1Mbps。
RS-422需要一终接电阻,要求其阻值约等于传输电缆的特性阻抗。
在矩距离传输时可不需终接电阻,即一般在300米以下不需终接电阻。
终接电阻接在传输电缆的最远端。
(3)RS-485电气规定由于RS-485是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。
如都采用平衡传输方式、都需要在传输线上接终接电阻等。
RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信。
RS485总线接⼝引脚定义及说明RS485总线标准是⼯业中(考勤,监控,数据采集系统)使⽤⾮常⼴泛的双向、平衡传输标准接⼝,⽀持多点连接,允许创建多达32个节点的⽹络;最⼤传输距离1200m,⽀持1200 m时为100kb/s的⾼速度传输,抗⼲扰能⼒很强,布线仅有两根线很简单。
RS485通信⽹络接⼝是⼀种总线式的结构,上位机(以个⼈电脑为例)和下位机(以51系列单⽚机为例)都挂在通信总线上,RS485物理层的通信协议由RS485标准和51单⽚机的多机通讯⽅式。
由于RS-485是从RS-422基础上发展⽽来的,所以RS-485许多电⽓规定与RS-422相仿。
如都采⽤平衡传输⽅式、都需要在传输线上接终接电阻等。
RS-485可以采⽤⼆线与四线⽅式,⼆线制可实现真正的多点双向通信。
下⾯介绍以下rs485通讯接⼝定义的标准1.英式标识为TDA(-) 、TDB(+) 、RDA(-) 、RDB(+) 、GND2.美式标识为Y 、Z 、A 、B 、GND3.中式标识为TXD(+)/A 、TXD(-)/B 、RXD(-) 、RXD(+)、GNDrs485两线⼀般定义为:"A, B"或"Date+,Date-"即常说的:”485+,485-”rs485四线⼀般定义为:"Y,Z,A, B,"⼀般rs485协议的接头没有固定的标准,可能根据⼚家的不同引脚顺序和管脚功能可能不尽相同,但是官⽅⼀般都会提供产品说明书,⽤户可以查阅相关rs485管脚图定义或者引脚图上图中rs232转rs485电路中hin232(max232可以起到同样的作⽤但是要贵⼀点)起到转换pc端rs232接⼝电平的作⽤,然后把信号由max485这个芯⽚转换成485电平由AB两根线输出,如果接上双绞线信号rs485总线接⼝的信号的通信距离⾄少是1千⽶远。
由于RS485相比RS232具有抑制共模干扰、传输距离长等优点,所以许多大型的工业设备都采用RS485进行串口通讯。
但由于RS485采用的是差分信号,所以在进行串口通讯时,只能采用半双工的工作方式,必须使用1个或2个I/O口来控制RS485的发送和接收状态。
当需要采用RS485来对STC的新版IC(支持RS485下载的单片机系列在后面会详细列出)进行ISP下载时,必须进行一些设置才可下载代码。
具体的操作步骤如下:
1、首先需要设置好相应的RS485控制端口,并勾选上“下次下载时使能目标芯片的RS485控制功能”这个选项
2、然后使用普通下载方式将RS485相关的硬件选项写入到目标芯片
3、经过前面两步的设置和编程,此时的目标芯片便具有了对RS485的控制功能。
接下来仍需要保持RS485的控制选项不变,并勾选上"本次使用RS485进行控制下载"的选项(此选项的作用是使PC端也采用RS485的控制方式进行发送/接收串口数据)
4、再点击下载编程按钮,并对目标芯片重新上电即可实现使用RS485进行通信下载的功能
RS485控制功能仅对如下系列及新出的单片机有效:
STC15F2K60S2/STC15L2K60S2
IAP15F2K61S2/IAP15L2K61S2
STC15F104W/STC15L104W
IAP15F105W/STC15L105W
STC15W104SW/IAP15W105W
特别注意:
若需要RS485控制功能,则每次都需要将RS485相关的配置设置正确,并勾选上“下次下载时使能目标芯片的RS485控制功能”这个选项,否则在下一次下载时将不具有RS485控制功能了。
RS485总线标准是工业中(考勤,监控,数据采集系统)使用非常广泛的双向、平衡传输标准接口,支持多点连接,允许创建多达32个节点的网络;最大传输距离1200m,支持1200 m时为100kb/s的高速度传输,抗干扰能力很强,布线仅有两根线很简单。
RS485通信网络接口是一种总线式的结构,上位机(以个人电脑为例)和下位机(以51系列单片机为例)都挂在通信总线上,RS485物理层的通信协议由RS485标准和51单片机的多机通讯方式。
由于RS-485是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。
如都采用平衡传输方式、都需要在传输线上接终接电阻等。
RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信。
下面介绍以下rs485通讯接口定义的标准1.英式标识为TDA(-) 、TDB(+) 、RDA(-) 、RDB(+) 、GND2.美式标识为Y 、Z 、A 、B 、GND3.中式标识为TXD(+)/A 、TXD(-)/B 、RXD(-) 、RXD(+)、GNDrs485两线一般定义为:"A, B"或"Date+,Date-"即常说的:”485+,485-”rs485四线一般定义为:"Y,Z,A, B,"一般rs485协议的接头没有固定的标准,可能根据厂家的不同引脚顺序和管脚功能可能不尽相同,但是官方一般都会提供产品说明书,用户可以查阅相关rs485管脚图定义或者引脚图<rs232转rs485电路图>上图中rs232转rs485电路中hin232(max232可以起到同样的作用但是要贵一点)起到转换pc端rs232接口电平的作用,然后把信号由max485这个芯片转换成485电平由AB两根线输出,如果接上双绞线信号rs485总线接口的信号的通信距离至少是1千米远。
参考链接:/news/2009-01/8751.htm有标示按标示, 没有标示的话,按自己的,如电缆引线颜色信号定义说明红色电源+ 供电电源:10-40Vdc黄色电源-蓝色通讯+ RS485通讯接口黑色通讯-长距离的串行通信 RS485MAX487的数据传输速率为0.25Mbps,静态工作电流为120μA,5V单电源工作,在本系统中,MAX487采用半双工通信方式,各节点间的通信通过一对双绞线作为传输介质,因双绞线的特性阻抗为120Ω,因此系统在MAX487的始端和末端各接一个120Ω电阻以减少线路上传输信号的反射。
单片机上的RS485接口
RS232虽然应用很广泛,但因为它推出较早,在现代网络通信中已经暴露出明显的缺点。
比如以下几点:
1)数据传输速率慢。
RS232所规定的20KB/s的传输速率虽然能满足异步通信要求,通常异步通信速率限制在19.2KB/s以下对某些同步系统来说,不能满足传送速率
要求。
2)传送距离短。
RS232接口一般装置之间电缆长度为15m,即使有较好的线路器件优良的信号质量,电缆长度也不会超过60m。
3)没有规定标准的连接器,因而出现了互不兼容的25芯连接器。
4)接口处各信号间容易产生串扰。
RS485接口的出现就弥补了RS232的不足,而出现了一种新的接口标准,并且由于良好的性能,RS485获得了广泛的应用,其具有以下特点:
1)RS485的电气特性:逻辑“1”以两线间的电压差为+(2~6)V表示;逻辑“0”以两线间的电压差为(2~6)V表示。
接口信号电平比RS232降低了,就不易损坏接口
电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。
2)RS485的数据最高传输速率为10MB/s。
3)RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。
4)RS485接口的最大传输距离标准值为4000英尺,实际上可达1000米,另外RS232接口在总线上只允许连接1个收发器,即单站能力。
而RS485接口在总线上是允
许连接多达128个收发器。
即具有多站能力,这样用户可以利用单一的RS485
接口方便地建立起设备网络。
RS485收发器SN65HVD3082的使用方法
1)SN65HVD3082简介
此芯片是半双工RS485收发器。
5V供电,全完符合TIA/EIA485A标准。
它可以应用于传输速率低于200kbps的场合,并且工作电流低于0.6mA。
芯片的宽适用范围与高ESD保护使它可以满足诸如能量测量网络、电力转换、远程通信中的状态与命令传输和工业自动化网络等场合的要求。
另外,片内集成上
电复位电路,使供电后输出为高阻态。
高温停机机制保护设备不会因系统不良条件而损坏。
2)
芯片封装图:
3)
功能框图:
4)芯片功能表:
注:表中H 代表高电平,L 代表低电平,Z 代表高阻态,?代表不确定状态。
4)典型应用电路示意图:
输出
输入
输入D 使能DE 输出输出差模输入V ID =V A V B 使能#RE 输出R A B H H H L V ID <=0.2V L L L H L H 0.2V<V ID <0.01V L ?X L Z Z 0.01V<=V ID
L H OPEN H H L X H Z X
OPEN
Z
Z
开路L H 短路L H X
开路
Z
功耗在很多应用中都是一个关心的问题。
电源供给电流不仅到供给总线负载,同时也要供给收发器电路。
对典型的RS485总线配置,一个驱动器的负载包括所有的接收结点,及其总线尽头上的终止电阻(R T)。
接收结点的负载决定于接收器的输入阻抗。
TIA/EIA485A标准定义负载单位为1mA。
总线上允许有32个负载,所有的电流供给可以达到32mA。
HVD3082E是1/8单位负载的器件,从而可以在一条总线上存在256个结点。
终止电阻上的电流决定于不同的总线电压。
标准要求有效的驱动器到其它器件的差模信号至少要有1.5V。
对于总线终止电阻为标准的120欧的情况,不论总线是否有效,总共的差分输出电流为25mA。
60欧的负载下,HVD3082E可以驱动大于25mA,从而使得差模输出电压高于标准的最低要求。
总之,总共的负载电流可以是60mA。
HVD3082E在驱动器与接收器都被使能的情况下,只需要大约0.4mA的电流。
而驱动器或接收器被使能的情况下,只需要0.3mA。
在低功耗关机模式下,不论驱动器还接收器有效,供给电流非常低。
当驱动器与接收器都被禁止的情况下(DE为低,RE为高),芯片将进入关机模式。
如果使能输入在此模式下少于60ns,则芯片不会进入关机模式。
这种机制可以在驱动器/接收器有效的情况下避免其意外进行关机模式。
只有当使能输入持续多于300ns时,芯片才会进入此模式。
在这个低功耗的关机模式下,大部分内部电路都被掉电,电源电流只有1nA。
当驱动器或接收器被重新使能后,内部电路会被激活。
如果只有驱动器被重新使能(DE变为高)后,驱动器的输出与输入端D相对应。
如果输入端D为开路,驱动器的输入为默认的A高B低。
如果只有接收器被重新使能(RE 变为低),接收器的输出与总线上的输入状态相对应。
如果接收器与驱动器同时被重新使能,则接收器的输出与总线上的输入相对应,驱动器的输出与输入端D相对应。
要注意的是,有效的驱动器会影响接收器的输入。
因此,接收器的输出在驱动器输出有效时才有效。
#define RS485_Receive1
#define RS485_Send0
//定义串口缓存:缓存为循环链表
unsigned char rs_buffer[RS_BUFFER_SIZE];//串口接收缓存
int rs_buffer_pointer;//串口缓存首指针(指向最后一个接受到的字节)
int rs_buffer_amount;//串口缓字节数
//定义结束
//定义串口与MCU的硬件连接
sbit RS_Mode=P0^0;
//定义结束
void RS_Init()/*通讯有关参数初始化*/
{
TH1=FF;/*使用T1产生*/
TL1=FF;
TMOD=0x21;
PS=1;/*串行高优先级*/
EA=1;
ET1=0;
SM0=0;
SM1=1;/*SM0=0SM1=1,mode1,10bit*/
SM2=0;/*data int,无校验(TB8=bit_duble偶)*/
TR1=1;
REN=1;
RI=0;
TI=0;
ES=1;
RS_Mode=RS485_Receive;
rs_buffer_poiter=1;
rs_buffer_amount=0;
}
void RS_Receive()interrupt4using2//中断方式接收串口数据
{
ES=0;
if(RI)/*RI==1*/
{
//此处处理串口缓存
rs_buffer_pointer++;
rs_buffer_pointer=rs_buffer_pointer%RS_BUFFER_SIZE;
rs_buffer[rs_buffer_pointer]=SBUF;
rs_buffer_amount++;
RI=0;
}
ES=1;
}
void RS_Send(unsigned char data)//用户函数,发送一个字节的数据{
ES=0;
RS_Mode=RS485_Send;
SBUF=data;
RS_Mode=RS485_Receive;
ES=1;
while(TI==0);
TI=0;
}。