程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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_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來實現:
  
   ---- 這不是一下子能說得清的, 假如要做, 當然要找本書了.
  
  
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved