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
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