高分求助串行通信中按位传输数据的具体方法(spcomm,mscomm均可),时间紧急!!(200分)

  • 主题发起人 主题发起人 NewHuman
  • 开始时间 开始时间
N

NewHuman

Unregistered / Unconfirmed
GUEST, unregistred user!
因为串行通信中我们定义的帧格式是:1位起始位+8位数据+1位附加数据位+1位停止位,
似乎按字节传送是不可的,我是个串行通信的新手,肯请各位大侠帮忙,时间紧急!!!
 
我做过一个用spcomm传输文件的不程序,不知你要实现什么功能?
 
目前只是为了完成一个串口设备的测试,由于本人目前是个串口新手还请楼上的兄弟多多帮忙!
 
mscomm
按字节传送使用的变量类型是: OleVariant
可以用数组的方式搞定, 每一个数组元素是一个Byte

接收时: RThreshold = 你们规定的接收字节数

这是一些最基本的啦, 不过已经可以满足你的问题啦!

具体参考msdn
 
发送数据是怎样才能体现出哪个附加数据位呢?我真的很菜。
还有,我用spcomm
sbuf[1]:=byte($f0);
sbuf[2]:=byte($01);
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($01);
sbuf[6]:=byte($0f);
SendData;{调用发送函数}

for i:=1 to 6 do
begin
if not Form1.Comm1.WriteCommData(@sbuf,1) then
begin
Break;
end;
Sleep(2); {发送时字节间的延时}
Viewstring:=ViewString+IntToHex(sbuf,2)+' ';
end;

为什么串口没有电平变化呢?
 
这样写试试

var
SendStr: string;
begin
SendStr:=Chr($f0)+Chr($01)+Chr($ff)+Chr($ff)+Chr($01)+Chr($0f);
Comm.WriteCommData(PChar(SendStr),Length(SendStr));
end;
 
QQ上找我,我帮你看看。584740
 
我有个串口测试工具,先用那个发进行测试,成功则程序有问题,不成则单片机有有问题,要不要发给你?
 
你的那个 “1位附加数据位” 是个什么东西
说具体一点
可能实现起来有点困难
 
那个附加数据位就是校验位,
你只要指定了校验方式不是无校验就可以了,至于正确的校验方式就看你的了
 
楼上说的效验位是奇偶校验位吧,
这一位是传输的时候根据数据自动加上去的,不能控制0还是1的
他说的是附加数据位,看样子是有用的,可以指定是0还是1的
 
串口通信标准格式是 始位,数据位,校验位,停止位
所谓的附加数据位,编程位实际都是通过校验位实现的,不可能在8位数据位的时候自己加上一位不是校验的附加位
 
多谢诸位大侠帮忙。
readxlp 我的Email:New_Human@hotmail.com
cook:还有那个附加数据位是用来表示上位机向下位机开始传送数据,只有一个数据包
的第一帧的这个附加数据位是1,其它的为0。
所以我想这种情况是不是要按位进行传输。还有,在这之前我按字节传输也没有成功
那位大侠可否给个成功的例子,多谢了!


 
你说的这个不是数据的附加位,应该是报文中的一个字节,不是一个位。
你们的规约里面应该有一个表示报文桢数的字节。
你说的按字节传输没有成功是什么意思?
 
SPCOMM很好用,你没必要监视串口电平的变化,找一个九针插头把2,3短接后插在PC机上,
在程序中加入接收程序看有没有收到就可以了。至于校验位你将需要计算的字节求和后变成
字符串取后两位然后在变成数据发送就可以了。在BBS上有相关的帖子,你可以找一些。
可以把程序发过来帮你看看。
JIANZH@XJGC.COM
 
11位传输,如用spcomm把Parity属性设置为Space就可以了,其他没区别
 
PC的串行口好象不能完全支持11位的,它的第9位只能作奇偶校验位的,
这好象是8250/16550的问题
 
你说的是地层的东西,编写串口通信程序时不必理会这些
只要双方的串口设置一致,便可以发送字节数据流
只不过需要自己来进行可靠性验证
 
正在做串口通讯。。学习学习!
 
后退
顶部