RS485总线双路通信

求大佬解答:我想要向两个从机发送信号,让他们接收到信号之后给我反馈数据,反馈的数据在LCD1602上面不同位置显示出来。结果同样的代码,从机1能接收到主机发出信号,并反馈数据;从机2不能接收到主机信号也不能反馈数据,LCD上面在不同位置显示了从机1的反馈数据。(用的keil和proteus)

主机:

void master(void)
{
	uint8 temp,temp1,temp2,temp3,temp4;
	int i=1;
	while(i<3)
	{
		if(i==1)
		{	
			en=1;
			SBUF = 0x01;
			while(TI!=1);TI=0;
			
			en=0;
			delay1ms();
			c = SBUF;while(RI!=1);RI=0;
			
			temp=c;
			temp1 = temp/10;
			temp2 = temp%10;

			Write_cmd(0x80);
			Write_dat(temp1+0x30);
			Write_dat(temp2+0x30);
			Write_dat(0xdf);
			Write_dat(0x43);
			i=i+1;
			delay1ms();
			delay1ms();
		}
		else if(i==2)
		{
			en=1;
			SBUF = 0x02;
			while(TI!=1);TI=0;
			
			en=0;
			delay1ms();
			d = SBUF;while(RI!=1);RI=0;	
			temp=d;
			temp3 = temp/10;
			temp4 = temp%10;

			Write_cmd(0xc0);
			Write_dat(temp3+0x30);
			Write_dat(temp4+0x30);
			Write_dat(0xdf);
			Write_dat(0x43);

			i=1;
			delay1ms();
			delay1ms();
		}
	}	
}

从机1:

void master(void)
{
	en=0;
	ES=0;
	m=SBUF;
	while(RI!=0);RI=0;
	if(m==1)
	{
		en=1;
		LED=0;	
		c=ReadTemperature();
		SBUF= c;
		while(TI!=1);
		TI=0;
		ES=1;
	}
	else 
	{	
		ES=1;
		en=0;
	}
	
}

从机2:

void master(void)
{
	en=0;
	ES=0;
	n=SBUF;
	while(RI!=0);RI=0;
	if(n==2)
	{
		en=1;
		LED=0;
		c=ReadTemperature();
		SBUF= c;
		while(TI!=1);
		TI=0;
		ES=1;
	}
	else 
	{
		ES=1;
		en=0;
	}	
}

 

看看这个是否对你有帮助,参考资料:https://blog.csdn.net/winkyxiao1981/article/details/6386390

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y