當前位置:編程學習大全網 - 源碼下載 - 利用vc如何將文本文件中的內容實時通過串口進行傳輸呢?

利用vc如何將文本文件中的內容實時通過串口進行傳輸呢?

//不懂的話再問我吧.

//我給妳壹個我自己以前寫的串口操作的函數,包括兩部份,壹部分主CPP文件,壹部分為(頭)H文件.

//以下的代碼在VC++6.0下測試通過.

//將下面的兩部分代碼分別保存在serialport.cpp文件和serialport.h文件中.

//最後面是壹個簡單的使用舉例.

//===========================SerialPort.cpp的開始=========================

#include "SerialPort.h"

HANDLE OpenSerialPort(string & strPort,ULONG ulBaudrate)

{

HANDLE hSerial;

hSerial = CreateFile((strPort.c_str()),

GENERIC_READ|GENERIC_WRITE,

NULL,

NULL,

OPEN_EXISTING,

NULL,

NULL);

if(hSerial == INVALID_HANDLE_VALUE)//Open serial port failed.

{

return hSerial;

}

//Config serial port

DCB PortDCB;

PortDCB.DCBlength = sizeof(DCB);

// Get the default serial parameter.

GetCommState(hSerial, &PortDCB);

PortDCB.BaudRate = ulBaudrate; // baudrate

PortDCB.ByteSize = 8; // Number of bits/byte, 4-8

PortDCB.Parity = NOPARITY;

PortDCB.StopBits = ONESTOPBIT;

if (!SetCommState(hSerial, &PortDCB))

{

//config the serial port failed.

CloseHandle(hSerial);

return (INVALID_HANDLE_VALUE);

}

//Config the serial port timeout property.

COMMTIMEOUTS CommTimeouts;

GetCommTimeouts(hSerial, &CommTimeouts);//Get the serial port default timeout.

CommTimeouts.ReadIntervalTimeout = MAXDWORD;

CommTimeouts.ReadTotalTimeoutMultiplier = 10;

CommTimeouts.ReadTotalTimeoutConstant = 10;

CommTimeouts.WriteTotalTimeoutMultiplier = 50;

CommTimeouts.WriteTotalTimeoutConstant = 100;

if (!SetCommTimeouts(hSerial, &CommTimeouts))

{

//config the serial port timeout failed;

CloseHandle(hSerial);

return (INVALID_HANDLE_VALUE);

}

return (hSerial);

};

void CloseSerialPort(HANDLE hSerial)

{

CloseHandle(hSerial);

};

bool WriteSerial(BYTE *btData,ULONG ulSize,HANDLE hSerial)

{

DWORD dwNumBytes,dwRet;

dwRet=WriteFile (hSerial, //Handle

btData, //Data buffer

ulSize, //Buffer size

&dwNumBytes, //written bytes

NULL); //don't support

return (dwRet!=0);

};

bool ReadSerial(BYTE *btData,ULONG *ulSize,HANDLE hSerial)

{

//SetCommMask (hSerial, EV_RXCHAR);

ULONG ulRdSize=0;

BYTE Byte;

DWORD dwBytes;

bool blRd=false;

DWORD dwMask=EV_RXCHAR;

//WaitCommEvent(hSerial,&dwMask,NULL);

SetCommMask (hSerial, EV_RXCHAR);

while (ReadFile(hSerial, &Byte, 1, &dwBytes, 0)!=0){

if (dwBytes>0){

btData[ulRdSize++]=Byte;

if (ulRdSize==*ulSize){

blRd=true;

break;

}

}else{

blRd=true;

break;

}

}

*ulSize=ulRdSize;

return (blRd);

};

//===========================SerialPort.cpp的結束=========================

//===========================SerialPort.H的開始=========================

#include <windows.h>

#include <string>

using namespace std;

HANDLE OpenSerialPort(string & strPort,ULONG ulBaudrate);

void CloseSerialPort(HANDLE hSerial);

bool WriteSerial(BYTE *btData,ULONG ulSize,HANDLE hSerial);

bool ReadSerial(BYTE *btData,ULONG *ulSize,HANDLE hSerial);

//===========================SerialPort.H的結束=========================

//使用代碼示例:

HANDLE hSerialPort;

hSerialPort = OpenSerialPort("COM1:",115200);//Open serial port com1

if (hSerialPort != INVALID_HANDLE_VALUE)

{

if (!WriteSerial("HELLO!",7,hSerialPort))//Send data hello to com1

MessageBox(0,"ERROR","ERROR",MB_ICONWARNING);//show error message

CloseSerialPort(hSerialPort);

}

  • 上一篇:要是學軟件測試與安全需要俱備哪些技能,因素?
  • 下一篇:建設項目管理系統源代碼
  • copyright 2024編程學習大全網