RoyalGao

要像一棵树栽在溪水旁,按时侯结果子,叶子也不枯干(诗篇)。
Mail: gaoquanning@163.com

导航

串口通信——方法简介

转自网址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来实现:

---- 这不是一下子能说得清的, 如果要做, 当然要找本书了.

posted on 2014-01-23 05:53  RoyalGao  阅读(697)  评论(0编辑  收藏  举报