mscomm控件如何发送字节的第九位?(100分)

  • 主题发起人 主题发起人 tsucol
  • 开始时间 开始时间
T

tsucol

Unregistered / Unconfirmed
GUEST, unregistred user!
在与单片机通讯中,单片机部分是这样设计的sm0,sm1工作在方式3,因此可发送第9位,
我将mscomm1.setting:='9600,n,8,1'和'9600,m,8,1',单片机都能正确接收,但它发
送给我数据的时候,我发现接受位数和数据都不对,而且有时候不停的发,收到的数据
也忽长忽短(单片机固定发给我9位),我使用的是RS232转485通讯,
我以前编写和发送8位数据的单片机通讯没有问题。
 
天啊,为什么没有人来帮帮我啊,是不是题目没有说清楚啊?
单片机部分是为了实现多机通讯,所以sm0,sm1要设为工作在方式3,这样每发送一个字节
就会发送9bit,而不是8bit,问题就出现了,我用mscomm控件和它通讯时,发现它能正确
接收,但是当它发给我9个byte(data)时候,我发现数据不对,有时候是收到9个byte,有时
候收到14个byte,甚至别的更多,而且我将parity位设为m,n,s,都试验过了.
我以前编写单片机工作在正常情况(1byte=8bit)时没有出现这样啊!
 
你换一个控件试试看,
记得曾做过没有这个问题,不过不记得用什么控件了。
 
goodfox2002:能不能说清楚点,我想知道什么地方需要特别注意的,我试过mscomm,
和spcomm好象不行的。
还有我想知道,parity设为m时,它指什么地方为1?
 
确实时间比较久了,并且现在手头也没有comm控件,
也没有带rs232的控制板。随便说说,不知道对你有没有帮助?
将Parity设置为不做奇偶校验位。这时它用来存接受或发送
的第九位。
还有mscomm1.setting:='9600,n,8,1'和'9600,m,8,1'?
好像不对吧???
 
我的确没有将parity不做奇偶校验位,但一直在想是设为m,还是n?
它还可以用来"接受"第九位?
现在关键是我将如何从单片机发给我的一串数据正确读出,我怀疑是因为读数错位所致,
我取数是使用二进制,该死的是,我对单片机具体发给我的是什么数不很精确,只是从
仪表读数上进行16进制转换,大概知道估计在什么数附近。
你说mscomm1.setting:='9600,n,8,1'和'9600,m,8,1'?指我忘了个s吗,平时delphi用惯
了,他能提示的,所以就忘记了的:)
非常感谢你能帮我!
 
帮帮我吧!如果分数不够我另外加分的。
 
刚上来,你不能让单片机发一个固定的数值吗?
那调试就难了,你看一下控件的demo和说明吧,
中间应该有parity和具体波特率等的设定说明。
要不你把控件发过来。goodfox@wz163.com
 
同样的问题我也不会,等我知道了一定告诉你
 
我知道用spcomm怎么实现多机通信了,不过我没用过mscomm.
 

Similar threads

D
回复
0
查看
930
DelphiTeacher的专栏
D
D
回复
0
查看
871
DelphiTeacher的专栏
D
后退
顶部