精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>硬件、外设相关>>串口专题>>转载:Win32下的几种串口通信编程

主题:转载:Win32下的几种串口通信编程
发信人: tsingxiao()
整理人: wenbobo(2002-12-06 23:15:54), 站内信件

---- 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必须用小写,(其余可以为大写)寄存器
名称
大小写都可以)

---- 其它的如写多个字节,读多个字节, 同样可以实现.

--

  既不能达而兼善天下
                    只好穷而独善自身
  青山处处  斯民如土矣……

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.253.41]

[关闭][返回]