網上有很多關於上位機的介紹,但是很少有關於具體如何讀取乙個串列埠的介紹,在經過反覆查詢後。將關於如何讀取乙個串列埠的零零碎碎知識整理為乙個簡單的流程。
首先,串列埠在電腦中被定義為乙個檔案,這個檔案被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...