PC机与单片机多机通讯问题
来源:互联网 发布:人工智能技术失控 编辑:程序博客网 时间:2024/05/22 04:53
1单片机的多机通讯一般是主机和下位机都是用单片机。通讯模式为主机发送查询命令给下位机,目标下位机返回预期的数据。发送数据时,tb8置1,发送地址字节,然后,置tb8为0,发送剩余的数据。准备接收时,置sm2 =1,当有数据接收时,如果rb8=1,说明收到的字节是地址,(从机)应该把该字节与自己的地址对比,如果一致,则置sm2=0,准备接收随后的数据字节,否则,继续保持sm2=1。
2 针对主机为pc机的情况,没有tb8这样的称呼,但是可以使用串口的奇偶校验位代替,即parity=mark,表示tb8=1,parity=space,表示tb8=0。
举例:PC机发送 48 02 55 01 48 d4 //48 设备地址,02 数据长度, 55 01 指定的控制数据,48 d4 crc16校验
返回:48 06 01 00 00 00 00 00 22 4c
串口参数设置校验位MARKPARITY,发送第一个字节: 地址01;延时5ms, 然后串口参数设置校验位SPACEPARITY,发送后续字节;
写串口的核心部分代码如下(本代码使用同步方式读写串口,难度不大,大牛勿喷。其它的部分请参考网络解释)
BYTE cSend[6];
cSend[0] = 0x48;
cSend[1] = 0x02;
cSend[2] = 0x55;
cSend[3] = 0x01;
cSend[4] = 0x48;
cSend[5] = 0xd4;
DWORD sCount;
DCB dcb;
if(m_bConnected) {
GetCommState(m_hCom, &dcb);
dcb.Parity = MARKPARITY;
//dcb.Parity = 1;
SetCommState(m_hCom, &dcb);
PurgeComm(m_hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
sCount = 1;
WriteFile(m_hCom,cSend, sCount, &sCount, NULL);
Sleep(5);
sCount = 5;
GetCommState(m_hCom, &dcb);
dcb.Parity = SPACEPARITY;
//dcb.Parity = 0;
SetCommState(m_hCom, &dcb);
PurgeComm(m_hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
WriteFile(m_hCom,&cSend[1], sCount, &sCount, NULL);
}
else {
::AfxMessageBox("串口未连接");
}
未完待续
- PC机与单片机多机通讯问题
- 单片机与PC机串口通讯接地问题
- PC机与单片机的通讯(1)
- 单片机和PC机串口通讯试验
- 单片机与PC机通信
- max232管脚讲解 单片机与PC通讯
- 单片机与PC机多机通讯 串口通信
- java 实现单片机与PC串口通讯
- PC机串口调试助手与单片机通信字符问题
- PC机与多个单片机间的通信
- PC 机与单片机通信(RS232 协议)
- 单片机与PC机通信USB2COM
- 单片机与PC机之间的通信
- S7 200 modbus与PC机通讯
- 求助,急!关于VB的单片机与PC机的通信问题!
- 基于Java语言的51单片机串口通讯PC机程序
- 基于Java语言的51单片机串口通讯PC机程序
- 基于Java语言的51单片机串口通讯PC机程序
- 调侃《HeadFirst设计模式》之工厂模式(一)
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接---个人整理
- POJ 1015 Jury Compromise(DP)
- jQuery-事件和应用
- 知识体系
- PC机与单片机多机通讯问题
- 4. linux shell、环境变量及与帐户的关系
- c&c++反汇编与逆向分析学习笔记(9)--自增和自减
- 猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- 北大ACM试题分类 - 实时更新我所有的解题报告链接
- 树 Maximum Depth of Binary Tree
- Haar特征与积分图
- 简单到死的计算器C编程
- hdu 5202 Rikka with string