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...