当前位置:文档之家› 串口通信源代码

串口通信源代码

// txtest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"



#include
// #include
// #include
/*#include */
#include


using namespace std;

HANDLE hCom;


void OpenComm(HANDLE &hCom); //打开串口

void CloseComm(HANDLE &hCom); //关闭串口

void SendData(const HANDLE hCom, BYTE data); //该函数可以向单片机发送数据。注意发送是以字节为单位的,data为要发送数据的首地址
//每次该函数只发送四位: data[0] 和data[1] 为要发送的数据,
// data[2] 和data[3] 一定要设成0x0d 和 0x0a (需要在外部设定后再传递)

void ReceiveData(const HANDLE hCom, BYTE* data); //该函数可以从单片机接收函数。注意接收是以字节为单位的,data为接收到的数据的存放地址
//每次只能接收两位,分别存放在data[0] 和data[1]

BYTE Select_Data(BYTE sdata[]); //更改数据 返回为一位数据,将该数据发送给单片机


void main()
{

HANDLE hCom; //串口的句柄

BYTE sdata[10]; //作为发送数据的数组
BYTE rdata[10]; //作为接收数据的数组
BYTE data_w;
OpenComm(hCom); //打开串口


//system("pause");

BYTE i=66;
while(1)
{
Sleep(2000);
SendData(hCom,i);
ReceiveData(hCom, rdata);
cout << (BYTE)(rdata[0]) <<"%%%%%%%"<< (BYTE)(rdata[1]) << endl;
cout << "收到数据!" << endl;

if(i>=250 ) break;

i++;
cout << "发送数据!" <}

}

void OpenComm(HANDLE &hCom) //打开串口
{
LPCTSTR Com;
int input;
cout << "请输入串口号:" << endl;
cin >> input;
switch(input)
{
case 1: Com = "COM1"; break;
case 2: Com = "COM2"; break;
case 3: Com = "COM3"; break;
case 4: Com = "COM4"; break;
case 5: Com = "COM5"; break;
case 6: Com = "COM6"; break;
case 7: Com = "COM7"; break;
case 8: Com = "COM8"; break;
default: cout << "串口号错误!"<< endl; return;
}
hCom = CreateFile( Com,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL );
if( hCom != (HANDLE)-1)
{
SetupComm(hCom, 1024, 512);

COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout=1000;
TimeOuts.ReadTotalTimeoutMultiplier=0;
TimeOuts.ReadTotalTimeoutConstant=0;
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=500;
TimeOuts.WriteTotalTimeoutConstant=2000;
SetCommTimeouts(hCom,&TimeOuts); //设置超时

DCB myDCB;
GetCommState(hCom, &myDCB);
myDCB.BaudRate = 9600;
//myDCB.fBinary = TRUE;
//myDCB.fParity = FALSE;
myDCB.ByteSize = 8;
myDCB.Parity = NOPARITY;
myDCB.StopBits = ONESTOPBIT;
SetCommState(hCom, &myDCB);
cout << "串口打开成功!" << endl;
PurgeComm(hCom,
PURGE_RXABORT | PURGE_RXCLEAR | PURGE_TXABORT | PURGE_TXCLEAR);
return;
}
cout << "串口打开失败!" << endl;
}

void CloseComm(HANDLE &hCom) // 关闭串


{
CloseHandle(hCom);
cout << "串口关闭完成!" << endl;
}



void ReceiveData(const HANDLE hCom, BYTE* data) //接收数据
{
DWORD wCount;
BOOL bReadStat;
bReadStat = ReadFile(hCom, data, 1, &wCount, NULL);
if (!bReadStat)
{
cout << "读取串口失败!" << endl;
return;
}
cout << "读取串口成功!" << endl; //可以在此处添加收到单片机数据之后需要执行的代码
// PurgeComm(hCom,
// PURGE_RXABORT | PURGE_RXCLEAR | PURGE_TXABORT | PURGE_TXCLEAR); //清空数据缓冲区
}

void SendData(const HANDLE hCom, BYTE data) //发送数据
{
DWORD dwBytesWrite = 1;
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;
ClearCommError(hCom, &dwErrorFlags, &ComStat);
bWriteStat = WriteFile(hCom, &data, dwBytesWrite, &dwBytesWrite, NULL);
if (!bWriteStat)
{
cout << "写串口失败!" << endl;
return;
}
/*cout << "写串口成功!" << endl;*/
PurgeComm (hCom,
PURGE_RXABORT | PURGE_RXCLEAR | PURGE_TXABORT | PURGE_TXCLEAR); //清空数据缓冲区
}




相关主题
文本预览
相关文档 最新文档