
我们知道pc与单片机多采用232串口通信,你使用的是485方式,也是可以的,不过PC机直接不支持485 啊,于是乎,你要用一个RS232-485的转换器,单片机端直接用MAX485芯片就行了,这是硬件。
数据通信与232通信是一样的,不过485是半双工的,单片机端需要做收发控制。
单片机采用中断方式或扫描方式都行,给你一段中断程序,你参考一下:
com_interrupt(void) interrupt 4 using 3
{
unsigned char RECEIVR_buffer
if(RI) //处理接收中断
{
RI=0 //清除中断标志位
dat[n++]=SBUF
if(n>7)flg=1
}
}
flg是一个判断标志,如果你接收到7个数据后,标志置1,
在程序中处理为:
如果flg==1,你可以对你的dat数据处理,同时放n=0,等待下一次数据接收
OK
转到485的情况下,其实每个485口都收到了信息,根据协议来说,帧数据里面的地址是用来区分执行节点的,在每个485节点上的程序改动一下,只要接收到帧数据里面的命令就执行,但是这样容易造成485网络数据拥堵 。
RS485通信,每个设备通常是要有地址的,主从机通信时是按地址进行的。当主机向多个设备发送数据时,可以采用广播模式,即对所有从机发送。而从机接收到数据后不允许返回数据的。这可以在通信协议中加上广播模式,要是用modbus协议通信,就带有广播模式。
扩展资料:
内部集成 ARP,IP,TCP ,HTTP,ICMP,SOCK5,UDP,DNS等协议。RS-485/422转换提供数据自动控制。RS-232/422/485三合一串行接口 , 300-230.4KBPS波特率。
支持动态IP(DHCP)和静态IP,支持网关和代理服务器,可以通过Internet传输数据。提供数据双向透明传输,用户不需要对原有系统做任何修改。所有串口内置600W防雷 。10/100M以太网、自动侦测直连或交叉线。可以同时支持多个连接。
参考资料来源:百度百科-串口转换器
modbus用串口通信时一般不用设端口地址的,每一个485口可以并联最多32个从设备(自然最好将地址的值定义在1到32之间),每个从设备的地址不一样,从设备会根据主设备发送帧报文中的地址判断是不是在查询自己,若是则进行应答。至于地址设置,只要在从设备通信程序中定义一个地址变量,可以给地址变量赋定值,也可以编个小程序根据需要设置地址变量的值,最后通过比较该值与接收的报文中的地址是否一致,若一致,则进行返回应答帧。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)