VC++串口编程Word文档格式.docx

上传人:b****3 文档编号:7381344 上传时间:2023-05-08 格式:DOCX 页数:25 大小:62.35KB
下载 相关 举报
VC++串口编程Word文档格式.docx_第1页
第1页 / 共25页
VC++串口编程Word文档格式.docx_第2页
第2页 / 共25页
VC++串口编程Word文档格式.docx_第3页
第3页 / 共25页
VC++串口编程Word文档格式.docx_第4页
第4页 / 共25页
VC++串口编程Word文档格式.docx_第5页
第5页 / 共25页
VC++串口编程Word文档格式.docx_第6页
第6页 / 共25页
VC++串口编程Word文档格式.docx_第7页
第7页 / 共25页
VC++串口编程Word文档格式.docx_第8页
第8页 / 共25页
VC++串口编程Word文档格式.docx_第9页
第9页 / 共25页
VC++串口编程Word文档格式.docx_第10页
第10页 / 共25页
VC++串口编程Word文档格式.docx_第11页
第11页 / 共25页
VC++串口编程Word文档格式.docx_第12页
第12页 / 共25页
VC++串口编程Word文档格式.docx_第13页
第13页 / 共25页
VC++串口编程Word文档格式.docx_第14页
第14页 / 共25页
VC++串口编程Word文档格式.docx_第15页
第15页 / 共25页
VC++串口编程Word文档格式.docx_第16页
第16页 / 共25页
VC++串口编程Word文档格式.docx_第17页
第17页 / 共25页
VC++串口编程Word文档格式.docx_第18页
第18页 / 共25页
VC++串口编程Word文档格式.docx_第19页
第19页 / 共25页
VC++串口编程Word文档格式.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

VC++串口编程Word文档格式.docx

《VC++串口编程Word文档格式.docx》由会员分享,可在线阅读,更多相关《VC++串口编程Word文档格式.docx(25页珍藏版)》请在冰点文库上搜索。

VC++串口编程Word文档格式.docx

其中最常用的串行通信接口标准是RS-232-C。

这些符号的具体含义是,RS(Recommendedstandard)表示推荐标准,232表示标识号,C表示RS-232的修改版本。

6、常用数据校验方法

常用的串口数据校验方法有奇偶校验和CRC校验等两种。

其中,奇偶校验就是在传送数据位的最后一位传送1位奇偶校验位,可以是奇校验,也可以是偶校验。

奇校验就是所有传送的数据位(包含字符的各数位和校验位)中,1的个数为奇数。

偶校验就是所有传送的数据位(包含字符的各数位和校验位)中,1的个数为偶数。

奇偶校验能够检测出数据传输过程中的部分误码(1为误码能检测出来,但2位及2位以上的误码不能检测出来),但是奇偶校验不能用于纠错,在发现错误后,所能做的补救措施就是重发数据。

CRC校验的全称是循环冗余码校验,英文全称为CyclicalRedundancyCheck,简称CRC。

CRC校验是用除法和余数的原理来做错误检测。

在实际应用中,串口发送端在发送数据前,先计算出数据的CRC值,然后将CRC值一并发送给接收端,接收端在收到数据后,重新计算CRC值,然后将该值与接收到的CRC值进行比较,若不相等则说明数据通信有误。

CRC校验具有自动纠错能力。

7、两个设备之间进行串口通信的流程示意图

二、用VC进行串口编程的方法和流程

在VC中进行串口编程的方法主要有3种,分别是应用MSComm控件进行串口编程、应用串口类库进行串口编程(如CSerialPort类)和应用WindowsAPI进行串口编程。

在VC中进行串口编程的一般流程如下:

(1)、设置串口参数,主要包括串口号、波特率、数据位、停止位和奇偶校验。

(2)、打开串口,根据设置的串口参数打开串口设备。

(3)、读取数据,读取串口数据,并对数据进行业务逻辑处理。

(4)、写入数据,根据业务逻辑需要向串口写入数据。

(5)、关闭串口,使用完串口设备后,需要关闭串口,释放资源。

三、MSComm控件串口编程

MSComm控件是微软公司提供给用户的一个用于串口通信的ActiveX控件,该控件的全称是MicrosoftCommunicationControl。

(1)、新建一个基于对话框的MFC工程MSCom。

(2)、单击【Project/AddtoProject/ComponentsandControls】菜单项,在弹出的对话框中,打开【RegisteredActiveXControls】文件夹,选中【MicrosoftCommunicationsControl,version6.0】,单击【Insert】按钮插入MSComm控件。

(3)、设计对话框IDD_MSCOM_DIALOG如下:

该对话框各控件信息如下:

控件

控件ID

控件属性

相关变量

COM:

文本后的组合框(ComboBox)控件

