找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 1859|回复: 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();              //显示获取的数据

    }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

举报

沙发
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都关闭了,那就只能是查询式,死在没应答信号的可能性基本没有。
回复

举报

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

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

举报

6#
ID:931206 发表于 2022-5-9 13:38 | 只看该作者
Hephaestus 发表于 2022-5-7 10:49
EA、ES都关闭了,那就只能是查询式,死在没应答信号的可能性基本没有。

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

举报

7#
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. }
复制代码

回复

举报

8#
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;
}
回复

举报

9#
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 单片机教程网

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