用CreateFile等实现对一个串口的发送、接收数据。(198分)

  • 主题发起人 主题发起人 skyjacker
  • 开始时间 开始时间
S

skyjacker

Unregistered / Unconfirmed
GUEST, unregistred user!
用CreateFile实现对一个串口的发送、接收数据。平台WinXp.

我要编写如下功能的通讯程序:
只对一个串口操作,操作过程是
打开串口--〉发送数据-->接收数据-->...--〉再发送数据-->再接收数据--〉关闭串口。
如此循环。
或者一直打开串口,收发数据。

请问用api函数怎样实现此功能。

对一个串口收发数据,收发是不是不能同时进行?

数据发送出去了,如何接收发送过来的数据?

可否给个代码例子,实现收发?谢谢!
 
Email: hmctL@163.com
谢谢!
 
邮件已发,注意查收!
 
发送的发送,接收的接收,不相干;
 
hCOMHandle:=CreateFile(pchar('com1/.../comN'),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
操作串口句柄 创建操作 串口操作字符串 以读或写方式操作 打开以存在的
hCOMHandle=INVALID_HANDLE_VALUE (=dword(-1)) 表示串口打开错误
Setupcomm(串口句柄,输入缓冲区,输出缓冲区)
GetCommState(串口句柄,Tdcb 结构) 取串口当前设置
TDCB结构.BaudRate 传输速流
TDCB结构.ByteSize 字节
TDCB结构.Parity 奇偶
SetCommState(串口句柄,Tdcb 结构) 设置串口
Write 向端口写入字节流
 Read 读串口字节流
 
var F:TextFile;
begin
AssignFile(F, 'COM1');
Rewrite(F);
write(F,'');
CloseFile(F);
end;
 
前段时间我自己写了个串口通讯类。
呵呵,问题多多,最后研究了好几天spcom原代码才算把几个已经发现的问题解决。
老兄,多看看别人写的经典代码。
要不然很多莫名其妙的问题会搞死自己。
比如一个读串口要用API函数readfile。不注意会有一大堆的问题。
另外龚建伟老师有本书,很详细的介绍了串口操作,不过是C++语言的。叫什么书名忘记了。
 
谢谢大家。

想用api函数做,主要有以下两个原因:
1、选择mscomm32.ocx.
程序写好后,客户自己安装比较麻烦。
只是使用 regsvr32 还不行,还要在 注册表中的licenses 添加项。
不知道有没有对客户友好的安装办法?
实用nsis安装制作不知道能不能实现?

2、选择spcomm.
感觉spcomm不是很稳定.
一个是打开串口号〉=10的串口,需要加//./COMn

另外测试过程中,如果用mscomm遍的程序初始化了com口,
则用spcomm编的程序就初始化不了
串口连接的modem了,也就是说发送AT&F0不成功,延时也不行。
除非给modem重新上下电。

即使不用mscomm初始化com口,spcomm也经常需要给modem重新上下电才能初始化modem.
不知道是不是别的原因引起的?
 
多人接受答案了。
 
后退
顶部