您的位置 首页 新品

单片机RS485串口通讯

RS-485是半双工的通信方式,发送和接收共用同一物理信道。在任意时刻只允许一台单机处于发送状态。因此要求应答的单机必须在侦听到总线上呼…

RS-485是半双工的通讯方法,发送和接纳共用同一物理信道。在恣意时刻只允许一台单机处于发送状况。因而要求应对的单机必须在侦听到总线上呼叫信号现已发送结束,而且没有其它单机宣布应对信号的情况下,才干应对。半双工通讯对主机和从机的发送和接纳时序有严厉的要求。假如在时序上合作欠好,就会产生总线抵触,使整个体系的通讯瘫痪,无法正常作业。要使总线上的设备在时序上严厉合作。在复位时,使主从机都处于接纳状况。

MAX3082的发送和接纳转化是由芯片的RE/和DE端操控的。RE/=1,DE=1时,MAX3082处于发送状况;RE/=0,DE=0时,MAX3082处于接纳状况。一般运用单片机的一个IO口衔接RE/和DE端。在上电复位时,我们硬件电路安稳需求必定的时刻,而且单片机各端口复位后处于高电平状况,这样就会使总线上各个分机处于发送状况,我们上电时各电路不安稳,或许向总线发送信息。因而,假如用一根口线作发送和接纳操控信号,应该将口线反向后接入MAX3082的操控端,使上电时MAX3082处于接纳状况。别的,在主从机软件上也应做处理办法,如:上电时或通讯之前,对串行口做几回空操作,铲除端口的不合法数据和指令。

RS-485的通讯程序编写和RS-232没有太大差异,假如运用一个IO口操控MAX3082的RE/和DE端口,RS-485只比RS-232多了一个接纳和发送的转化操控位。初始化串口时,使该位处于低电平,即接纳状况。发送数据时,使该位先为高,发送完数据后拉低。程序如下:

sbitRS485_EP3^5//发送,接纳操控位

void UART1_Init(void)

{

SCON = 0x50;//方法1,8位数据,可变波特率

RS485_E= 0;//置低,接纳

TMOD|= 0x20;//定时器1,方法2,8位自重载

PCON = 0x00;//波特率倍频制止

TH1= 0xfd;//晶振22.1184MHz,波特率19200;

TL1= 0xfd;

IE|= 0x90;//开中止

IP= 0x10;

TR1= 1;//发动定时器

}

void UART1_Send_Char(const INT8U dt)

{

SBUF= dt;

while(!TI);

TI = 0;

}

void UART1_Send_String(INT8U *str, INT8U len)

{

INT8U i;

RS485_E= 1;//置高,发送

ES= 0;

for(i=0; i

{

UART1_Send_Char(*(str+i));

}

RS485_E= 0;//置低,接纳

ES= 1;

}

void UART1_Interrupt(void) interrupt 4

{

RS485_E = 0;//接纳

ES = 0;

if(RI)

{

//中止接纳数据

}

ES = 1;

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/263643.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部