cserialport 類,標頭檔案: serialport.h
這裡要注意windows.h
#ifndef _serial_h
#define _serial_h
#include #include #include #include #include // 定義串列埠型別
#ifdef _unicode
typedef cstring porttype;
#else
typedef std::string porttype;
#endif // _unicode
typedef unsigned long ulong;
typedef unsigned char uchar;
class cserialport;
// 設定串口號
void setportnum(const porttype &portnum)
// 設定波特率
void setbaudrate(const ulong baudrate)
// 設定資料位
void setbytesize(const uchar bytesize)
// 設定檢驗位
void setparitybit(const uchar paritybit)
// 設定停止位
void setstopbit(const uchar stopbit)
// 獲取串口號
porttype getportnum()
// 獲取波特率
ulong getbaudrate()
// 獲取資料位
uchar getbytesize()
// 獲取檢驗位
uchar getparitybit()
// 獲取停止位
uchar getstopbit() };
#endif // _serial_h
serialport 類實現檔案 .cpp:
**中需要注意stdafx.h
#include "stdafx.h"
#include "serial.h"
cserialport::cserialport(
const porttype & portnum,
dword baudrate /* = 9600 */,
byte bytesize /* = 8 */,
byte paritybit /* = noparity */,
byte stopbit /* = onestopbit */
) : m_portnum(portnum),
m_dwbaudrate(baudrate),
m_bytesize(bytesize),
m_paritybit(paritybit),
m_stopbit(stopbit),
m_bopen(false)
cserialport::~cserialport()
// 開啟串列埠成功,返回 true
bool cserialport::opencomm()
; wsprintf(szbuf, l"開啟 %s 失敗,**: %d", m_portnum, getlasterror());
messagebox(null, szbuf, l"warnning", mb_ok);
#else
char szbuf[1024] = ;
sprintf_s(szbuf, "開啟 %s 失敗,**: %d", m_portnum, getlasterror());
messagebox(null, szbuf, "warnning", mb_ok);
#endif // _unicode
return false; }
else
; wsprintf(szbuf, l"串列埠設定失敗,錯誤**: %d", getlasterror());
messagebox(null, szbuf, text("error"), mb_ok);
#else
char szbuf[1024] = ;
wsprintf(szbuf, "串列埠設定失敗,錯誤**: %d", getlasterror());
messagebox(null, szbuf, "error", mb_ok);
#endif
return false;
} }
//在讀寫串列埠前,用 purgecomm 函式清空緩衝區
purgecomm(m_hcomm, purge_rxclear | purge_txclear | purge_txabort | purge_txabort);
m_bopen = true;
return true; }
// 關閉串列埠
void cserialport::closecomm()
// 向串列埠傳送資料
bool cserialport::writetocomm(byte data, dword dwlength)
dword dwtx = 0;
bool ret = false;
ret = writefile(m_hcomm, data, dwlength, &dwtx, null);
if (ret == false)
; wsprintf(szbuf, _t("讀取資料失敗,錯誤**: %d"), getlasterror());
messagebox(null, szbuf, l"error", mb_ok);
#else
char szbuf[1024] = ;
sprintf_s(szbuf, "讀取資料失敗, 錯誤**: %d", getlasterror());
messagebox(null, szbuf, "error", mb_ok);
#endif // _unicode
return false; }
return true;
} // 從串列埠中讀取資料
bool cserialport::readfromcomm(char buffer, dword dwlength)
dword dwrx = 0; // 讀入的位元組數
bool ret = false;
byte* byreaddata = new byte[dwlength];
char sztmp[4] = ;
int sizeofbytes = sizeof(sztmp);
ret = readfile(m_hcomm, byreaddata, dwlength, &dwrx, null); // 讀入資料
if (ret == true)
// 釋放記憶體
delete byreaddata;
return true;
} else
; wsprintf(szbuf, _t("資料讀取失敗,錯誤**: %d"), getlasterror());
messagebox(null, szbuf, l"error", mb_ok);
#else
char szbuf[1024] = ;
wsprintf(szbuf, "資料讀取失敗,錯誤**: %d", getlasterror());
messagebox(null, szbuf, "error", mb_ok);
#endif // _unicode
return false; }
return true;
}
呼叫使用。
#include #include #include "serial.h"
using namespace std;
int main();
serialport.opencomm();
serialport.writetocomm(&senddata, 1);
serialport.readfromcomm(recvbuf, 1);
serialport.closecomm();
system("pause");
return 0;
}
由於博主使用ubuntu,因此上述出現windows.h以及stdafx.h找不到的問題。建議在windows系統環境下測試~希望對大家有所幫助 C 串列埠程式設計
基本傳遞方法 rs232傳輸要有1位起始位,8位資料位 1位校驗位 1位停止位,也就是說傳乙個位元組要用時11位的時間.舉例 6個位元組要6 11 66位時間。每位1 9600秒,共用66 9600 0.006875秒。虛擬串列埠軟體 監聽串列埠程式 直接上 在控制台程式中新增如下原始碼就可以直接執...
C 中串列埠通訊程式設計
在 visual studio 6.0 中編寫串列埠通訊程式,一般都使用 microsoft communication control 簡稱mscomm 的通訊控制項,只要通 過對此控制項的屬性和事件進行相應程式設計操作,就可以輕鬆地實現串列埠通訊。但在 microsoft.net 技術廣泛應用的...
C 串列埠程式設計一 簡介
在.net平台下使用c 建立串列埠通訊程式 其命名空間是system.io.ports 下的serialport 類 net2.0 a.建立serialport 物件 serialport serialport1 new serialport b.設定引數 serialport1.portname ...