N NewHuman Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #1 因为串行通信中我们定义的帧格式是:1位起始位+8位数据+1位附加数据位+1位停止位, 似乎按字节传送是不可的,我是个串行通信的新手,肯请各位大侠帮忙,时间紧急!!!
P plwei Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #2 我做过一个用spcomm传输文件的不程序,不知你要实现什么功能?
N NewHuman Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #3 目前只是为了完成一个串口设备的测试,由于本人目前是个串口新手还请楼上的兄弟多多帮忙!
N netfool Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #4 mscomm 按字节传送使用的变量类型是: OleVariant 可以用数组的方式搞定, 每一个数组元素是一个Byte 接收时: RThreshold = 你们规定的接收字节数 这是一些最基本的啦, 不过已经可以满足你的问题啦! 具体参考msdn
mscomm 按字节传送使用的变量类型是: OleVariant 可以用数组的方式搞定, 每一个数组元素是一个Byte 接收时: RThreshold = 你们规定的接收字节数 这是一些最基本的啦, 不过已经可以满足你的问题啦! 具体参考msdn
N NewHuman Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #5 发送数据是怎样才能体现出哪个附加数据位呢?我真的很菜。 还有,我用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; 为什么串口没有电平变化呢?
发送数据是怎样才能体现出哪个附加数据位呢?我真的很菜。 还有,我用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; 为什么串口没有电平变化呢?
B Bxch_1000 Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #6 这样写试试 var SendStr: string; begin SendStr:=Chr($f0)+Chr($01)+Chr($ff)+Chr($ff)+Chr($01)+Chr($0f); Comm.WriteCommData(PChar(SendStr),Length(SendStr)); 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;
R readxlp Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #8 我有个串口测试工具,先用那个发进行测试,成功则程序有问题,不成则单片机有有问题,要不要发给你?
C cook Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #9 你的那个 “1位附加数据位” 是个什么东西 说具体一点 可能实现起来有点困难
K Kang Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #10 那个附加数据位就是校验位, 你只要指定了校验方式不是无校验就可以了,至于正确的校验方式就看你的了
C cook Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #11 楼上说的效验位是奇偶校验位吧, 这一位是传输的时候根据数据自动加上去的,不能控制0还是1的 他说的是附加数据位,看样子是有用的,可以指定是0还是1的
K Kang Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-27 #12 串口通信标准格式是 始位,数据位,校验位,停止位 所谓的附加数据位,编程位实际都是通过校验位实现的,不可能在8位数据位的时候自己加上一位不是校验的附加位
N NewHuman Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-28 #13 多谢诸位大侠帮忙。 readxlp 我的Email:New_Human@hotmail.com cook:还有那个附加数据位是用来表示上位机向下位机开始传送数据,只有一个数据包 的第一帧的这个附加数据位是1,其它的为0。 所以我想这种情况是不是要按位进行传输。还有,在这之前我按字节传输也没有成功 那位大侠可否给个成功的例子,多谢了!
多谢诸位大侠帮忙。 readxlp 我的Email:New_Human@hotmail.com cook:还有那个附加数据位是用来表示上位机向下位机开始传送数据,只有一个数据包 的第一帧的这个附加数据位是1,其它的为0。 所以我想这种情况是不是要按位进行传输。还有,在这之前我按字节传输也没有成功 那位大侠可否给个成功的例子,多谢了!
C cook Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-29 #14 你说的这个不是数据的附加位,应该是报文中的一个字节,不是一个位。 你们的规约里面应该有一个表示报文桢数的字节。 你说的按字节传输没有成功是什么意思?
光 光芒 Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-29 #15 SPCOMM很好用,你没必要监视串口电平的变化,找一个九针插头把2,3短接后插在PC机上, 在程序中加入接收程序看有没有收到就可以了。至于校验位你将需要计算的字节求和后变成 字符串取后两位然后在变成数据发送就可以了。在BBS上有相关的帖子,你可以找一些。 可以把程序发过来帮你看看。 JIANZH@XJGC.COM
SPCOMM很好用,你没必要监视串口电平的变化,找一个九针插头把2,3短接后插在PC机上, 在程序中加入接收程序看有没有收到就可以了。至于校验位你将需要计算的字节求和后变成 字符串取后两位然后在变成数据发送就可以了。在BBS上有相关的帖子,你可以找一些。 可以把程序发过来帮你看看。 JIANZH@XJGC.COM
B Bxch_1000 Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-29 #16 11位传输,如用spcomm把Parity属性设置为Space就可以了,其他没区别
S SupermanTm Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-04 #17 PC的串行口好象不能完全支持11位的,它的第9位只能作奇偶校验位的, 这好象是8250/16550的问题
L LiChaoHui Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-09 #19 你说的是地层的东西,编写串口通信程序时不必理会这些 只要双方的串口设置一致,便可以发送字节数据流 只不过需要自己来进行可靠性验证