求助:使用MSCOMM控件进行串口通信,如何更改奇偶位?

lanyeyu 2004-05-04 10:10:12
使用VB的MSCOMM控件实现与单片机串口通信,初始的SETTING属性要将奇偶位设定为1,以传送地址码,应怎样设置?

其后,若回应地址正确,要将奇偶位设为0,以传送数据码,又应如何设置?

请各位高手不吝指教,万分感谢!
...全文
367 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wenking003 2004-05-05
  • 打赏
  • 举报
回复
谢谢lanyeyu (阑夜雨)的说明,这使我了解到大家在解决问题时所采用的各种各样的方法,真是多姿多彩!
你这里所采用的方式,对于设备的寻址是有很高的效率,可以最多驱动达256个设备。
我们在实际工作中,也需要通过串口对很多的设备进行控制,包括有级联的,所以我们采用数据包的方式进行通讯,包中包括:地址码+数据体+校验。这种做法不如你采用的方法的效率高,但采用的方法比较标准,容易扩展,(在软件方面)对设备的数量没有太多的限制,推荐你参考。
在上述的问题中,通过更改setting,只是更改了校验位,其它并没有改变,这不是你所需要的吗?
在我的试验中,我并不需要关闭串口,就可以实现setting的改变,而且接收的结果随之而变(由于条件所限我只能做接收的调整),希望大家指点,我也在学习中......
lanyeyu 2004-05-05
  • 打赏
  • 举报
回复
明白了~非常感谢各位的指教~
以后有问题我还需要向大家多多请教的:)
再次感谢!
jautomn 2004-05-04
  • 打赏
  • 举报
回复
如果MSCOMM1打开的情况下更改会出错。
在MSCOMM关闭的情况下可以进行更改
偶校验:
MSCOMM1.PORTOPEN=FALSE
mscomm1.setting="9600,e,8,1"
MSCOMM1.PORTOPEN=TRUE

奇校验:
MSCOMM1.PORTOPEN=FALSE
mscomm1.setting="9600,O,8,1"
MSCOMM1.PORTOPEN=TRUE

Wenking003 2004-05-04
  • 打赏
  • 举报
回复
1、MSCOMM的奇偶校验值包括如下:
设置值 描述
E 偶数 (Even)
M 标记 (Mark)
N 缺省 (Default)
None
O 奇数 (Odd)
S 空格 (Space)
例子:偶校验:mscomm1.setting="9600,E,8,1"
奇校验:mscomm1.setting="9600,O,8,1"
可以随时更改。

2、我想请教的是:为何在一个通讯过程中,要变换通讯的属性?是什么原因?

lanyeyu 2004-05-04
  • 打赏
  • 举报
回复
谢谢楼上两位:)

回文君:通信过程中需要更改通信属性的原因引用如下:

“我们要进行单片机的多机通讯,可以使用奇偶校验位来模拟设置数据帧中的第9位。因为Settings中的“P”可以设为5种值:E(偶校验),M(标记),N(无校验),O(奇校验),S(空格),一般PC机作为多机通讯系统的命令发起者,只需要模拟实现多机通讯地址位bit8的发送,而不需要考虑该位的接收,这样我们可以使用奇校验(O)或偶校验(E)来模拟设置数据帧中的第9位,我们只要使用校验位是1的数值作为地址帧,而校验位是0的数值作为数据帧,这样能使用的从机地址有限,只有128个,而且数据位(控制指令)也有限,且不能和地址码重复,所以这种方法只适用于从机个数少,控制指令少的情况。使用这种方法的好处是在程序中不用变换MSCOMM控件属性的设置。”

所以需要更改奇偶位,以求使单片机判定发送的是地址码还是数据码。可是我还有一点不明白的是,上文最后一句说明“不用变换MSCOMM控件属性的设置”,但按照两位提供的方法却是已将其SETTING属性更改。有没有更简便的方法把奇偶位从“0”改成“1”呢?我听说VC中使用MSCOMM的话,是有一个办法可以直接将奇偶位置1或置0,而不需要重新设定SETTING的。请问VB里有没有这个功能呢?

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