C 串列埠程式設計

2021-08-27 21:17:21 字數 4249 閱讀 2362

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