如何通过vc++实现串口通信

Cristayh 2010-05-23 06:03:21
本人的课题是基于VC串口通信的温控系统,如何才能很好的实现VC串口与PC机和传感器以及其他串口之间的通信呢
...全文
2883 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝隆 2011-10-25
  • 打赏
  • 举报
回复
百度:VC MSComm 会有一堆的
哈拉木托 2011-10-25
  • 打赏
  • 举报
回复
自己正在学习
没事就来看看 2011-09-28
  • 打赏
  • 举报
回复
也在学习!
Sheant 2011-09-20
  • 打赏
  • 举报
回复
你这个叫人怎么好回答呢,如楼上所说,网上一大把,不过有个叫VC串口通信技术网的,专门搞这方面
kid5 2011-09-20
  • 打赏
  • 举报
回复
网上下载一个开源的CSerialPort的类,自己看看就会了。
lili0920 2010-05-24
  • 打赏
  • 举报
回复
网上很多例子 搜下自己该下就可以了
疯魔症 2010-05-24
  • 打赏
  • 举报
回复
还有单片机上一般也是封装好的,调用函数就行,不用自己控制电位电平实现协议。
你们温控的采样板还是通讯板的,串口通讯都是一样的
疯魔症 2010-05-24
  • 打赏
  • 举报
回复
我的代码 用过C就能看懂
#include "StdAfx.h"
#include "Comm.h"

Comm::Comm()
{
m_hComm=NULL;
}

Comm::~Comm()
{
m_hComm=NULL;
}

// 打开串口
// 输入: pPort - 串口名称或设备路径,可用"COM1"或"\\.\COM1"两种方式,建议用后者
// nBaudRate - 波特率
// nParity - 奇偶校验
// nByteSize - 数据字节宽度
// nStopBits - 停止位
BOOL Comm::OpenComm(wchar_t * pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
DCB dcb; // 串口控制块
COMMTIMEOUTS timeouts = { // 串口超时控制参数
100, // 读字符间隔超时时间: 100 ms
1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
500, // 基本的(额外的)读超时时间: 500 ms
1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
100}; // 基本的(额外的)写超时时间: 100 ms

m_hComm = CreateFile(pPort, // 串口名称或设备路径
GENERIC_READ | GENERIC_WRITE, // 读写方式
0, // 共享方式:独占
NULL, // 默认的安全描述符
OPEN_EXISTING, // 创建方式
0, // 不需设置文件属性
NULL); // 不需参照模板文件

if(m_hComm == INVALID_HANDLE_VALUE) return FALSE; // 打开串口失败

GetCommState(m_hComm, &dcb); // 取DCB

dcb.BaudRate = nBaudRate;
dcb.ByteSize = nByteSize;
dcb.Parity = nParity;
dcb.StopBits = nStopBits;

SetCommState(m_hComm, &dcb); // 设置DCB

SetupComm(m_hComm, 4096, 1024); // 设置输入输出缓冲区大小

SetCommTimeouts(m_hComm, &timeouts); // 设置超时

return TRUE;
}

// 关闭串口
BOOL Comm::CloseComm()
{
return CloseHandle(m_hComm);
}

// 写串口
// 输入: pData - 待写的数据缓冲区指针
// nLength - 待写的数据长度
// 返回: 实际写入的数据长度
int Comm::WriteComm(void* pData, int nLength)
{
DWORD dwNumWrite; // 串口发出的数据长度

WriteFile(m_hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);

return (int)dwNumWrite;
}

// 读串口
// 输入: pData - 待读的数据缓冲区指针
// nLength - 待读的最大数据长度
// 返回: 实际读出的数据长度
int Comm::ReadComm(void* pData, int nLength)
{
DWORD dwNumRead; // 串口收到的数据长度

ReadFile(m_hComm, pData, (DWORD)nLength, &dwNumRead, NULL);

return (int)dwNumRead;
}
疯魔症 2010-05-24
  • 打赏
  • 举报
回复
网上一把一把的
#pragma once
#include <Windows.h>
#include "Defines.h"
#include "DbConnection.h"
#include "Comm.h"
#include "stdafx.h"


class Comm
{
private:

HANDLE m_hComm;// 串口设备句柄

public:

Comm(void);
public:
~Comm(void);

public:
BOOL OpenComm(wchar_t* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits);
BOOL CloseComm();
int ReadComm(void* pData, int nLength);
int WriteComm(void* pData, int nLength);
};
doitlei 2010-05-24
  • 打赏
  • 举报
回复
这个说起来就长了,主要还是要了解几个串口API
向立天 2010-05-23
  • 打赏
  • 举报
回复
VC操作串口
网上搜一搜很多例子啊
zxdyu2009 2010-05-23
  • 打赏
  • 举报
回复
串口通讯还是很简单的,具体要看协议才能,封包,解包处理。
dsswxl 2010-05-23
  • 打赏
  • 举报
回复
把波特率,停止位,校验位,数据位设置好,直接进行通信就好了。比如发个0X00给PC,PC就弹出一个窗口,PC发个0X00给下位机,下位机就流水灯
wangli820 2010-05-23
  • 打赏
  • 举报
回复
我经常做串口,你加我QQ吧,详谈 QQ:190895112

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