zoukankan      html  css  js  c++  java
  • 串口通信——方法简介

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

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

  • 相关阅读:
    Python 处理时间的模块
    C# 委托在线程与UI界面之间的应用
    C# 自己动手实现Spy++(二)
    C# 自己动手实现Spy++(一)
    VS2008自定义快捷键设置
    C#深入解析委托——C#中为什么要引入委托
    C# 线程 在 sleep,suspend 之后 Abort 的方法
    C#多线程学习笔记之(abort与join配合使用)
    使用命名管道的OVERLAPPED方式实现非阻塞模式编程 .
    C++和C#进程之间通过命名管道通信(上)
  • 原文地址:https://www.cnblogs.com/gaoquanning/p/3530594.html
Copyright © 2011-2022 走看看