快速业务通道

Win32下的几种串口通信编程

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

要完成串口通信, 在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.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号