[485通信]

PC机与单片机485多机通信,单片机串口问题!!

[复制链接]
4002|38
手机看帖
扫描二维码
随时随地手机跟帖
星夜之北|  楼主 | 2014-11-21 09:16 | 显示全部楼层 |阅读模式
我看到别人在PC机与单片机485多机通信时,单片机串口用的是方式一!这怎么可能呢???串口方式一只适用于点对点通信啊!!只有方式2、3才能用于多机通信啊!但是方式2、3在于PC机通信时,第九位地址数据标志位又没办法解决!!如果强行用方式一多机通信,那么一个从机在接收消息时,其他从机也在不断接收数据和自己的地址对比,就一直在串口中断中,这样肯定不行啊,但是人家那系统还能运行!太神奇了!是不是单片机的速度比较快,即使不断中断也没啥影响????请大神们指点指点!!

相关帖子

ningling_21| | 2014-11-21 09:36 | 显示全部楼层
串口方式一只适用于点对点通信啊!

这是谁告诉你的呢?

“其他从机也在不断接收数据和自己的地址对比,就一直在串口中断中,这样肯定不行啊,但是人家那系统还能运行!太神奇了!是不是单片机的速度比较快,即使不断中断也没啥影响?”

这个关键看程序怎么写

使用特权

评论回复
arefeng| | 2014-11-21 09:43 | 显示全部楼层
多试验,老师说的,教材上说的,不一定准确.之前一些写书的人,英文很差,而且往往容易上升到理论高度,写出来的东西,又可能以偏概了全.
实际上,我们很多都不用那些个专用的模式,很简单,就是广播,不论谁收到,都判断,是不是自己的地址,是则应答,不是直接丢弃.
有空看看通信协议一类的东西,比如,YD/T-1363,DLT-645.......

使用特权

评论回复
星夜之北|  楼主 | 2014-11-21 09:44 | 显示全部楼层
ningling_21 发表于 2014-11-21 09:36
串口方式一只适用于点对点通信啊!

这是谁告诉你的呢?

这个是 硬件层的问题!!不管程序怎么写都无法改变啊!!方式2、3!有三个硬件位:SM2/RB8/TB8来辅助多机通信!!但是方式一没有啊!无论你怎么些程序只要总线上有数据传输所有从机都会不断接收数据,不断中断!!但是方式2、3用SM2就可以让串口只接收不中断!!

使用特权

评论回复
星夜之北|  楼主 | 2014-11-21 09:49 | 显示全部楼层
arefeng 发表于 2014-11-21 09:43
多试验,老师说的,教材上说的,不一定准确.之前一些写书的人,英文很差,而且往往容易上升到理论高度,写出来的 ...

但是广播的一个最大的问题就是:只要总线上有数据传输所有单片机都在不断中断和自己的地址对比!这样从机就一直在串口中断程序中跳出跳进!!!这样会影响到从机正常的运行吧!

使用特权

评论回复
ningling_21| | 2014-11-21 09:57 | 显示全部楼层
星夜之北 发表于 2014-11-21 09:44
这个是 硬件层的问题!!不管程序怎么写都无法改变啊!!方式2、3!有三个硬件位:SM2/RB8/TB8来辅助多机 ...

电脑不能处理9位数据吗? 肯定可以
方式1 也可以多机通信,方式1也可以只接收不中断

使用特权

评论回复
ningling_21| | 2014-11-21 09:59 | 显示全部楼层
星夜之北 发表于 2014-11-21 09:49
但是广播的一个最大的问题就是:只要总线上有数据传输所有单片机都在不断中断和自己的地址对比!这样从机 ...

这样会影响到从机正常的运行吧!

那要看你的程序的主要功能是什么,进中断判断又出中断总共需要多久呢?

使用特权

评论回复
星夜之北|  楼主 | 2014-11-21 10:02 | 显示全部楼层
ningling_21 发表于 2014-11-21 09:57
电脑不能处理9位数据吗? 肯定可以
方式1 也可以多机通信,方式1也可以只接收不中断
...

恩??方式一也可以只接收不中断??我也想如果这样就能解决问题,但是研究好半天没研究出来,劳烦大神不吝赐教啊!!卡在通信这儿好长时间了!!!

使用特权

评论回复
ningling_21| | 2014-11-21 10:21 | 显示全部楼层
星夜之北 发表于 2014-11-21 10:02
恩??方式一也可以只接收不中断??我也想如果这样就能解决问题,但是研究好半天没研究出来,劳烦大神不 ...

关闭串口中断,不断查询RI,如果为1就已经接收到数据

使用特权

评论回复
Harvard| | 2014-11-21 18:55 | 显示全部楼层
485的通信好好看看吧

使用特权

评论回复
Harvard| | 2014-11-21 18:56 | 显示全部楼层
他把通信变成了 每个单片机与485总线 点对点了. 这样你就能理解 为何可以用方式1 , 置于485上是怎么来处理,肯定有一套机制了. 一个原子就是,半双工,任何时刻 只有一个人在发送. 明白了吗?

使用特权

评论回复
一枝梅WYH| | 2014-11-21 20:09 | 显示全部楼层
学习了

使用特权

评论回复
pallee| | 2014-11-21 21:18 | 显示全部楼层
不用中断,笨办法用不断查询就可以啊

使用特权

评论回复
chunyang| | 2014-11-21 22:33 | 显示全部楼层
靠的是对协议的解析来解决。串口中断发生后,节点要对信息进行判断,是否是针对本机的指令或数据,是则响应,不是则放弃。串口模式1的应用最广泛、方便。

使用特权

评论回复
星夜之北|  楼主 | 2014-11-24 09:36 | 显示全部楼层
chunyang 发表于 2014-11-21 22:33
靠的是对协议的解析来解决。串口中断发生后,节点要对信息进行判断,是否是针对本机的指令或数据,是则响应 ...

因为我用的是主机喊从机的方式,所以从机的485在没有收到指令之前一直在接收状态,这样的话如果有一个从机和主机握手成功开始传输数据,那么其他从机也会不断接收总线上的数据,只不过所接收数据与自己的地址不相符丢弃了而已,但是这样的话有两个问题:一、只要总线上有数据传送,其他从机就会一直接收数据,不断在串口中断中跳出跳进!!这样会不会影响从机工作!二,由于地址是8位,从机在不断接收数据的时候,如果有一个数据偶然和某个从机的地址相同那么就会引起总线混乱!!

使用特权

评论回复
星夜之北|  楼主 | 2014-11-24 09:37 | 显示全部楼层
Harvard 发表于 2014-11-21 18:56
他把通信变成了 每个单片机与485总线 点对点了. 这样你就能理解 为何可以用方式1 , 置于485上是怎么来处理, ...

因为我用的是主机喊从机的方式,所以从机的485在没有收到指令之前一直在接收状态,这样的话如果有一个从机和主机握手成功开始传输数据,那么其他从机也会不断接收总线上的数据,只不过所接收数据与自己的地址不相符丢弃了而已,但是这样的话有两个问题:一、只要总线上有数据传送,其他从机就会一直接收数据,不断在串口中断中跳出跳进!!这样会不会影响从机工作!二,由于地址是8位,从机在不断接收数据的时候,如果有一个数据偶然和某个从机的地址相同那么就会引起总线混乱!!

使用特权

评论回复
hnoys| | 2014-11-24 10:03 | 显示全部楼层
看下modbus协议

使用特权

评论回复
星夜之北|  楼主 | 2014-11-24 10:27 | 显示全部楼层
hnoys 发表于 2014-11-24 10:03
看下modbus协议

对于单片机来说,他不知道什么事总线什么事协议!他只知道自己的串口有四种工作方式,用户根据自己的总线协议机制选择其中一种!所谓协议基本就是软件层的数据处理!!但是在解析协议之前,我上面提到的两个硬件层的问题始终无法跳过!!!

使用特权

评论回复
yhn1973| | 2014-11-24 11:59 | 显示全部楼层
频繁中断并不可怕,只要中断处理时间远小于中断间隔时间。

使用特权

评论回复
星夜之北|  楼主 | 2014-11-24 13:42 | 显示全部楼层
yhn1973 发表于 2014-11-24 11:59
频繁中断并不可怕,只要中断处理时间远小于中断间隔时间。

恩恩!!看了很多人的程序,大家基本都是这个想法:现在单片机的速度已经很快了,频繁的中断对其他进程并无影响,所以都用方式一简单一点!!

使用特权

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

本版积分规则

26

主题

56

帖子

1

粉丝