原创 基于RS485和VB6.0的PC机与51单片机多机通信

2007-9-3 21:34 6094 11 34 分类: 通信

前一段时间主要做了几个小项目,都是单片机与PC机的串行通信,采用RS485,上位机采用VB6.0语言编写软件。


自己看VB有一段时间了,终于等到用的机会,现在学习的程度还可以完全够用。


单片机采用了51单片机,多机通信中采用了利SM2来区分是数据还是地址,效果还可以。其中RS485部分采用了隔离转换电路,采用高速光耦6N137,效果很好。


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


通信规则:


波特率9600   11位异步串行通信   1位起始位,8位数据位,1为地址/数据控制位  一位停止位    采用和校验不采用奇偶校验   地址、数据控制位是1为地址,0为数据。


 


例如实验采用2台下位机:


第一号机地址为01H


第二号机地址为02H


 


 


 


上位机程序流程:


1.       发送地址帧:A6+地址+


2.       接受下位机应答:地址+0+校验和+


3.       若应答正确发送请求数据命令:A5+地址+


4.       上位机返回数据:A5+数据+校验和+


5.       上位机计算数据并显示


注:A6A5为命令起始字节。?为结束字节。初始化所有的从机都采用接受状态,接受上位机的数据判断若地址与本机相符,就清SM2否则继续监听。


 


实验中主要遇到了以下几个问题:


1.       建议PC机采用的RS232RS485转换头最好采用带隔离的那种,否则有时在实验室就能发现通信不正常现象。


2.       在上位机或下位机发送数据时发送的数据要采用延时,当发完数据后也要加一段延时再进行接收,而这些时间我发现不同的系统是不一样的,我是经过实验来确定的时间的。


3.       单片机中我采用的是中断的方式进行发送和接收。


4.       VB6.0中发送地址时控件MSCOMM控件采用9600,M,8,1然后改为9600,S,8,1状态准备接受单片机的数据,发送数据时就采用9600,S,8,1状态。


5.       在进行多机通信时发现有时发送数据出现错误,例如先进行一号机进行通信,通信正常,再通信2号机发现通信错误,通过仿真器观察2号机接受的数据不读,多接受数据的个数不对,研究很长时间没有找到病根,后来发现网上别人也出现过问题,不过他好像是改成查询方式就好了,而我最后在VB中采用了出错自动重发解决了这个问题。


6.  看了很多的电路图,都是在485的输出端冰上120欧的匹配电阻,这是对的,但是挂多机时要还挂个120的电阻形成回路,这个我实验时发现不对,只能挂一个120欧的电阻。

文章评论23条评论)

登录后参与讨论

用户377235 2015-6-16 23:11

帮忙给一个这个,最近正在做这个,多谢694960867@qq.com

用户369554 2011-7-2 13:22

帮忙给一份,谢谢,ppq2000@hotmail.com

用户1453255 2009-11-10 22:46

请您一定要给我发一份,正在搞这个,不胜感激 nhu2001@sina.com

用户170494 2009-8-24 16:30

虽然这个帖子比较久了,但是我现在正在找这方面的资料,如果楼主还方便的话也请发我一份!谢谢了!zdd0605@126.com

用户1201144 2009-4-23 18:39

真是不错的点拨啊,哦,你能不能给我发一份啊,我毕业设计中有这个部分,我现在正头痛呢,如果有知识产权的话,我可以付你专利费啊。拜托,一定要跟我联系啊。hzw11@126.com,QQ 372571826

用户1110638 2008-12-25 16:59

基于RS485和VB6.0的PC机与51单片机多机通信
我现在也碰到这样的问题,请帮忙发一份,谢谢楼主。。
zhbsniper@yahoo.com.cn

用户1110638 2008-12-25 16:57

我现在也碰到这样的问题,请帮忙发一份,谢谢楼主。。
zhbsniper@yahoo.com.cn

huli184_389376486 2008-9-17 13:27

学习了。

用户146741 2008-6-13 14:56

我正在做485通讯测试,一直没做好,请楼主给我发一个吧jyhanxiao@126.com

用户146643 2008-6-6 21:02

读了阁下的文章,茅塞顿开!谢谢与大家分享你的富有价值的感受!
相关推荐阅读
用户7521 2010-01-24 17:43
带驱动器的步进电机控制
     带驱动器的电机,就是给脉冲就能动,不用自己用驱动芯片LM298等做驱动电路了,我用最简单的52。看了驱动器的资料内部带隔离,输入端电流要在10MA左右,我用了74HC04,和ULN2003,...
用户7521 2009-06-11 10:52
pcb再总结
  前一阵学了学FPGA,抽时间画了块开发板,结果做板子时又给我发了回来,说做不了,大连地区的一般的做板要求:现在开工费100拉,线最小8个MIL,线间距最小8个MIL,过孔,内径最小15个MIL,外...
用户7521 2007-08-04 08:28
如何成为一个杰出电子工程师
...
用户7521 2007-07-19 19:09
新的起点,新的希望,新的人生!
   从家回来有一个星期了,最近的一周过的很糟糕,先是送走了我最好的朋友去工作,然后有是忙着项目,一个星期下来自己一点收获都没有,最近的状态不知道是怎么了,今天休息了一下午,放松一下同时考虑考虑自己的...
用户7521 2007-06-16 19:26
工业抗干扰
工业现场的环境往往存在严重干扰,这些干扰有时会严重影响仪器的硬件或软件,我一般都采取硬件和软件措施来解决。<?xml:namespace prefix = o ns = "urn:schemas...
我要评论
23
11
关闭 站长推荐上一条 /2 下一条