485多机通信

[复制链接]
 楼主| 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 来自手机 | 显示全部楼层
没试过这么高级的应用
huangcunxiake 发表于 2015-9-30 22:55 来自手机 | 显示全部楼层
这个是如何组网的,星型吗?
天灵灵地灵灵 发表于 2015-9-30 22:57 来自手机 | 显示全部楼层
组网方式确实需要认真研究下
 楼主| XINGFUDEWUNAI 发表于 2015-10-18 14:25 | 显示全部楼层
JY-DX-JY 发表于 2015-9-27 12:08
没有这个寄存器。不一定放到中断里。

谢谢!后来采用modbus协议,在解析函数中进行校验以及地址比较,最后在执行功能函数。
 楼主| XINGFUDEWUNAI 发表于 2015-10-18 14:26 | 显示全部楼层
huangcunxiake 发表于 2015-9-30 22:55
这个是如何组网的,星型吗?

还没涉及到组网方式,只是先编程,能进行地址选择
 楼主| 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

JY-DX-JY 发表于 2015-10-18 16:12 | 显示全部楼层
好久不搞DSP了,都忘了。你好好看看手册吧
 楼主| XINGFUDEWUNAI 发表于 2015-10-19 09:02 | 显示全部楼层
JY-DX-JY 发表于 2015-10-18 16:12
好久不搞DSP了,都忘了。你好好看看手册吧

好的,谢谢哦!
cnb12345 发表于 2015-10-20 00:38 | 显示全部楼层
现在ARM 几乎可以取代DSP了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

30

帖子

0

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