IDC_COMBO_COM

Type属性为DropList,

取消Sort属性

CString类型的m_strComNo

BPS:

文本后的组合框控件

IDC_COMBO_BPS

CString类型的m_strBps

DB:

IDC_COMBO_DB

CString类型的m_strDataBit

SB:

IDC_COMBO_SB

CString类型的m_strStopBit

CB:

IDC_COMBO_CB

CString类型的m_strCheckBit

Open按钮

IDC_OPEN

默认

Send按钮

IDC_SEND

Close按钮

IDC_CLOSEPORT

Quit按钮

IDOK

Send成组框(GroupBox)中的编辑框

IDC_EDIT_SEND

CString类型的m_strSendData

Recv成组框中的编辑框

IDC_EDIT_RECV

设置属性为Multiline、AutoHScroll、AutoVScroll和Read-only

CString类型的m_strRecvData

MSComm控件

IDC_MSCOMM1

CMSComm控件类型的m_ctrMSCom

注意:

为组合框添加CString类型的变量时,Type属性不能是DropList,可先将组合框的Type属性设为Dropdown,添加CString类型的变量后,再设置为DropList。

(4)、在CMSComDlg类的OnInitDialog函数中添加如下代码,初始化控件:

CComboBox*pComboBox=NULL;

//定义组合框控件指针变量

pComboBox=(CComboBox*)GetDlgItem(IDC_COMBO_COM);

//获得控件句柄

//为组合框添加COM1到COM10的选项

pComboBox->

AddString("

COM1"

);

//添加列表项COM1

COM2"

COM3"

COM4"

COM5"

COM6"

COM7"

COM8"

COM9"

COM10"

SetCurSel(0);

//设置初始列表项为COM1

//初始化波特率控件

pComboBox=(CComboBox*)GetDlgItem(IDC_COMBO_BPS);

2400"

//添加列表项2400

4800"

9600"

19200"

38400"

SetCurSel

(2);

//设置初始列表项为9600

//初始化数据位控件

pComboBox=(CComboBox*)GetDlgItem(IDC_COMBO_DB);

5"

//添加列表项5

7"

8"

16"

//设置初始列表项为8

//初始化停止位控件

pComboBox=(CComboBox*)GetDlgItem(IDC_COMBO_SB);

1"

//添加列表项1

1.5"

2"

//设置初始列表项为1

//初始化校验位控件

pComboBox=(CComboBox*)GetDlgItem(IDC_COMBO_CB);

N"

(5)、为Open按钮添加消息响应函数,在该消息响应函数中添加串口参数设置和打开串口:

voidCMSComDlg:

:

OnOpen()

