如何讀取乙個串列埠

2021-10-11 10:15:01 字數 1965 閱讀 9932

網上有很多關於上位機的介紹,但是很少有關於具體如何讀取乙個串列埠的介紹,在經過反覆查詢後。將關於如何讀取乙個串列埠的零零碎碎知識整理為乙個簡單的流程。

首先,串列埠在電腦中被定義為乙個檔案,這個檔案被windows系統管理,我們的程式無法直接進入系統對串列埠進行操作,但是我們可以借助api函式訪問。

api返回資訊時,為了通用性,通常會返回乙個叫做控制代碼的編碼。控制代碼即編碼,用來辨識串列埠。它簡單,通用性廣。

所以開啟乙個串列埠的第一步:

定義乙個控制代碼

handle hcom1;
第二步:呼叫api函式將控制代碼指向串列埠

hcom1 = createfile(_t("com8"),//com1口

generic_read | generic_write,//允許讀和寫

0,//獨佔方式

null,

open_existing,//開啟而不是建立

0,//同步方式

null);

if (hcom1 == (handle)-1)

else

其中定義了對串列埠的許可權,開啟串列埠的方式等。

第三步:設定串列埠的引數:

這時我們用乙個dcb的結構體為串列埠建模,將串列埠的所有資訊存入其中,這樣在交給windows作業系統時,可以把dcb交給windows。

其中我們需要設定

1、波特率

2、奇偶校驗位

3、停止位//用於時鐘同步的糾正

4、每個位元組有多少位

……

dcb dcb1;//乙個串列埠結構體

getcommstate(hcom1, &dcb1);

dcb1.baudrate = 115200;//波特率為9600

dcb1.bytesize = 8;//每個位元組有8位

dcb1.parity = noparity;//無奇偶校驗位

dcb1.stopbits = twostopbits;//兩個停止位

= false;

= false;

setcommstate(hcom1, &dcb1);

commtimeouts timeouts;

//設定讀超時,最長的等待時間

timeouts.readintervaltimeout = 1000;

timeouts.readtotaltimeoutmultiplier = 500;

timeouts.readtotaltimeoutconstant = 5000;

//設定寫超時

timeouts.writetotaltimeoutmultiplier = 500;

timeouts.writetotaltimeoutconstant = 2000;

setcommtimeouts(hcom1, &timeouts);//設定超時

第五步:我們還需要設定快取區

setupcomm(hcom1, 20480, 20480);//輸入緩衝區和輸出緩衝區的大小都是1024
第六步:清空快取區:

purgecomm(hcom1, purge_txclear | purge_rxclear);//清空緩衝區
第七步:讀寫資料

跟檔案讀取類似

while (1)//不斷讀取資料

file* fp1;

fp1 = fopen("串列埠傳送的數.txt", "a+");//新建乙個文字,將資料儲存在其中

int i = 0;

for (i = 0; i < wcount; i++)

fclose(fp1);

}

最後關閉串列埠:

closehandle(hcom1);
至此乙個讀取串列埠的操作就完全完成了!

如何用scanf讀取乙個句子

因此有下面兩種方法可以在使用scanf時完整輸入字串 1 利用strcat 函式來實現帶空格字串的輸入,可以用字串追加函式strcat 來連線每個單詞。strcat 一般格式 char strcat char dest,const char src 函式將字串src連線到dest的尾端,並返回字串d...

C 多窗體如何共用乙個串列埠

多窗體如何共用乙個串列埠 a 不要使用控制項,要自己定義乙個 只要在主窗體中呼叫即可。關鍵部分是接收函式的處理。scanning gun com info.serialport scanning.datareceived new serialdatareceivedeventhandler port...

LINUX讀取乙個目錄

使用的函式 gnu命令列處理函式getopt getopt long opendir readdir closedir 熟悉gnu命令列處理函式,以及linux目錄函式。include include include include include define err quit printf de...