spcomm问题,急,在线等~(50分)

  • 主题发起人 主题发起人 cugb_huan
  • 开始时间 开始时间
C

cugb_huan

Unregistered / Unconfirmed
GUEST, unregistred user!
spcomm控件里,我先把Parity设为mark,Paritycheck设为true
在传送第一个数据的时候,效验位应该为mark,传送也没问题
但是为什么当我传送第二个数据的时候,效验位我想设定为space,我用了comm1.Parity:=space;但是根据观察,效验位根本没改变呢?
我把串口在发送第一个数据以后关了然后再打开也不能解决这个问题.
 
你是怎么观察出校验位没改变的?
 
如果我的奇偶位有变化的话,那么单片机就可以接受到数据位.但是事实上是没有.
我用串口调试工具手动改变效验位,单片机的使用就正常了,可见问题出在上位机.
 
1、在SPCOMM中先关闭串口再改校验位再打开试试。
2、如果这样还不行,你也没用错的话,那这个控件有问题,换个控件吧。
3、用API函数可以直接换校验位。

var
uDCB: DCB;
begin
try
Fm_iParity := Parity;
if Enable then
begin
uDCB.DCBlength := SizeOf(DCB);
GetCommState(Com_handle, uDCB);//Com_handle 是串口句柄
uDCB.Parity := CommParity[Fm_iParity];

if not SetCommState(Fm_handle, uDCB) then
Abort;
end;
except
raise
end;
 
关串口改效验位再开,这个方法的确可以,谢谢了.
能把你的QQ给我吗?或者邮箱,我有一些问题想请教你.
 
后退
顶部