{

UpdateData();

//更新参数数据

intiComPort=1;

//定义串口号变量

iComPort=atoi(m_strComNo.Right(m_strComNo.GetLength()-3));

//获得格式化后的串口号

m_ctrMSCom.SetCommPort(iComPort);

//设置串口号

CStringstrParam="

9600,N,8,1"

;

//定义通信参数,初始化的格式为模板

//获得并更新串口通信参数,包括波特率、校验位、数据位、停止位

strParam=m_strBps+"

"

+m_strCheckBit+"

+m_strDataBit+"

+m_strStopBit;

m_ctrMSCom.SetSettings(strParam);

//设置串口通信参数

m_ctrMSCom.SetOutBufferSize(512);

//设置发送缓冲区大小为512字节

m_ctrMSCom.SetInBufferSize(1024);

//设置接收缓冲区大小为1024字节

m_ctrMSCom.SetInBufferCount(0);

//清空接收缓冲区

m_ctrMSCom.SetInputMode(0);

//设置串口数据获取方式为文本方式

m_ctrMSCom.SetInputLen(0);

//设置接收缓冲区中的所有数据

m_ctrMSCom.SetRThreshold

(1);

//设置接收缓存区中有数据时的响应OnComm事件

m_ctrMSCom.SetPortOpen(TRUE);

//打开指定串口

if(m_ctrMSCom.GetPortOpen())

{//串口成功打开

MessageBox("

COMisopened!

"

}

}

(6)、为Send按钮添加消息响应函数,在该函数中发送数据和显示发送数据和系统当前时间:

OnSend()

_variant_tvSendData;

//定义发送数据变量

vSendData=m_strSendData;

//转换发送数据类型

m_ctrMSCom.SetOutput(vSendData);

//发送数据

CTimetCurrentTime=CTime:

GetCurrentTime();

//获得系统当前时间

CStringstrCurrentTime="

//定义字符串变量

strCurrentTime.Format("

%d-%d-%d%d:

%d:

%d\r\n"

//格式化日期时间

tCurrentTime.GetYear(),//年

tCurrentTime.GetMonth(),

tCurrentTime.GetDay(),

tCurrentTime.GetHour(),

tCurrentTime.GetMinute(),

tCurrentTime.GetSecond());

CStringstrDisplay="

//定义数据显示变量

strDisplay="

TX:

+m_strSendData;

//格式化要发送的数据

m_strRecvData+=strDisplay+strCurrentTime;

UpdateData(FALSE);

//将格式化的数据显示在接收数据框中

使用数据类型_variant_t之前,需要包含头文件comdef.h,可在stdafx.h头文件中添加#include<

comdef.h>

(7)、为ClosePort按钮添加消息响应函数,在该函数中关闭串口:

OnCloseport()

{//若串口已打开,则关闭

m_ctrMSCom.SetPortOpen(FALSE);

同时为CMSComDlg类添加WM_CLOSE消息响应函数,在该函数中关闭串口:

OnClose()

OnCloseport();

//关闭串口

CDialog:

OnOK();

(8)、为MSComm控件添加事件响应函数,在该函数中根据响应的事件处理串口数据的接收和显示:

OnComm()

{//根据串口响应事件的值来判断接收缓存区中是否有数据

if(m_ctrMSCom.GetCommEvent()==2)

{//若事件值为2,表示接收缓存区中有数据

CStringstrDisplay="

variant_tvSendData;

//定义接收数据变量

vSendData=m_ctrMSCom.GetInput();

//接收数据

strDisplay=vSendData.bstrVal;

//获取文本数据

CTimetCurrentTime=CTime:

CStringstrCurrentTime="

//定义时间字符串变量

strCurrentTime.Format("

//格式化时间字符串

tCurrentTime.GetYear(),

strDisplay="

RX:

+strDisplay;

//格式化接收到的数据

m_strRecvData+=strDisplay+strCurrentTime;

//将格式化后的数据显示在接收数据框

UpdateData(FALSE);

//更新接收数据框

提示:

右击MSComm控件,选择Event,便可添加事件响应函数。

即添加自定义的消息处理函数。

(9)、将电脑的COM1和COM3口用串口线连接起来,打开该程序的两个实例,设置好参数后,分别打开COM1和COM3,然后进行数据通信。

若只有一个COM口,可以短接该口的引脚2和引脚3,然后打开一个实例进行测试。

使用MSComm控件编写的串口程序发布时会有控件注册的问题。

四、CSerialPort串口类库编程

1、CSerialPort串口类概述

CSerialPort是一个基于多线程的串口通信类,CSerialPort类的原创作者是RemonSpekreijse,应用CSerialPort串口类编写串口通信程序的步骤如下:

(1)、为工程添加CSerialPort类的头文件和源文件。

(2)、为工程添加CSerialPort类对象。

(3)、初始化串口,主要包括串口号、奇偶校验、数据位、停止位等信息。

(4)、启动串口监听线程。

(5)、为工程添加WM_COMM_RXCHAR消息响应函数,在该函数中处理数据的接收。

(6)、发送数据。

2、实例讲解,用CSerialPort类编写串口通信程序

(1)、创建一个基于对话框的MFC工程SerialPortCom。

(2)、将CSerialPort类的头文件和源文件添加到工程目录中,然后选择【Project/AddtoProject/Files】菜单项,选中SerialPort.h和SerialPort.cpp,单击【OK】按钮,完成CSerialPort类的添加。

(3)、为IDD_SERIALPORTCOM_DIALOG对话框添加一系列的控件,设计该对话框如下:

对话框各控件的信息如下:

后的组合框

【Type】属性为DropList,并且取消Sort属性

CString类型的变量m_strComNo

CString类型的变量m_strBps

CString类型的变量m_strDataBit

CString类型的变量m_strStopBit

CString类型的变量m_strCheckBit

OpenPort按钮

Clear按钮

IDC_CLEAR

Send成组框中的编辑框

CString类型的变量m_strSendData

添加Multiline、AutoHScroll、AutoVScroll、Read-only属性

CString类型的变量m_strRecvData

打开组合框IDC_COMBO_COM控件的属性,选择【Data】选项卡,在【Enterlistboxitems】框中输入COM1、COM2等,同理为组合框IDC_COMBO_BPS添加2400、4800、9600、19200、38400,为数据位组合框IDC_COMBO_DB添加5、7、8、16,为停止位组合框IDC_COMBO_SB添加1、1.5、2,为校验位组合框IDC_COMBO_CB添加N。

在【Enterlistboxitems】框中Ctrl+Enter键用于换行。

(4)、在对话框类CSerialPortComDlg的成员函数OnInitDialog函数中初始化控件:

CComboBox*pComboBox=NULL;

//初始化串口号控件

//设置初始串口号为COM1

//初始化校验位控件

pComboBox=(CComboBox*)GetDlgItem(ID

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2