vc串列埠程式設計從實現方法上一般分為兩種,一種使用mscomm控制項,這種方法比較簡單,軟體的移植性較低,在這裡介紹一種串列埠封裝類的使用方法。
先看** commutils.cpp
#include "stdafx.h"
#include "commutils.h"
#include "stdio.h"
const
int read_timeout = 500;
commutils::commutils()
commutils::~commutils()
bool commutils::opencom(int port)
char szport[10];
sprintf(szport,"com%d",port);
int error=getlasterror();
if (hcomm == invalid_handle_value) return
false;
if (!setupcomm(hcomm, 1024, 512)) return
false;
commtimeouts commtimeouts;
commtimeouts.readintervaltimeout = maxdword;
commtimeouts.readtotaltimeoutconstant =0;
commtimeouts.readtotaltimeoutmultiplier =0;
commtimeouts.writetotaltimeoutconstant =0;
commtimeouts.writetotaltimeoutmultiplier=0;
if (!setcommtimeouts(hcomm, &commtimeouts)) return
false;
readovready.hevent = createevent(null,true,false,null);
writeovready.hevent =createevent(null,true,false,null);
security_attributes sa;
sa.nlength=sizeof(security_attributes);
sa.lpsecuritydescriptor=null;
sa.binherithandle=true;
dcb dcb;
getcommstate(hcomm, &dcb);
dcb.fbinary = true;
dcb.fparity = true;
// 波特率 資料位 標誌位 根據自己的裝置在此做修改
dcb.baudrate = cbr_9600; // baud rate 9600
dcb.bytesize = 8;
dcb.parity = noparity;
dcb.stopbits = onestopbit;
if (!setcommstate(hcomm, &dcb )) return
false;
bopencom = true;
return bopencom;
}bool commutils::writecom(unsigned
char *sendchar, int sendsize)
else
switch(resd)
default:
return
false;
break;}}
return
true;
}void commutils::closecom()
bool commutils::readcom(unsigned
char * receivedata, dword& receivelength)
/*bresult = readfile(port->m_hcomm, // handle to comm port
&rxbuff, // rx buffer pointer
1, // read one byte
&bytesread, // stores number of bytes read
&port->m_ov); // pointer to the m_ov structure
// deal with the error code */
if(receivelength == 0) return
false;
receivedata[receivelength] = 0;
dword dwread;
dword dwres = waitforsingleobject(readovready.hevent, read_timeout);
switch(dwres)
return
true;
}
標頭檔案commutils.h
#ifndef _commutils_h__
#define _commutils_h__
class commutils
;#endif
1.將.cpp .h 檔案拷貝到工程目錄下;
2.右擊專案—>新增—>現有項,將commutils.cpp commutils.h 新增進來
3.在自己的對話方塊類中包含該類的標頭檔案
#include
"commutils.h"
定義乙個全域性變數
commutils mcommutils ;
接下來通過commutils 的例項mcommutils 來操作串列埠
開啟串列埠:
int port; //要操作的串口號
mcommutils.opencom(port); //開啟串列埠
讀串列埠資料:
unsigned
char comdata[100]; //接收的資料
unsigned
long len = 0;
mcommutils.writecom(comdata, len);
寫資料:
unsigned
char sendarr[6];
mcommutils.writecom(sendarr,6)
最後關閉串列埠:
mcommutils.closecom();
該類的析構函式中也呼叫了該函式,在物件被銷毀時也會關掉串列埠。 用MFC實現串列埠程式設計
在windows應用程式的開發中,我們常常需要面臨與外圍資料來源裝置通訊的問題。計算機和微控制器 如mcs 51 都具有序列通訊口,可以設計相應的串列埠通訊程式,完成二者之間的資料通訊任務。實際工作中利用串列埠完成通訊任務的時候非常之多。已有一些文章介紹串列埠程式設計的文章在計算機雜誌上發表。但總的...
用MFC實現串列埠程式設計
在windows應用程式的開發中,我們常常需要面臨與外圍資料來源裝置通訊的問題。計算機和微控制器 如mcs 51 都具有序列通訊口,可以設計相應的串列埠通訊程式,完成二者之間的資料通訊任務。實際工作中利用串列埠完成通訊任務的時候非常之多。已有一些文章介紹串列埠程式設計的文章在計算機雜誌上發表。但總的...
Linux C 串列埠程式設計 詳解 例項
linux下的串列埠程式設計其實與windows下無本質差別,說白了就是類似讀寫檔案一樣,對串列埠進行讀寫操作,用到的函式無非就是open,close,read,write函式等。具體的讀寫操作可分為下面四個步驟 開啟串列埠 配置串列埠 讀寫串列埠 關閉串列埠 串列埠配置主要包括波特率的配置,校驗位...