转自网址http://blog.csdn.net/henhen2002/article/details/4485159
---- 要完成串口通信, 在32位模式下, 一般说来有以下四种方法:
---- 1.
以文件方式打开串口:
---- 这里使用的是Win32
API 函数, 所以无论在BCB或VC下都可以实现. 具体的函数的
意义可以参考Win32 API
的帮助.这里有一个易于使用的BCB下的类, 可以方便的使用串
口.
----
下面给出简要说明:
---- (1) 应用CreateFile()
来初始化串口
FhFileComm=CreateFile( FCommName.c_str(),
GENERIC_READ
| GENERIC_WRITE,
0, // exclusive
access
&lpSecurity,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL
|
FILE_FLAG_OVERLAPPED, // overlapped
I/O
NULL );
if( FhFileComm ==
INVALID_HANDLE_VALUE)
return false
(2) 应用WriteFile() 和
ReadFile() 从串口读写数据
bool MyComm::WriteBuffer(unsigned
char*buffer,unsigned
long length)
{
return
WriteFile(FhFileComm,buffer,
length,&length,&FgOverLapped);
}
bool MyComm::ReadBuffer(unsigned
char*buffer,unsigned
long length)
{
return
ReadFile(FhFileComm,buffer,
length,&length,&FgOverLapped);
}
相应的源文件为 UsageComm.cpp UsageComm.h
---- 2.
使用现成的控件:
---- 易于使用的是微软的MS
Communication 控件, 它是做为一个 .ocx 提供的.
---- 在BCB
中可以用Import ActiveX
Control 将它加入到BCB 中, 缺省是加载在
ActiveX 页中. 就可以作为一个普通的BCB
控件来使用了.(也有不少第三方提供的其它
硬件操作控件)
---- 3.
直接嵌入汇编法:
---- (该方法不能在NT下使用, 由于98的非完全保护,
下面的代码可以使用)利用BCB的
直接嵌入汇编功能,
可以在BCB中直接对串口操作.
----
如下所示,在BCB中使用汇编代码如下
byte __fastcall ReadByte(WORD
Address)
// eax
:address
{
asm
mov
DX,AX
in
AL,DX
}
}
void __fastcall
WriteByte
(unsigned char byte, WORD Address)
//
EAX: BYTE EDX:
ADDRESS
{
asm
out
DX,AL
}
}
----
这里必须用__fastcall 调用约定以使在调用该函数时用寄存器传递参数.
---- (用在BCB中的汇编指令代码in
和out必须用小写,(其余可以为大写)寄存器名称
大小写都可以)
----
其它的如写多个字节,读多个字节, 同样可以实现.
---- 4.
最困难的要数用VxD来实现:
---- 这不是一下子能说得清的, 如果要做,
当然要找本书了.
原文:http://www.cnblogs.com/gaoquanning/p/3530594.html