[求助] 想实现基于485芯片的多机通信,突然就不行了

xiangbinlvcha   2015-4-13 16:43 楼主
主机在从机处去数据,然后显示到液晶屏上,一开始还行,但是现在什么都不显示了,主机用按键控制在哪个从机处取数据。。附上我的程序,,大神,指教指教我,快哭了

主机:                                 void master()
                                         {
                                                if(key1==0)
                                                {
                                                            RS485_DIR=1;
                                                                SBUF=0x01;
                                                                while(TI==0);
                                                                TI=0;
                                                                SM2=0;
                                                                 delay(100);
                                                                RS485_DIR=0;
                                                                for(i=0;i<2;i++)
                                                                {
                                                                        while(RI==0);
                                                                        RI=0;
                                                                        str[i]=SBUF;
                                                                        }
                                                                        SM2=1;
                                                                      display1();
                                                                        iscii_change();
                                                                        display2();
                                                                        key1 = 1;
                                               
                                                }
                                                if(key2==0)
                                                {
                                                        delay(5);
                                                        if(key2==0)
                                                        {
                                                                RS485_DIR=1;
                                                                SBUF=0x02;
                                                                while(TI==0);
                                                                TI=0;
                                                                SM2=0;
                                                                delay(100);
                                                                RS485_DIR=0;
                                                                PON=SBUF;
                                                                while(RI==0);
                                                                RI=0;
                                                                SM2=1;
                                                                 iscii_change2();
                                                                display4();
                                                                key2 = 1;
                                                        }
                                                }
                                        }


                                  void main()
                                  {          
                                         Lcd_Init();
                                        TMOD = 0x20;
                                        TH1 = 0xFD;
                                        TL1 = 0xFD;
                                        TR1 = 1;
                                        PCON = 0x00;
                                        SCON = 0xF8;
                                        ES=1;
                                        EA=1;
                                        EX0=1;
                                        IT0=1;
                                        TI=0;
                                        RI=0;
                                        while(1)
                                        {
                                                master();
                                        }
                                 
                                           }

从机2:        void main()
                {        tab=34;
                        TMOD = 0x20;
                        TH1 = 0xFD;
                        TL1 = 0xFD;
                        TR1 = 1;
                        PCON = 0x00;
                        SCON = 0xF0;
                        EA=1;
                        ES=1;
                        DE=0;
                        RE=0;
               
                        while(1)
                        {
                                tab=34;
                                _nop_();
                        }
                }
                void serial (void) interrupt 4 using 1
                {
                          ES=0;
                          RI=0;
                          if(SBUF==0x02)
                          {
                                  SM2=0;
                                tab=34;
                                RE=1;
                                DE=1;
                                SBUF=tab;
                                while(TI==0);
                                TI=0;
                          
                          RE=0;
                          DE=0;
                          SM2=1;
                          ES=1;
                          }
                }

回复评论 (6)

程序哪里有问题啊
点赞  2015-4-13 16:44
while(1)
                                        {
                                                master();
delay_ms(200);//加个延时

                                        }
点赞  2015-4-13 17:54
还有,你这样子写,变量什么的比较难懂你的意思,你不如用语言表达你的程序逻辑就行了。
点赞  2015-4-13 17:56
先不用按键控制,只读取其中一个从设备的数据,看看显示是否正常。现在一上电就不正常吗
点赞  2015-4-13 20:05
引用: yl20084784 发表于 2015-4-13 17:56
还有,你这样子写,变量什么的比较难懂你的意思,你不如用语言表达你的程序逻辑就行了。

是这样的,按键控制主机取哪个从机里的数据,按键1就取第一个从机,按键按下后,先有一个延时消抖,然后置485芯片为发送状态,发送SBUF=0x01,就是第一个从机的地址帧,第一个从机收到后,把从机一里面的数据写到SBUF里面发送到主机里,这时候主机就改为接收状态,接收数据,然后显示。就是这样一个过程,但是现在就是显示不出来了
点赞  2015-4-14 10:40
引用: ienglgge 发表于 2015-4-13 20:05
先不用按键控制,只读取其中一个从设备的数据,看看显示是否正常。现在一上电就不正常吗

那样是可以的,因为一开始就没有用按键,现在是在原来的基础上加的,一开始还可以,后来突然显示不出来,然后我把芯片什么的换了一遍还是不行
点赞  2015-4-14 10:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复