標(biāo)題: 單片機+RS485連接4個從機,必須同時連接四個才能工作,主機的EA和ES都是關(guān)閉狀態(tài) [打印本頁]

作者: kill2007    時間: 2022-5-6 13:38
標(biāo)題: 單片機+RS485連接4個從機,必須同時連接四個才能工作,主機的EA和ES都是關(guān)閉狀態(tài)
    while (1)
    {



        delay_1ms(5);
        SEND_data(0x01);    //獲取主機一的數(shù)據(jù)
        delay_1ms(5);
        DISplay_RT_1();              //顯示獲取的數(shù)據(jù)


        delay_1ms(5);
        SEND_data(0x02);    //獲取主機二的數(shù)據(jù)
        delay_1ms(5);
        DISplay_RT_2();              //顯示獲取的數(shù)據(jù)
//
//
        delay_1ms(5);
        SEND_data(0x03);    //獲取主機三的數(shù)據(jù)
        delay_1ms(5);
        DISplay_RT_3();              //顯示獲取的數(shù)據(jù)


        delay_1ms(5);
        SEND_data(0x04);    //獲取主機四的數(shù)據(jù)
        delay_1ms(5);
        DISplay_RT_4();              //顯示獲取的數(shù)據(jù)

    }



作者: Hephaestus    時間: 2022-5-7 00:49
多半是沒有上下拉導(dǎo)致空閑時總線狀態(tài)不確定導(dǎo)致的。用示波器看過波形了嗎?
作者: xuyaqi    時間: 2022-5-7 10:35
程序編制應(yīng)加上,任何一路長時間沒應(yīng)答信號,應(yīng)跳過進(jìn)行下一路操作,否則會死在沒連接那路。
作者: Hephaestus    時間: 2022-5-7 10:49
xuyaqi 發(fā)表于 2022-5-7 10:35
程序編制應(yīng)加上,任何一路長時間沒應(yīng)答信號,應(yīng)跳過進(jìn)行下一路操作,否則會死在沒連接那路。

EA、ES都關(guān)閉了,那就只能是查詢式,死在沒應(yīng)答信號的可能性基本沒有。
作者: kill2007    時間: 2022-5-9 13:25
Hephaestus 發(fā)表于 2022-5-7 00:49
多半是沒有上下拉導(dǎo)致空閑時總線狀態(tài)不確定導(dǎo)致的。用示波器看過波形了嗎?

有上下拉電阻,用proteus仿真也是必須四個同時在線才能正常工作
作者: kill2007    時間: 2022-5-9 13:38
Hephaestus 發(fā)表于 2022-5-7 10:49
EA、ES都關(guān)閉了,那就只能是查詢式,死在沒應(yīng)答信號的可能性基本沒有。

那該怎么改呢,我不知道它是卡在那個地方,是卡在讀不到下位機傳輸?shù)臄?shù)據(jù)上還是卡在將數(shù)據(jù)顯示在顯示屏上
作者: kill2007    時間: 2022-5-9 13:48
xuyaqi 發(fā)表于 2022-5-7 10:35
程序編制應(yīng)加上,任何一路長時間沒應(yīng)答信號,應(yīng)跳過進(jìn)行下一路操作,否則會死在沒連接那路。

對,我想了一下就是發(fā)送地址讀數(shù)據(jù)超時然后就一直死在那個程序了,這是我讀數(shù)據(jù)程序,該怎么解決呢?
  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. }
復(fù)制代碼


作者: xuyaqi    時間: 2022-5-9 16:09
kill2007 發(fā)表于 2022-5-9 13:48
對,我想了一下就是發(fā)送地址讀數(shù)據(jù)超時然后就一直死在那個程序了,這是我讀數(shù)據(jù)程序,該怎么解決呢?

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;
}
作者: kill2007    時間: 2022-5-10 22:57
xuyaqi 發(fā)表于 2022-5-9 16:09
for (i = 0; i < 4; i++)
{
        unsigned int m;

okok,非常感謝大佬




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1