串口读写问题: 自编一串口读写程序,发现能够写入,却不能读出(50分)

  • 主题发起人 主题发起人 youth[dfw]
  • 开始时间 开始时间
Y

youth[dfw]

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道什么原因,如何解决

谢谢
 
????
 
串口与什么设备相连?你如何知道能够写入?
 
procedure TForm1.Button1Click(Sender: TObject);
var
cc:TCommConfig;
Temp:string;
begin
Temp:='COM' + inttostr(rdcom.ItemIndex + 1); //选择要打开的通信端口
hComm:=CreateFile(PChar(Temp),GENERIC_READ OR GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0); //打开通信端口
if (hComm = INVALID_HANDLE_VALUE) then
begin
messagebox(0,'打开通信端口错误!!','',MB_OK); //如果通信端口未打开
exit;
end
else messagebox(0,'通信端口已打开!!','',MB_OK);

GetCommState(hComm,cc.dcb); //得知目前通信端口的状态
cc.dcb.BaudRate:=CBR_9600; //设置波特率为9600
cc.dcb.ByteSize:=8; //字节为8位
cc.dcb.Parity:=NOPARITY; //parity为none
cc.dcb.StopBits:=onestopbit; //1个停止位

if not SetCommState(hComm,cc.dcb) then //设置通信端口的状态
begin
messagebox(0,'通信端口设置错误!!','',MB_OK);
CloseHandle(hComm);
exit;
end
else messagebox(0,'通信端口设置正确无误!!','',MB_OK);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//建立线程对象,并且激活执行
ReadThread:=Num_receive.Create(False);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
Temp:string;
lrc:LongWord;
begin
if (hComm=0) then exit; //检查handle的值
Temp:=msend.Text; //取得传送的字符串
//实际传送的动作
if WriteFile(hComm,PChar(Temp)^,Length(Temp),lrc,nil) then //送出数据
messagebox(0,'数据已送出!!','',MB_OK)
else messagebox(0,'数据未送出!!','',MB_OK);
end;
 
1、串口监视程序
2、调试

这两个方法都证实成功写入了串口,写入后,再读,却返回0
 
可能一、读串口部分程序有问题
可能二、握手协议
可能三、你能确定接收缓冲区里面有内容吗?
 
应该有的。

我先写进出,然后再读,写完后返回了被写入的字节数(预先定义的写入的字节数),
可立即读后返回的字节数缺为0
 
写缓冲区与接收缓冲区是分开的。
写是为了另一个与串口连接的设备读,读是接收另一个与串口连接的设备发送来的信息。
如果另一个与串口连接的设备没有发来的信息,则接收缓冲区里面就没有内容。
 
建议买个示波仪
我的桌子一直有示波仪
才800-900块钱
 
我也正在做一个有关串口的问题。给我发个MSCOMM控件,我帮你试试
bonmu@mail.baili.net
 
你的串口连起来了吗?
单机测试的时候,应该把2、3针连起来,才能实现单机测试。因为串口读写分别为2、3针
 
后退
顶部