程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Win32下的幾種串口通信編程

Win32下的幾種串口通信編程

編輯:關於C++

要完成串口通信, 在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來實現:

這不是一下子能說得清的, 如果要做, 當然要找本書了.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved