找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1064|回复: 8
收起左侧

单片机+RS485连接4个从机,必须同时连接四个才能工作,主机的EA和ES都是关闭状态

[复制链接]
ID:931206 发表于 2022-5-6 13:38 | 显示全部楼层 |阅读模式
    while (1)
    {



        delay_1ms(5);
        SEND_data(0x01);    //获取主机一的数据
        delay_1ms(5);
        DISplay_RT_1();              //显示获取的数据


        delay_1ms(5);
        SEND_data(0x02);    //获取主机二的数据
        delay_1ms(5);
        DISplay_RT_2();              //显示获取的数据
//
//
        delay_1ms(5);
        SEND_data(0x03);    //获取主机三的数据
        delay_1ms(5);
        DISplay_RT_3();              //显示获取的数据


        delay_1ms(5);
        SEND_data(0x04);    //获取主机四的数据
        delay_1ms(5);
        DISplay_RT_4();              //显示获取的数据

    }


回复

使用道具 举报

ID:883242 发表于 2022-5-7 00:49 | 显示全部楼层
多半是没有上下拉导致空闲时总线状态不确定导致的。用示波器看过波形了吗?
回复

使用道具 举报

ID:94031 发表于 2022-5-7 10:35 | 显示全部楼层
程序编制应加上,任何一路长时间没应答信号,应跳过进行下一路操作,否则会死在没连接那路。
回复

使用道具 举报

ID:883242 发表于 2022-5-7 10:49 | 显示全部楼层
xuyaqi 发表于 2022-5-7 10:35
程序编制应加上,任何一路长时间没应答信号,应跳过进行下一路操作,否则会死在没连接那路。

EA、ES都关闭了,那就只能是查询式,死在没应答信号的可能性基本没有。
回复

使用道具 举报

ID:931206 发表于 2022-5-9 13:25 | 显示全部楼层
Hephaestus 发表于 2022-5-7 00:49
多半是没有上下拉导致空闲时总线状态不确定导致的。用示波器看过波形了吗?

有上下拉电阻,用proteus仿真也是必须四个同时在线才能正常工作
回复

使用道具 举报

ID:931206 发表于 2022-5-9 13:38 | 显示全部楼层
Hephaestus 发表于 2022-5-7 10:49
EA、ES都关闭了,那就只能是查询式,死在没应答信号的可能性基本没有。

那该怎么改呢,我不知道它是卡在那个地方,是卡在读不到下位机传输的数据上还是卡在将数据显示在显示屏上
回复

使用道具 举报

ID:931206 发表于 2022-5-9 13:48 | 显示全部楼层
xuyaqi 发表于 2022-5-7 10:35
程序编制应加上,任何一路长时间没应答信号,应跳过进行下一路操作,否则会死在没连接那路。

对,我想了一下就是发送地址读数据超时然后就一直死在那个程序了,这是我读数据程序,该怎么解决呢?
  1. unsigned char SEND_data(unsigned char addr)
  2. {
  3.     unsigned char i = 0;

  4.     Rs485_die = 1;
  5.     TB8 = 1;
  6.     TI = 0;
  7.     SBUF = addr;
  8.     while (!TI);
  9.     TI = 0;

  10.     Rs485_die = 0;
  11.     for (i = 0; i < 4; i++)
  12.     {
  13.         RI = 0;
  14.         while (!RI);
  15.         RH_TP[i] [i]= SBUF;
  16.         RI = 0;

  17.     }



  18.     Rs485_die = 1;
  19. }
复制代码

回复

使用道具 举报

ID:94031 发表于 2022-5-9 16:09 | 显示全部楼层
kill2007 发表于 2022-5-9 13:48
对,我想了一下就是发送地址读数据超时然后就一直死在那个程序了,这是我读数据程序,该怎么解决呢?

for (i = 0; i < 4; i++)
{
        unsigned int m;
       
        RI = 0;
        m=0;
        while(!RI)
        {
         m=m+1;
         if(m>10000){i=5;break;}
        }
        RH_TP = SBUF;
        RI = 0;
}
回复

使用道具 举报

ID:931206 发表于 2022-5-10 22:57 | 显示全部楼层
xuyaqi 发表于 2022-5-9 16:09
for (i = 0; i < 4; i++)
{
        unsigned int m;

okok,非常感谢大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表