使用Visual C 進行串列埠通訊程式設計 一

2021-05-02 12:40:11 字數 3246 閱讀 5065

http://www.cppblog.com/lee7/archive/2008/01/08/40685.html 利用

visual c

++在windows

環境下設計非同步序列通訊程式可以使用不同的方法。一種方法可以使用

windows

系統提供的序列口

api函式;另一種方法可以直接使用

microsoft

公司提供的

activex

控制項mscomm.ocx

。利用mscomm.ocx

控制項進行序列口程式設計相對比較簡單,只要對該控制項的屬性、事件和方法進行設定和操作,就能完成簡單的序列通訊功能。而直接使用

windows

系統提供的序列口

api函式則相對較為靈活。試驗中,可根據自己的情況任意其中一種進行程式設計。以下針對如何使用

windows

系統提供的序列口

api函式進行程式設計做簡要介紹

在windows

系統,序列口和其它通訊裝置都是作為檔案進行處理的。序列口的開啟、關閉、傳送和接收所用的函式都與操作檔案的函式相同。總體來說,利用

visual c

++進行非同步序列通訊程式設計通常可以分為

4個大階段,它們是序列口開啟階段、序列口狀態值讀取和屬性設定階段、序列資料的傳送與接收階段,以及序列口關閉階段。

(1)開啟序列口

在對序列口進行所有的操作之前,首先要將其開啟。序列口的開啟可以使用

createfile

函式,createfile

函式將返回乙個控制代碼,在隨後與該序列口相關的各種操作中使用。與檔案操作相同,在利用

createfile

開啟序列口時,也可以將序列口指定為「讀訪問許可權」、「寫訪問許可權」或「讀寫訪問許可權」。

handle createfile(

lpctstrlpfilename

dworddwdesiredaccess

dworddwsharedmode

lpsecurity_attributeslpsecurityattributes

dworddwcreationdisposition

dworddwflagsandattributes

handlehtemplatefile )

; 在呼叫成功時,

createfile

返回開啟檔案的控制代碼,該控制代碼將在以後與該串列埠相關的各個呼叫函式中使用。如果呼叫失敗,則

createfile

返回invalid_handle_value。

(2)序列口的狀態讀取和屬性設定

一旦將串列埠開啟,就可以對該串列埠的屬性進行設定。由於串列埠的屬性非常複雜,因此通常採用讀取該串列埠當前狀態值,然後在此基礎上進行修改的方法。

n獲取序列口當前狀態

windows

系統使用

getcommstate

函式獲取序列口的當前配置,

getcommstate

的宣告如下:

boolgetcommstate(

handle hfile

lpdcblpdcb );

getcommstate

函式的第乙個引數

hfile

是由createfile

函式返回指向已開啟序列口的控制代碼。第二個引數指向裝置控制塊

dcb。

dcb是乙個非常重要的資料結構,幾乎所有的序列口屬性和狀態都儲存在該結構的成員變數中。 n

對串列埠進行設定

windows

系統利用

setcommstate

函式修改序列口的當前引數配置。

setcommstate

函式宣告如下:

boolsetcommstate(

handle hfile

lpdcblpdcb );

getcommstate

函式的第乙個引數

hfile

是由createfile

函式返回指向已開啟序列口的控制代碼。第二個引數指向裝置控制塊

dcb。如果函式呼叫成功,則返回值為非

0;若函式呼叫失敗,則返回值為

0。當應用程式僅僅需要修改一部分序列口的配置值時,可以通過

getcommstate

函式獲得當前的

dcb結構,然後更改引數,再呼叫

setcommstate

函式設定修改過的

dcb來配置序列口。 n

為串列埠分配接收和傳送緩衝區

當乙個序列口開啟時,可以為該串列埠分配乙個傳送緩衝區和乙個接收緩衝區。序列口傳送緩衝區和接收緩衝區的配置可以由函式

setupcomm

實現。如果不呼叫

setupcomm

,系統會為該串列埠分配預設的傳送緩衝區和接收緩衝區。但是為了保證緩衝區的大小與實際需要的一致,最好呼叫該函式進行設定。

setupcomm

函式原型如下:

boolsetupcomm(

handle hfile

dword dwinqueue

dword dwoutqueue );

其中hfile

是由createfile

函式返回指向已開啟序列口的控制代碼。引數

dwinqueue

和dwoutqueue

分別指定應用程式推薦使用的接收緩衝區和傳送緩衝區的大小。 n

清空接收和傳送緩衝區

在進行串列埠所有的傳送和接收資料操作之前,最好使用

purgecomm

函式將序列口傳送緩衝區和接收緩衝區中的資料清楚乾淨。

purgecomm

函式原型如下:

boolpurgecomm(

handlehfile

dworddwflages );

引數hfile

是由createfile

函式返回指向已開啟序列口的控制代碼,引數

dwflags

指明執行的動作。如果

dwflags

為purge_txclear

,則通知系統清空傳送緩衝區;如果

dwflags

為purge_rxclear

,則通知系統清空接收緩衝區;如果需要將傳送緩衝區和接收緩衝區全部清空,可以把

dwflags

設定為purge_txclear|purge_rxclear

。如果purgecomm

函式呼叫成功,則返回值為非

0;若函式呼叫失敗,則返回值為0。

使用Visual C 進行串列埠通訊程式設計 續

3 序列資料的傳送和接收 與普通的檔案操作相同,在對序列口進行操作時,通常利用 readfile 函式讀取序列口收到的資料,利用 writefile 將需要傳送的資料寫如序列口。n 序列資料的接收 利用 readfile 函式可以讀取將序列口接收到的資料。readfile 函式原型如下 boolre...

使用TCP 串列埠與板子進行網路通訊

最近做了乙個嵌入式的project,大概要求就是做乙個client端,乙個sensor端,兩者通過tcp udp進行通訊,然後在client端輸入不同的命令sensor需做出不同的處理,此處理可以用模擬的方法進行,比如要做乙個溫度感測器,則可以在sensor裡寫個隨機數生成器,最後將client的c...

串列埠通訊 串列埠通訊原理

1 rs232介面 rs232 c介面聯結器一般使用型號為db 9的9芯插頭座,只需3條介面線,即 傳送資料 接收資料 和 訊號地 即可傳輸資料,其9個引腳的定義如圖11 3所示。圖11 3 rs232 c介面聯結器定義 在rs232的規範中,電壓值在 3v 15v 一般使用 6v 稱為 0 或 o...