我用的485总线芯片是75176. 485总线是半双工的,任何时刻总线上只能有一点处于发送状态,其他点处于接收状态,否则会出现总线错误.通过实验,我发再其实两边也都可以是接收状态的,当哪一边需要发送数据只要使能75176为发送状态即可,发送完之后再将75176设置为接收状态.这时问题出现了,如果A点发送完数据然后将75176设置为接收状态,如果需要立即发送数据,A又立即将使能75176为发送状,然后发送数据,这时B点将收不到数据.经过我反复实验发现A发送完数据,将75176设置为接收状态,然后再延时一段时间(我的大概是1S),B 点才能正确收到数据.B点也一样,发送完数据后要延时一段时间,A才能正确收到数据. 我不知道其用485总线的朋友有没有碰到这个问题,希望用过的朋友发表一下意见.
续: 由于485是简单的半双工的总线,没有像以太网一样有CSMA-CD机制确保任何一节点随时都能主动发数据,485一般都是主从的方式,从机不能主动发数据,只有主机需要从机发数据时,从机才能发,如果任何一485节点都能主动发数据,那两个节点同时发数据时有会有冲突(232和422是全双工的,没有这个问题).CPU控制485芯片发数据之后,需要延时一段时间(ms级的延时),因为硬件也是有延时的,不可能将数据写到发送寄存器之后,数据马上就传到了接收方,所以需要一些延时,才能将485芯片从发送状态改为接收状态。
|