多个下位单片机与上位机pc通过串口通信的实现

最好给个程序 非常感谢 至于串口通信就不用单独给程序了 我现在实现了一个能正常传输数据了 我想用上位机采集两个单片机传来的数据 希望能明白我的意思 最好是c语言的 非常感谢
就是利用232转485电路 但是我想问问 上位机如何判断是下位机哪个传递的数据 给个简单的程序好吗 谢谢

用PC机与多个51单片机通过RS232进行通讯。

在多机通讯中,要保证主机与所选择的从机实现可靠的通信,必须保证串口具有识别的功能。在串行口控制寄存器SCON中有一位叫做SM2,就是为了多机通讯而设置的控制位。多机通讯的过程可以如下:

1 首先从机初始化,开中断,让其以方式2或3接收(9位异步通讯方式),置位SM2,REN位,允许接收,那么当SM2=1的时候,只有当接收到的第9位数据(RB8)等于1(接收到的为地址帧)的时候,前8位数据送入接收SBUF,置位RI,产生中断。如果接收到的第9位数据位0,则将接收到的数据帧丢弃。

2 此时主机可以先将从机地址发送给各个从机系统,各个从机的串口接收到第9位数据RB8为1,由于SM2=1,置位RI,各个从机相应中断,在中断服务程序中判断主机送来的地址是否与本机地址相符合(这个地址是由软件编写人员自行设定的),若相符,则清零SM2,准备接收数据。若不符,则保持SM2=1.

3 第三步主机开始发送数据帧,此时前面地址相符合的从机,SM2=0,主机发送的数据RB8=0,这样只有SM2=0的相符的从机可以产生接收数据中断,激活中断标志位RI,进入中断服务程序,去接收数据。其他的从机因SM2=1,又RB8=0,不能激活中断标志RI,不能进入中断,则把接收到的数据丢失不做处理。从而保证了这个数据通信的正确性。

程序详见参考资料

参考资料:http://blog.csdn.net/joyzml/archive/2009/09/28/4603797.aspx

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-17
有两个串口的话,设定对应的串口工作模式就行了。一个串口采两个单片机的信号比较麻烦。采取分时复用的方式可以处理。以上位机做主机,其它单片机做从机。每个单片机的地址码不相同。主机发送命令要求其中一台单片机回复时,该单片机回复,另一台则等待。当访问另一台时,这一台等待。记住,同一时候三者只有一个在发送。其它两个都在等待。上位机为主机。发送完以后,要等待回应或过一个固定的时间再访问另一台。
第2个回答  2010-05-17
如果是一个单片机具有多个串口,那么中断和地址是不同的,通信程序中更改下地址和中断就好了.
如果单片机只有一个串口,那就要更改硬件电路了,串口是1对1的,不支持1对多.
422和485可以支持1对多.

给每一个下位机编写一个不同的地址码,放入一个寄存器中,每次上传给上位机数据的时候,把地址码包含在数据包中,收到有效数据后,就可以根据地址码确认了,相当于身份ID.
如果不想在程序中修改,也可以通过拨码开关,在外部拨到地址位,每次上电后,通过读取拨码开关的值来确定自己的身份ID.
上位机向下位机发送数据的时候,如果是向单个发送的,就在数据包增加要发送下位机的地址码,如果是要向全部发送,就把地址码设为一特殊值,当作广播下发.
这个要在上下位机通讯协议中明确出来.本回答被提问者采纳
相似回答