导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

串口多机通信pc机的发送数据问题!!!

zw0558 IT工程师  2009-08-21 09:36:30
为了实现与单片机的多机通信,我们使用地址标识,也就是在发送地址字节的时候校验位为M,在发送数据字节的时候为S,这样一来我们如何去发送数据呢!
我首先是设置校验位为m发送地址字节,然后在去设置校验位为s发送数据,这样正确吗?

当我们接受数据时,如果单片机也是按照这种方式给我发送数据我怎么处理呢!
因为在调试的时候,事件的返回值为1009也就是校验位出错,我应该怎么去做呢!
...全文
175 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
povoss 2012-05-23
操作8250的寄存器LCR
回复
huangcheng52 2010-06-02
谁有多机通信的程序啊 ,给我看看啊
回复
zaodt 2009-08-21
不清楚你说的校验是怎么回事,你可以详细说明一下你现在是怎么做的。
回复
zw0558 2009-08-21
计算机发送数据给 设备1 时,发送 0x01 data

设备2 时,发送 0x02 data

设备n 时,发送 0xn data
在发送数据就要对校验位进行设置为m 发送数据为s
在单片机给我发送数据的 0x00(主机地址) data
发送地址时为校验位为m 发送数据时候校验位为s
这样我如何接受数据呢!因为pc机现在的校验位为s也就不能正确的接受地址 和数据了!
如何解决这个问题呢!
回复
zaodt 2009-08-21
串行口多机通讯时,可以在发送的数据中加入地址,如:

计算机发送数据给 设备1 时,发送 0x01 data

设备2 时,发送 0x02 data

设备n 时,发送 0xn data

=======

设备收到数据后,先看看地址是不是自己的,如果是则处理,如果不是则不理。


而且,作为设备不应该主动发送数据,而是当收到计算机发送到数据后再向计算机返回数据;

否则会打架。
回复
schlafenhamster 2009-08-21
校验位是USART芯片产生的,你告诉USART要使用校验位那么USART根据字节中“1”的个数自动产生一个“1”或“0”.在PC上没有单片机多机通信的第9位。使用校验位后,data只能7位。
你的问题要靠“协议”来解决,如第一个字节为“地址”,地址后为数据。。。
回复
kondykuang 2009-08-21
校验 不是用来判断数据是不是丢失的嘛?
你为什么要用两套校验呢··
回复
zw0558 2009-08-21
因为是多机通信吗!
用第一个字节来指定地址字节
回复
zaodt 2009-08-21
那为什么不用一样的校验方式?
回复
zw0558 2009-08-21
pc->单片机
发送地址的时候:
m_mscom.SetSettings("9600,m,8,1");
m_mscom.SetOutput(COleVariant(hexdata));
发送数据时:
m_mscom.SetSettings("9600,s,8,1");
m_mscom.SetOutput(COleVariant(hexdata1));

单片机给我回的时候也是按照这种方式回的啊!此时我接收数据如何做呢!pc当前校验方式s而单片机发给我的第一个地址字节的时候校验方式为m,此时我就不能正确的而接收数据!
如何来解决这个问题!!
我用的是mscomm控件!

回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……