打印

485多机通信

[复制链接]
1154|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
XINGFUDEWUNAI|  楼主 | 2015-9-26 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助:dsp28035,通过485进行多机通信,对于dsp的地址设置是和I2C一样可以直接对寄存器设置吗?怎么没找到这个寄存器。还是通过if语句,来对比自己设定的一个字符?如果是用if语句设置,那应该放到接收中断里吗?

相关帖子

沙发
JY-DX-JY| | 2015-9-27 12:08 | 只看该作者
没有这个寄存器。不一定放到中断里。

使用特权

评论回复
板凳
mintspring| | 2015-9-30 20:15 | 只看该作者
没有用过多机通信,都是单机通信

使用特权

评论回复
地板
yiyigirl2014| | 2015-9-30 20:53 | 只看该作者
没试过这么高级的应用

使用特权

评论回复
5
huangcunxiake| | 2015-9-30 22:55 | 只看该作者
这个是如何组网的,星型吗?

使用特权

评论回复
6
天灵灵地灵灵| | 2015-9-30 22:57 | 只看该作者
组网方式确实需要认真研究下

使用特权

评论回复
7
XINGFUDEWUNAI|  楼主 | 2015-10-18 14:25 | 只看该作者
JY-DX-JY 发表于 2015-9-27 12:08
没有这个寄存器。不一定放到中断里。

谢谢!后来采用modbus协议,在解析函数中进行校验以及地址比较,最后在执行功能函数。

使用特权

评论回复
8
XINGFUDEWUNAI|  楼主 | 2015-10-18 14:26 | 只看该作者
huangcunxiake 发表于 2015-9-30 22:55
这个是如何组网的,星型吗?

还没涉及到组网方式,只是先编程,能进行地址选择

使用特权

评论回复
9
XINGFUDEWUNAI|  楼主 | 2015-10-18 14:37 | 只看该作者
本帖最后由 XINGFUDEWUNAI 于 2015-10-18 15:36 编辑
JY-DX-JY 发表于 2015-9-27 12:08
没有这个寄存器。不一定放到中断里。

后来在调试过程中,发现只能进入一次写操作,第二次就不能进入。每次写操作完成后,会置ModbusModule.Status=IDLE_WAIT,在第二次写操作的时候,还一直处于IDLE_WAIT,这是怎么回事?谢谢!        switch(ModbusModule.Status)
        {          
          case IDLE_WAIT: //空闲
      //如果在空闲状态有数据,开始接收
                 if(SciaRegs.SCIFFRX.bit.RXFFST!=0)//我觉得也可以换成标志位
           {
             ModbusModule.Status = RECE_START;
           }
           break;
          
          case RECE_START://正在接受,停止时间超过5个毫秒结束
                       SciaRegs.SCIFFRX.bit.RXFFIENA=1;
               if (CpuTimer0.InterruptCount>=3)
           { //接收帧结束
             ModbusModule.Status = RECE_END;
           }         
               break;
          case RECE_END: //接收完毕
               if(RTUSlaveFrameAnalyse()==0)
               { //帧解析正确
                 ModbusModule.Status =SEND_START;
                 SciaRegs.SCIFFRX.bit.RXFFIENA=0;
               }
               else
               { //帧解析不正确
                 ModbusModule.Status =SEND_END; //不打开发送开关
               }
                   break;
          case SEND_START: //开始发送
               scia_xmit(ModbusModule.Buf);
               ModbusModule.Status =SEND_END;
                   CpuTimer0.InterruptCount=0;
               break;
          case SEND_END: //发送完毕
           SciaRegs.SCIFFRX.bit.RXFIFORESET=0;
           SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
                   ModbusModule.Status=IDLE_WAIT;
               break;
        }//end switch

使用特权

评论回复
10
JY-DX-JY| | 2015-10-18 16:12 | 只看该作者
好久不搞DSP了,都忘了。你好好看看手册吧

使用特权

评论回复
11
XINGFUDEWUNAI|  楼主 | 2015-10-19 09:02 | 只看该作者
JY-DX-JY 发表于 2015-10-18 16:12
好久不搞DSP了,都忘了。你好好看看手册吧

好的,谢谢哦!

使用特权

评论回复
12
cnb12345| | 2015-10-20 00:38 | 只看该作者
现在ARM 几乎可以取代DSP了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

30

帖子

0

粉丝