Win32下的几种串口通信编程

2016-02-19 12:40 90 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的Win32下的几种串口通信编程懂设计的网友们快点来了解吧!

【 tulaoshi.com - 编程语言 】


  ---- 要完成串口通信, 在32位模式下, 一般说来有以下四种方法:
  
  ---- 1. 以文件方式打开串口:
  
  ---- 这里使用的是Win32 API 函数, 所以无论在BCB或VC下都可以实现. 具体的函数的意义可以参考Win32 API 的帮助.这里有一个易于使用的BCB下的类, 可以方便的使用串口.
  
  ---- 下面给出简要说明:
  
  ---- (1) 应用CreateFile() 来初始化串口
  
  
     FhFileComm=CreateFile(
         FCommName.c_str(),
         GENERIC_READ GENERIC_WR99vE,
         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来实现:
  
  ---- 这不是一下子能说得清的, 假如要做, 当然要找本书了.
  
  

来源:https://www.tulaoshi.com/n/20160219/1601461.html

延伸阅读
环境变量设置:单击桌面我的电脑右键属性-高级-环境变量-双击Path项,添加C:MySQL5.1.40bin目录,如果要使用SDK开发,则要添加Lib和include目录到对应的Lib和include环境变量中; 环境变量设好,在开始菜单-运行-CMD,执行MySQLD,或是直接切换到C:MySQL5.1.40bin目录双击运行MySQLD.exe服务程序,也可以服务的形式运行: 注意mysql安装目录不要...
标签: windows
删除软件 你下载的软件不兼容或错误所造成的。你下载的软件为64位,不支持在32位的系统上运行。 重新下载软件 你下载的软件在下载途中损坏。此问题,是由于软件错误或不兼容所造成的,一般在换系统的时候都会这样。不管是XP还是WIN7,都容易出错。其他软件即使换了系统,不重新安装照常能用。要重装的,也会提示说重装,只有个别软件...
1-在C++ Builder 6.0下基于api函数编写串口通信程序简介: 在dos/win95/win98的年代,操作系统对串口是不保护的,也就是说将串口的的资源完全开放给用户,用户可以用直接操作硬件的函数(比如说TC2.0下的inport()和outport()函数)跟串口直接打交道,这时候用户使用直接操作串口的函数怎样"折磨"串口都是没有问题的,操作系统...
众 所 周 知, 在Windows95/98 的Win32 on Intel x86 体 系 中 利 用 了 处 理 器 的 三 环 保 护 模 型 中 的 零 环(Ring0, 最 高 权 限 级 别) 和 三 环(Ring3, 最 低 权 限 级 别)。 一 般 应 用 程 序 都 运 行 在Ring3 下, 受 到 严 格 的" 保 护", 只 能 规 矩 地 使 用Win32API。 如 果 我 们 想 进 行 一 些 系 ...
CNTService 类 当我创建 C++ 对象封装 Windows 函数时,我尝试为我封装的每个 Windows API 除了创建成员函数外,还做一些别的工作,我尝试让对象更容易使用,降低实现特定项目所需的代码行数。因此我的对象是基于我想让这个对象做什么?而不是Windows 用这些 APIs 做什么? CNTService 类包含一些用来解析命令行的成员函数,为了处理服...

经验教程

872

收藏

79
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部