2.2 调用Windows95下的API函数
Windows95对通信功能的支持非常强,它增加了一系列用于通信的API函数供用户调用。同样
,要进行串行通信,也需要先对串口进行初始化。Windows95把串行口作为设备文件,对串
口操作就是对文件操作。因此,必须先为串口分配1个文件句柄,以后对串口操作都将通过
这个文件句柄来完成。初始化过程如下:
(1)调用CreateFile函数为串口分配1个文件句柄。
Var
HComm:THandle;
HComm:=CreateFile(‘COM2',GENERICREAD or GENERICWRITE
,0,@NULL,OPENEXISTING,FILEFLAGOVERLAPPED,0);
如果对串行口1操作,用字符串COM1代替COM2即可。
(2)调用SetupComm函数设置串行口的输入和输出缓存区。
SetupComm(HComm,1024,1024);
(3)填充1个DCB(设备控制块)结构来设置通信参数。通过调用GetCommState函数
获得当前系统的DCB结构,按需要赋值给DCB的成员,如波特率、奇偶校验、数据位、停止位
等,最后将创建后的DCB结构作为参数传给SetCommState函数就可以初始化串口了。
Var
DCB:TDCB;
GetCommState(HComm,DCB);
BuildCommDCB(‘9600,N,8,1',DCB);
SetCommState(HComm,DCB);
(4)用PurgeComm函数来清除接收缓存区的内容。
PurgeComm(HComm,PurgeRXCLEAR);
(5)串行口的初始化完成后,接下来的工作就是根据通信协议发送和接收串行口上的数据。R
eadFile函数用于接收数据,WriteFile函数用于发送数据。
Var
OverLapped:TOverLapped;
DataIn:Byte;
DataOut:Byte;
BufferSize:Integer;
COMSTAT
cs;
ReadFile(HComm,DataIn,cs.cbInQue,BufferSize,@OverLapped);
{从串行口读输入缓存的字节,存入DataIn变量中}
WriteFile(HComm,DataOut,cs.cbOutQue,BufferSize,@OverLapped);
{向串行口写输出缓存的字节,要写的数据存放在DataOut}
按照上述步骤,再根据前面的通信协议,即可完成串行通信。