PC机与多单片机的多机通信原理

我要做一个pc采集多个单片机数据的程序 现在思路就是每个单片机采集到数据通过rs485串口转换电路发送给pc pc通过轮询方式接收单片机数据 能给轮询那部分的程序 最好 谢谢!如果有更好的思路请指教,最好附上程序,非常感谢!!!!
我就是想问问通信协议这里的程序 有点不会写

用 modbus 协议通信啊!c预言编程的 很简单实用 还一看就懂! 485通信记得加上光电隔离 要不会烧坏芯片的!
你看看这部分的程序吧

if(receTimeOut>0)
{
receTimeOut--;
if(receTimeOut==0 && receCount>0) //判断通讯接收是否超时
{
b485Send = 0; //将485置为接收状态 同时满足俩条件
receCount = 0; //将接收地址偏移寄存器清零
checkoutError = 0; 校验位置置0
}
}
}

if(bt100ms)
{
bt100ms = 0;
b100ms = 1;
}
if(bt10ms) //判断中断10ms标志位是否1
{
bt10ms = 0; //清中断10ms标志位
b10ms = 1;

c200ms++; //200ms计时器加1
if(c200ms >= 20) //判断是否计时到200ms 200ms周期运行 一两一灭
{
c200ms = 0; //清200ms计时器
bRunLED = ~bRunLED; //取反运行指示灯
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-20
协议是固定的,只要将思路高清晰就行了,将每个单片机确定一个唯一的地址就可以了,轮换读数呗。
第2个回答  2010-05-18
先确定下一台PC对一片单片机你自己能不能做到?
可以做到的话就只剩下通信协议问题啦
第3个回答  2010-05-18
一楼正解。
第4个回答  2020-06-21

modbus
协议通信啊!c预言编程的
很简单实用
还一看就懂!
485通信记得加上光电隔离
要不会烧坏
芯片
的!
你看看这部分的
程序

if(receTimeOut>0)
{
receTimeOut--;
if(receTimeOut==0
&&
receCount>0)
//判断
通讯
接收是否超时
{
b485Send
=
0;
//将485置为接收状态
同时满足俩条件
receCount
=
0;
//将接收地址偏移
寄存器
清零
checkoutError
=
0;
校验位置置0
}
}
}
if(bt100ms)
{
bt100ms
=
0;
b100ms
=
1;
}
if(bt10ms)
//判断中断10ms标志位是否1
{
bt10ms
=
0;
//清中断10ms标志位
b10ms
=
1;
c200ms++;
//200ms
计时器
加1
if(c200ms
>=
20)
//判断是否计时到200ms
200ms周期运行
一两一灭
{
c200ms
=
0;
//清200ms计时器
bRunLED
=
~bRunLED;
//取反运行
指示灯
}
}
相似回答