在WIN2000,NT下的串口通信问题?100分(100分)

  • 主题发起人 主题发起人 tsq0715
  • 开始时间 开始时间
T

tsq0715

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
Win2000,NT下的串口通信怎样写?????!!!!
我在win98下用的几种方法都不得不能用:
1:直接写端口函数//读端口字节 参数:端口地址 返回:端口字节数据
function PortReadByte(Addr:Word) : Byte;
assembler;
register;
asm
MOV DX,AX
IN AL,DX
end;

//读端口字 参数:端口地址 返回:端口字数据
function PortReadWord(Addr:Word) : Word;
assembler;
register;
asm
MOV DX,AX
IN AX,DX
end;
2:写文件方式//串行口初始化
function comminitialize(port:word;baud:word):boolean;
var
lpdcb:Tdcb;
m_COMMTIMEOUTS:TCOMMTIMEOUTS;
begin
OKbaud := baud;
OKPort := port;
if port=0 then
begin
hcom := createfile('com1',
generic_read or generic_write,
0,
nil,
open_existing,
file_attribute_normal or file_flag_overlapped,
0);//打开串行口
end
else
begin
hcom := createfile('com2',
generic_read or generic_write,
0,
nil,
open_existing,
file_attribute_normal or file_flag_overlapped,
0);//打开串行口
end;
if hcom=invalid_handle_value then
begin
Result := true;
exit;
end
else
begin
setupcomm(hcom,4096,4096);
//设置输入,输出缓冲区皆为4096字节
getcommstate(hcom,lpdcb);
//获取串行口当前默认设置
lpdcb.baudrate := baud;
lpdcb.StopBits := 2;
lpdcb.ByteSize := 8;
lpdcb.Parity := EvenParity;
//偶校验
Setcommstate(hcom,lpdcb);
m_COMMTIMEOUTS.ReadIntervalTimeout := 30;
m_COMMTIMEOUTS.ReadTotalTimeoutMultiplier := 10;
m_COMMTIMEOUTS.ReadTotalTimeoutConstant := 10;
m_COMMTIMEOUTS.WriteTotalTimeoutMultiplier := 10;
m_COMMTIMEOUTS.WriteTotalTimeoutConstant := 10;
SetCommTimeouts(hcom,m_COMMTIMEOUTS);
end;
Result := true;
end;
3:用ActiveX控件,MSComm 和 SpComm
这三种方法都不能在Win2000,NT下运行,请问还有其它的方法吗,帮帮忙,急!!!
谢谢
我的E_Mail: Tim_Tian@163.com
 
SPComm是可以在2000下用的。。。
 
只有1确实不行
3不行是因为遇到了和2一样的情况
2不行是因为nt/2000的多线程接口不一样,该一下就好
 
cport,spcomm都可以用在nt
 
spcomm的确可以的。
至于第二种方法,你可以买本《delphi串口通信编程》看看
 
我已经解决了,谢谢大家
 
帮帮忙,CPORT2.63控件如何能接收十六进制数据,我现在能发十六进制数据,
但接收到的是字符串,我现在需要源码或例程,如果能帮我解决问题,要多少分都可以
EMAIL:E18@163.com
QQ:80215521
---东方龙
 
字符串和16进制可以互相转换的呀,用以下语句将STRING转换成16进制:
var
HEXDATA:ARRAY[1..128] OF BYTE ;
begin
for i:=1 to length(Str)do
HEXDATA:=byte(str)
end;
 
在ComPort的Examples目录下有一个叫做CportMonitor.pas的文件,添加Component就可以了
 
后退
顶部