基于MSComm串口通讯的波特率自动检测方法

合集下载

串口通信-MSComm控件使用详解

串口通信-MSComm控件使用详解

串口通信-MSComm控件使用详解2012-11-13 09:35 6988人阅读评论(0) 收藏举报控件编程 Delphi编程(13)MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。

Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

1.MSComm控件两种处理通讯的方式1.1 事件驱动方式事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。

在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。

在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。

OnComm 事件还可以检查和处理通讯错误。

所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。

在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。

这种方法的优点是程序响应及时,可靠性高。

每个MSComm 控件对应着一个串行端口。

如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。

1.2 查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。

在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。

如果应用程序较小,并且是自保持的,这种方法可能是更可取的。

例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

串口通信mscomm控件的基础函数说明

串口通信mscomm控件的基础函数说明

MSComm控件的重要属性中的一部分CommPort设置并返回通信端口号Settings以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

PortOpen设置并返回通信端口的状态。

可以用来打开和关闭端口Input从接受缓冲区返回和删除字符串Output向传输缓冲区写一个字符串每个属性都通过Get/Set函数对来获取或设置控件的属性属性简介CommPort设置并返回端口号void CMSComm::SetCommPort(short nNewValue)short CMSComm::GetCommPort()RThreshold在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm之前,设置并返回要接收的字符数。

达到设定值则触发OnComm。

void CMSComm::SetRThreshold(short nNewValue)short CMSComm::GetRThreshold()CTSHolding确定是否可通过查询CTS线的状态发送数据。

硬件握手的手工查询void CMSComm::SetCTSHolding(BOOL bNewValue)BOOL CMSComm::GetCTSHolding()SThreshold在MSComm控件设置CommEvent属性为comEvSend并产生OnComm之前,设置并返回传输缓冲区中允许的最小字符数。

void CMSComm::SetSThreshold(short nNewValue)short CMSComm::GetSTreshold()Handshaking设置或返回硬件握手状态,使用内部通信协议void CMSComm::SetHandshaking(long nNewValue)long CMSComm::GetHandshaking()InputMode设置或返回传输数据的类型void CMSComm::SetInputMode(long nNewValue)long CMSComm::GetInputMode()DSRHolding确定DSR线的状态。

串口自适应波特率 -回复

串口自适应波特率 -回复

串口自适应波特率-回复实现串口自适应波特率的原理和步骤。

串口自适应波特率是指在通信过程中,根据实际通信情况,自动调整波特率以达到最佳通信效果。

本文将以下述步骤逐一解释串口自适应波特率的实现。

第一步:串口设置与初始化要实现串口自适应波特率,首先需要进行串口的设置和初始化。

在这一步骤中,需要指定所使用的串口号、波特率等参数。

一般情况下,串口的默认波特率是9600。

我们可以通过编程语言提供的串口库函数来设置和初始化串口。

第二步:发送测试指令在进行波特率自适应之前,需要发送一组特定的测试指令到目标设备。

这组指令的目的是通过设备的返回结果来判断当前串口的波特率是否匹配。

测试指令可以是一个特定的字符串或者特定的命令码,具体取决于设备的通信协议。

第三步:接收返回数据在发送了测试指令之后,需要接收目标设备返回的数据,并进行处理。

在这一步骤中,需要设置一个接收缓冲区来存储接收的数据。

同时,需要设置一个接收超时时间,用于判断当一段时间内没有接收到数据时,认为当前波特率不匹配,需要尝试其他波特率。

第四步:波特率调整当接收到返回数据时,需要判断该数据是否符合预期。

如果符合预期,则认为当前波特率设定正确,通信正常。

如果返回的数据不符合预期,则需要调整波特率。

波特率的调整可以通过修改串口参数实现。

第五步:循环调整波特率在进行了波特率的调整后,重新回到第二步,发送测试指令,并在一定时间内接收返回数据。

通过不断的循环调整波特率,直到找到符合预期的波特率。

第六步:通信稳定性测试当串口的波特率调整完成后,需要进行通信稳定性测试,确保通信的稳定性。

可以通过发送一组测试数据到目标设备,并接收返回结果,验证通信是否正常。

如果测试结果异常,可能还需要进一步调整波特率或其他通信参数。

总结:串口自适应波特率是通过不断尝试不同的波特率,通过匹配返回数据来确定最佳通信波特率的过程。

通过上述的步骤,我们可以实现串口自适应波特率。

这种方法可以很好地解决因通信波特率不匹配导致的通信异常问题,提高通信的稳定性和可靠性。

串口波特率自动检测

串口波特率自动检测
END CASE;
ELSIF Byte >= 0xF1 THEN
19200 Baud
ELSE
CASE Byte IN
0x0D: 9600 Baud
0xE6: 4800 Baud
0x78: 2400 Baud
0xE0,0xF0: 1800 Baud
0x80: 1200 Baud
ELSE: Line noise; reset
关键词:自动检测;波特率
串行通信是终端和主机之间的主要通信方式,通信波特率一般选择1800、4800、9600和 19200等。终端的类型有很多种,其通信速率也有很多种选择。主机怎样确定终端的通信速率呢?本文给出了一种简单、易行的方法:设定主机的接收波特率(以9600波特为例),终端发送一个特定的字符(以回车符为例),主机根据接收到的字符信息就可以确定终端的通信波特率。本文对这种方法予以详述。
3 实现方式
通过以上分析,各种波特率都可以通过回车符的发送和接收信息来测定,算法实现的伪代码在本文
的最后给出。应用实践证明了这种方法的有效性。
; Pseudo code to determine what baud rate a transmitter is at,
on the b asis of a single
2 低波特率的检测
当发送速率低于1200波特时,接收端收到的字节都是0x00,因此只能确定其速率低于12 00波特,而不可能再得到更多的信息。为了解决这个问题,可以在9600波特的速率下继续接收下一个字节信息。发送速率为600波特或更低时,一个位的发送时间要大于9600波特时整个字节的接收时间。因此,发送端每一个从‘1’(终止位)到‘0’(起始位)的跳变都会让接收端认为一个新的字节开始了。表2所示为600波特或更低的传输速率时接收端回车符的二进制序列(只给出开始的一些位)。

自动波特率检测原理

自动波特率检测原理

自动波特率检测:串口通信必备技术自动波特率检测原理是串口通信中的一个重要技术,可有效解决串口通信过程中波特率设置不匹配的问题。

本文将为您详细介绍自动波特率检测的原理、应用场景以及实现方法。

一、自动波特率检测原理自动波特率检测是指在串口通信中,使用一定的算法来检测对端设备所采用的波特率,从而确保通信的正常进行。

其原理基于串口通信中数据传输的特点,即发送数据时,在数据开始前需要发送一个起始位,然后发送数据位,再发送一个停止位。

而对端设备根据波特率设置来决定何时读取数据位。

由此可知,如果通信双方所采用的波特率不一致,会导致数据读取不完整或者乱码等情况。

自动波特率检测的具体实现方法主要有两种,一种是利用信号的周期性变化进行波特率检测,另一种是检测停止位的时间间隔来确定波特率。

两种方法各有优缺点,在实际应用中可根据具体情况进行选择。

二、应用场景自动波特率检测技术广泛应用于串口通信的各个领域,如嵌入式系统、工业控制、物联网、数据采集等。

在实际应用中,通常情况下通信双方的波特率设置应该一致,但是由于各种原因,波特率不匹配的情况是难以避免的。

这时,自动波特率检测技术就能够派上用场,快速、准确地检测出对端设备所使用的波特率,以确保数据传输的正常进行。

三、实现方法在实现自动波特率检测时,通常需要采用软件和硬件相结合的方式。

具体实现方法如下:1. 软件实现方法:(1)采用输入捕获的方式来实时获取信号周期。

(2)根据信号的周期性变化,计算出实际波特率。

(3)将计算出的波特率与预设的波特率进行比较,确定是否匹配。

2. 硬件实现方法:(1)利用计数寄存器来捕获信号周期,并将结果存储在内存中。

(2)采用定时器来计算实际波特率,并将结果存储在内存中。

(3)将计算出的波特率与预设的波特率进行比较,确定是否匹配。

四、总结自动波特率检测技术是串口通信中不可或缺的一项技术,能够有效解决波特率不匹配等问题。

实现方法上,可根据具体需求来选择软件和硬件各自的实现方式。

MFC自动检测串口

MFC自动检测串口

怎样检测电脑的串口是否存在?程序在初始化的时候,自动检测系统的串口是否存在或者被占用,可以使用如下的方法:在基于对话框的设计中,我们采用MSComm控件作为串口接口使用,但该控件没有提供检测所使用串口是否存在的函数,所以我们在程序初始化的时候如果使用了系统中不存在的串口(如,在有些笔记本中,COM1是不存在的),系统会异常,造成系统初始化不正常。

为了解决这个问题,同时使我们的程序有更好的交互特性,我们可以采用如下的方法来实现这个判断。

该代码仅供参考。

该段代码一般放在OnInitDialog中。

HANDLE m_hCom;CString com[2] = {"COM1", "COM2"};CString str="";int cnt = 0;for(int i = 0; i< 2; i++){m_hCom = CreateFile(com[i], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL); //这里的CreateFile函数起了很大的作用,可以用来创建系统设备文件,如果该设备不存在或者被占用,则会返回一个错误,即下面的INVALID_HANDLE_VALUE ,据此可以判断可使用性。

详细参见MSDN中的介绍。

if(m_hCom == INVALID_HANDLE_VALUE) // 如果没有该设备,或者被其他应用程序在用*******************{str+=com[i]; // 记录下该串口名称,以备后面提示用str+=" ";}else{cnt = i + 1; // 如果存在,则记录下来。

这里只记录了一个,也可以采用一个数组来记录所有存在串口;}CloseHandle(m_hCom); // 关闭文件句柄,后面我们采用控件,不用API }if(cnt) // 如果串口存在,则执行相应的初始化(采用控件){if(m_ctrlMscom.GetPortOpen()) // m_ctrlMscom是控件的一个实例{m_ctrlMscom.SetPortOpen(FALSE);}m_ctrlMscom.SetCommPort(cnt);if(!m_ctrlMscom.GetPortOpen()){m_ctrlMscom.SetPortOpen(TRUE);}m_ctrlMscom.SetSettings("4800,n,8,1");m_ctrlMscom.SetInputMode(1);m_ctrlMscom.SetRThreshold(RX_PKG_SIZE);m_ctrlMscom.SetInputLen(0);m_ctrlMscom.GetInput();m_strComStatus.Format("COM%d, 4800, n, 8, 1", cnt);m_ComSettting[0] = cnt-1;}else // 如果不存在,则显示错误信息,而不进行串口操作,防止系统异常造成界面的初始化不完全{AfxMessageBox(str+"doesn't exist or is being used by otherprogram",MB_OK);m_ComSettting[0] = 0;m_strComStatus.Format("No COM can be used! Plesase check your hardware!");}程序中标记***************的部分是该实现的关键,也就是CreateFile()这个API的调用的作用和返回值得判断,对于一般串口设置程序来说,很好用了。

内核中测试串口波特率的方法

内核中测试串口波特率的方法

内核中测试串口波特率的方法串口是一种常见的用于数据传输的接口,它通过串行通信方式进行数据的发送和接收。

在内核中测试串口波特率的方法主要涉及通过编程控制串口进行数据的发送和接收,并通过比较发送数据和接收数据的准确性来确定串口的波特率设置是否正确。

1. 内核中的串口驱动在内核中,串口驱动是负责控制并管理串口设备的模块。

它负责向串口设备发送数据以及从串口设备接收数据,并对数据进行处理和传递。

串口驱动一般通过注册字符设备接口来与用户空间进行通信。

2. 使用ioctl命令设置波特率在内核中,通常使用ioctl命令来设置串口的各种参数,包括波特率。

通过ioctl命令,可以打开、关闭串口设备,设置波特率、数据位、停止位、奇偶校验等参数。

ioctl(fd, TCGETS2, &termios);termios.c_cflag &= ~CBAUD;termios.c_cflag |= B115200; // 设置波特率为115200ioctl(fd, TCSETS2, &termios);上述代码片段展示了通过ioctl命令设置串口波特率的示例。

其中,fd表示打开的串口文件描述符,TCGETS2和TCSETS2是ioctl命令的参数,用于获取和设置终端设备的属性。

3. 创建测试程序为了测试串口波特率的准确性,我们需要创建一个测试程序。

这个测试程序首先打开指定的串口设备,然后向串口发送一串特定的数据,并接收从串口返回的数据进行比较,以检查波特率设置是否正确。

#include <stdio.h>#include <fcntl.h>#include <termios.h>int main(){int fd;char send_buffer[] = "Test data";char receive_buffer[sizeof(send_buffer)];fd = open("/dev/ttyS0", O_RDWR);struct termios termios;ioctl(fd, TCGETS2, &termios);termios.c_cflag &= ~CBAUD;termios.c_cflag |= B115200;ioctl(fd, TCSETS2, &termios);write(fd, send_buffer, sizeof(send_buffer));read(fd, receive_buffer, sizeof(receive_buffer));if (strcmp(send_buffer, receive_buffer) == 0) {printf("波特率设置正确\n");} else {printf("波特率设置错误\n");}close(fd);return0;}上述代码片段展示了一个简单的测试程序示例。

串口波特率自动

串口波特率自动

串口波特率自动
串口波特率自动是一个重要的技术领域,对于各种设备之间的通信起着至关重要的作用。

串口波特率是指串行通信中单位时间内传输的比特数,它决定了通信速率的快慢。

在现代科技发展的今天,串口波特率自动调节的需求越来越大。

随着设备的智能化和自动化程度的提高,不同设备之间的通信变得更加复杂和多样化。

传统的人工设置串口波特率已经无法满足这种需求,因此自动调节的技术应运而生。

自动调节串口波特率的方法有很多种,其中一种常见的方法是通过设备之间的握手协议来实现。

设备在通信之前先进行协商,确定双方支持的最高波特率,然后根据设备的处理能力和其他条件来确定实际的波特率。

这种方法可以确保通信的稳定性和可靠性,同时也提高了通信的效率。

另一种自动调节串口波特率的方法是通过设备的自适应能力来实现。

设备可以根据传输数据的大小和复杂度来动态调节波特率,以满足不同情况下的通信需求。

这种方法可以使通信更加灵活和高效,提高了设备之间的数据传输速度和质量。

串口波特率自动调节的技术不仅可以应用于各种智能设备之间的通信,还可以应用于工业控制系统、通信网络、电子设备等领域。

它可以提高设备之间的互联互通能力,减少人工干预的成本和工作量,
提高工作效率和生产效益。

串口波特率自动调节是一个非常有价值和前景的技术领域。

它可以为各种设备之间的通信带来便利和效益,推动科技进步和社会发展。

我们有理由相信,在不久的将来,串口波特率自动调节技术将会得到更广泛的应用和推广。

MSComm控件实现串口通信的方法

MSComm控件实现串口通信的方法

MSComm控件实现串口通信的方法碧峰晨曦摘要:详细介绍了MSComm控件,并在VC++6.0中利用MSComm控件开发了基于对话框的串口通信实例。

关键词:串口通信,MSComm,VC++图书编号:TP3110.引言串口通信具有实现简单、价格低廉、通信稳定、数据传输可靠等优点,因而广泛应用于各种工业控制系统中。

MSComm控件是微软公司开发的专门用于串口通信的控件。

该控件为开发串口通信程序提供了更加快捷、容易的方法。

在VC++中,对控件属性的操作都是通过特定的函数来实现的,这些函数都是CMSComm类的成员函数。

当声明了一个CMSComm类对象后,就可以通过如下格式调用成员函数来访问控件属性了:<对象名>.<成员函数名>(<参数表>)或<对象名>-><成员函数名>(<参数表>)1.MSComm控件属性及事件1.1 MSComm控件属性MSComm控件有许多属性,最主要的几个属性如下:1)CommPort:设置该属性值可以获取当前程序使用的串口编号。

2)Setting:设置或者获取串行通信的通信参数(包括波特率、奇偶校验类型、数据位数及停止位数等)。

3)PortOpen:设置该属性可以打开或关闭串口。

4)Input:从接收缓冲区中返回并删除数据。

5)Output:向串口通信输出缓冲区写入数据。

6)CommEvent:当MSComm控件在运行时发生错误或产生各种事件时,向程序返回错误或事件类型。

1.2 MSComm控件的事件该控件只有一个事件,即OnComm事件。

当CommEvent属性值发生变化时就会触发OnComm事件。

根据CommEvent属性值来分别执行各种情况下的处理程序。

2 MSComm控件实例应用2.1插入MSComm控件在VC++6.0中新建一个基于对话框的工程,命名为Test。

默认情况下,VC++6.0中不会包含MSComm控件,所以需要我们手动将MSComm控件加载到VC++6.0中。

基于VB的PC-单片机通信波特率自动检测方法

基于VB的PC-单片机通信波特率自动检测方法

基于VB的PC-单片机通信波特率自动检测方法
一.引言
主从分布式微机系统是控制领域广泛使用的微机系统。

主机一般由数据处
理能力强、有良好人机界面的PC 机担任,分机常以体积小、价格便宜、控制
能力强的单片机为核心。

信息量不大的PC 机—单片机通信一般采用串行通信
方式。

在分布式多波特率通信系统中,常常要求从机自身的波特率能随主机设
备自动调整以使系统适应性更强、更具智能化。

本文介绍:主机为PC 机用VB6.0 编程,从机为80C51 单片机时,利用微软的Mscomm 控件和单片机的定时/记数器实现单片机波特率准确自动检测的方法。

该方法硬件和软件实现容易、简单、实用。

二.MSComm 控件简介
微软MSComm 控件提供了一系列标准通信属性和方法,具有完善的串口数
据的发送和接收功能。

该控件具有两种处理方式:(1)事件驱动方式:由MSComm 控件的OnComm 事件捕获并处理通信错误及事件;(2)查询方式:通过检查CommEvent 属性的值来判断事件和错误。

当设置MSComm 控件的Settings 属性值为“9600,n,8,1”时表明:PC 机串口波特率为9600b/s, 帧格式为:无校验,一个起始位,8 个数据位,一个停止位。

一帧数据共10 位。

帧结构如下:
当设置MSComm 控件的Settings 属性值为“9600,e,8,1”时表明:PC 串口波特率为9600b/s, 帧格式为:一个起始位,8 个数据位,一个偶校验位,一个停止。

一帧数据共11 位。

帧结构如下:
其中D0~D7 是8 位数据位,D8 是偶校验位。

VBmscomm串口控件及及51单片机通讯使用指南

VBmscomm串口控件及及51单片机通讯使用指南

一、概述串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC间的通讯以及PC和单片机之间的通讯之中。

提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。

实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB中,一样能够实现串口通讯,甚至其实现方法和C、汇编相比,要更加快捷方便。

下面,笔者就介绍一下在VB中实现串口通讯的方法。

在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控件。

我们只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。

下面,笔者就简要地介绍一下MSComm控件的使用方法。

二、MSComm控件的主要属性、事件1、MSComm的属性常用属性和方法利用MSComm控件实现计算机通信的关键是理解并正确设置MSComm控件众多属性和方法。

以下是MSComm控件的常用属性和方法:●Commport:设置通讯所占用的串口号。

如设成1(默认值),表示对Com1进行操作。

语法 mPort[value ] (value 一整型值,说明端口号。

)说明在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。

但是如果用PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。

注意:必须在打开端口之前设置 CommPort 属性。

●CTSHolding 属性:确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。

Clear To Send 是调制解调器发送到相联计算机的信号,指示传输可以进行。

该属性在设计时无效,在运行时为只读。

语法: object.CTSHolding(Boolean)Mscomm 控件的 CTSHolding 属性设置值:True Clear To Send 线为高电平。

自动检测串口通讯波特率

自动检测串口通讯波特率

自动检测80C51串行通讯中的波特率本文介绍一种在80C51串行通讯应用中自动检测波特率的方法。

按照经验,程序起动后所接收到的第1个字符用于测量波特率。

这种方法可以不用设定难于记忆的开关,还可以免去在有关应用中使用多种不同波特率的烦恼。

人们可以设想:一种可靠地实现自动波特检测的方法是可能的,它无须严格限制可被确认的字符。

问题是:在各种的条件下,如何可以在大量允许出现的字符中找出波特率的定时间隔。

显然,最快捷的方法是检测一个单独位时间(single bit time ),以确定接收波特率应该是多少。

可是,在RS-232模式下,许多ASCII 字符并不能测量出一个单独位时间。

对于大多数字符来说,只要波特率存在合理波动(这里的波特率是指标准波特率),从起始位到最后一位“可见”位的数据传输周期就会在一定范围内发生变化。

此外,许多系统采用8位数据、无奇偶校验的格式传输ASCII 字符。

在这种格式里,普通ASCII 字节不会有MSB 设定,并且,UART 总是先发送数据低位(LSB ),后发送数据高位(MSB ),我们总会看见数据的停止位。

在下面的波特率检测程序中,先等待串行通讯输入管脚的起始信号(下降沿),然后起动定时器T0。

在其后的串行数据的每一个上升沿,将定时器T0的数值捕获并保存。

当定时器T0溢出时,其最后一次捕获的数值即为从串行数据起始位到最后一个上升沿(我们假设是停止位)过程所持续的时间。

CmpTable 表格列出了每一波特率的最大测量时间。

这些数据是经过选择的,所以,4个数据位时间(加上起始位时间)仍可产生正确的波特率。

使用这种方法时,必须遵守一个假设:这种技术仅取决于所接收到的一个字符,接收这个字符的波特率必须大于最低波特率。

本质上来说,这意味着这个字符必须来自正常敲击键盘时所产生的字符。

在PC 上,我们不可能快速、连续地敲击两个字符,以欺骗程序。

但是,PC 的功能键具有一个问题,因为它会连续发送两个紧挨着的字符,使程序检测得到错误的波特率。

自动波特率检测原理

自动波特率检测原理

自动波特率检测原理1.串口通信基础串口通信是一种通过串行口进行数据传输的通信方式。

在串口通信中,数据是按照位来传输的,每个字节由一个起始位、数据位、校验位和停止位组成。

波特率(Baud Rate)是指单位时间内传输的位数,它表示通信速度的参数。

2.波特率的意义波特率决定了在单位时间内传输的位数,它直接影响到数据传输的速度和稳定性。

因此,波特率的设置需要与通信设备一致,才能保证通信的正确进行。

3.自动波特率检测的需求在实际的串口通信中,设备之间的波特率可能会有不一致的情况,这就导致通信数据的乱码或者通信错误。

为了解决这个问题,需要对波特率进行检测和确认,从而保证通信的准确性和稳定性。

4.自动波特率检测的原理(1)设置串口基础参数:在进行波特率检测前,需要先设置串口的基本参数,包括通信端口号、数据位、校验位、停止位等。

(2)发送已知数据:通过串口发送一组已知的数据,例如一段固定的字符串。

这组数据是事先定义好的,可以包含一些特殊字符或者固定的数据格式。

(3)监听接收数据:在发送数据后,通过串口接收数据,并监听接收数据的波特率。

(4)解析接收数据:根据已知数据的格式和特征,解析接收到的数据块,以找出其中的波特率。

(5)比较波特率:将接收到的波特率与预设波特率进行比较,如果一致则波特率自动确认,如果不一致则继续进行下一轮波特率检测。

5.自动波特率检测的实现(1)软件实现:通过编程语言访问串口接口,在程序中实现自动波特率检测的逻辑。

在数据发送和接收过程中,通过编程逻辑解析接收数据,判断波特率是否正确。

(2)硬件实现:通过硬件电路实现波特率检测的功能。

常用的方法是通过触发器、计数器等电路元件,对接收数据进行采样和计数,从而判断波特率是否匹配。

6.应用场景总结:。

自动波特率检测方法

自动波特率检测方法

自动波特率检测方法
1 波特率自动识别的传统方法及基本原理
串行通信的数据是按位顺序传输的,而异步串行通信由于没有位定时时钟,因此各个数据位之问需要严格的定时,才能保证正确的通信。

也就是说,只有在通信双方波特率相同时,才能实现数据的正确传输与接收。

传统的波特率自动识别的方法主要有两种:
①标准波特率穷举法。

标准波特率穷举法适用于主机侧的波特率必须在有限的几个固定数值之间变化,如300~19200之间的标准值;且从机侧的工作振荡频率已知且稳定。

从机启动通信程序后,逐个尝试以不同的波特率接收主机发出的特定字符,直到能正确接收为止,因此,该方法的运用有一定的局限性。

②码元宽度实时检测法。

该方法要求主机按照约定发送某一数据,从机通过单片机的定时器测量RXD引脚上输入数据的码元宽度,而后计算出待测系统通信的波特率。

该方法目前应用比较广泛。

例如,某GSM模块在设计时为了适应各种通信波特率,要求其通信的系统首先发送08H,之后发送指令,它就是依靠数据08H的码元宽度计算出对方波特率的。

串口MSComm控件五种不同校验方式对数据收发的影响

串口MSComm控件五种不同校验方式对数据收发的影响

串口MSComm控件五种不同校验方式对数据收发的影响串口MSComm控件有五种校验方式,分别是无校验(None),奇校验(Odd),偶校验(Even),1校验(Mark),0校验(Space)。

在RS232/RS485/RS422通讯中,通过串口发送一字节(8BIT)数据时,首先发送起始位(固定为0),然后发送8位数据(先低位后高位),如果校验方式不是无校验(None),则紧接着会发送一位校验位,最后发送停止位。

停止位固定为1。

停止位依据串口属性的设置可为1位,1.5位或2位。

为了说明简洁起见,下面均假设停止位位数为1而数据位位数为8。

在数据发送时,如果校验方式设置为无校验(None),则不发送校验位;否则会发送一位校验位。

具体地,如果校验方式设置为1校验(Mark),校验位固定为1;如果校验方式设置为0校验(Space),校验位固定为0;如果校验位为奇校验(Odd),或者偶校验(Even),那么校验位可能为0也可能为1,依据所发送的数据计算得出。

计算方法:如果是奇校验,那么8位数据和1位校验位的累加和必是奇数;对应的,如果是偶校验,8位数据和1位校验位的累加和必为偶数。

比如,数据37,其二进制编码为00100101,编码中含有5个0和3个1,5*0+3*1=3,如果采用奇校验,那么校验位为0;如果使用偶校验,校验位则为1。

使用MSComm控件发送数据时,校验位无需用户干预,数据发送时自动地由操作系统计算、添加、发出。

串口MSComm控件在接收数据时,如果无校验,则只要检测到串口出现了数据,数据总能收到(试验发现,即使停止位为0也不会被认为是错误帧而遭遇抛弃);而采用了某种校验后,只有校验通码正确的数据才能被正确地收到。

试验中发现,发生校验错的那些数据在后面能校验通过的数据被收到时才被输出,输出值一律为5BH。

为什么是5BH(‘[’)呢?不明白,纳闷中…下面是试验过程中的截图:第一组试验:发送方发送的1个数据桢有10位组成:1位起始位,8位数据位,1位停止位试验(1.1)发方:9600,N,8,1(发出的数据位数为8)收方:9600,N,8,1解读:协议完全匹配,所有数据均能被正确收到。

单片机串口通信波特率自动识别分解

单片机串口通信波特率自动识别分解

毕业设计说明书设计题目:单片机串口通信波特率自动识别学院计算机科学与信息工程学院专业年级自动化2008级学生姓名何泽宏学号 2008133220 指导教师刘传文职称讲师设计地点重庆工商大学日期2012.02.27——2012.05.18单片机串口通讯波特率的自动识别重庆工商大学自动化 2008级 2班何泽宏指导教师:刘传文摘要:本设计是基于串口通信,设计能够自动识别上位机波特率的系统。

要自动识别串口通信波特率,通常的实现方法是,上位机首先发出规定的字符或数据,系统收到该字符或数据后,下位机计算对方的波特率,以适应对方的波特率进行工作。

本系统正是利用这种方法,让上位机先发送一段字符,下位机使用软件的方法检测出一位数据发送时间,从而计算出上位机发送数据波特率。

关键词:串行通信波特率自动识别发送检测Abstact:The design is based on serial communication, designed to automatically identify thebaud rate of the host computer system. To automatically identify the serial communication baud rate, the usual method, the host computer by first issuing acharacter or data, the system receives the character or data, the next bit machine, theother baud rate to adapt to each other's baud rate to work. The system took advantage ofthis method, the host computer first sends a character, the machine software to detect adata transmission time, in order to estimate the host computer to send data baud rate.Key words:serial communication baud rate automatically send detect目录第一章绪论 (1)1.1 课题研究背景 (1)1.2 串口通信基础 (2)1.2.1 同步通信(Synchronous Communication) (2)1.2.2 异步通信(Asynchronous Communication) (2)1.2.3 串行通信波特率 (3)1.2.4 串行通信制式 (3)1.2.5 串行通信校验 (4)1.3 波特率自动识别研究现状 (5)1.3.1 标准波特率穷举法 (5)1.3.2 码元宽度实时检测法 (5)1.3.3 最大公约数法 (6)1.4 设计任务及要求 (6)第二章系统方案设计 (7)2.1 系统功能指标 (7)2.2 系统设计思路及方案论证 (7)2.3 系统方案确定 (10)第三章硬件设计 (11)3.1 设计系统框图 (11)3.2 芯片选择 (12)3.2.1 单片机选择 (12)3.2.2 串行总线通信芯片 (15)3.2.3 显示芯片 (15)3.3 其它模块电路图 (17)3.3.1 电源电路 (17)3.3.2 复位电路 (17)3.3.3 时钟电路 (19)3.3.4 系统总电路 (19)第四章软件设计 (21)4.1 程序结构设计 (21)4.2 程序流程图 (21)4.2.1 一位低电平脉宽测量程序框图 (21)4.2.2 主函数框图 (22)4.3 一位低电平脉宽测量程序 (22)4.4 编译环境 (24)第五章系统调试及运行结果 (25)5.1 硬件调试 (25)5.1.1 LCD调试结果 (25)5.1.2 单片机外围电路调试 (25)5.1.3 串口调试 (25)5.2 软件调试 (25)5.3 联合调试 (26)5.3.1 生成HEX文件 (26)5.3.2 将生成的HEX文件烧录到单片机 (27)5.3.3 联合调试效果 (28)第六章结论及总结 (30)致谢 (31)参考文献 (32)附录: (32)第一章绪论1.1 课题研究背景近年来,随着科学技术的发展,PC机以其优越的性价比和丰富的软件资源成为计算机应用的主流机种。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
波特率 6 0 1 0 2 0 4 0 9 0 9 0 8 0 7 0 0 2 0 4 0 8 0 6 0 1 2 03 4 05 6 0
以字符 串形 式设 置或 返 回传 输速 率 、 校 验方 式 、 位 数
据位、 停止 位等 。如 本例 设为 “ 9 0 n 8 1 , 12 0, , ,” 表示 波 特率
怎 样 既不 牺 牲 VB语 言 和 MS o m 的简 单 方 便 性 . Cm 而又能 自动测 出终 端 的通信 速率 . 以调整使 主机波特 率与
之 一致 ?本文 通过 一个 实验 , 出易 行 的方法 。 给 1 硬软 件装 置
11 硬 件 .
通讯 事 件或错 误 的返 回值
关 键词 : 串口通讯 ; Co ; 特 率 ; MS mm 波 自动检 测 中图分 类号 : P 9 T 3 文 献标 识码 : A 文章 编号 :6 2 0 7 2 0 )5 0 4 — 3 17 —06 (0 7 0 — 13 0 从 输入 缓 冲区 中返 回并删 除字符 。
Ou p t tu
编 程 的 Aci x控 件 , te v 它使应 用 程序 编程 容易 和可 靠 。 MS o C mm控 件 的属性 与本 文有关 的如下 :
C mmP r o ot
同时运 行两 个程 序 . 两个 程 序 间传送 数据 . 在 模拟 主
机 与终 端 间的通讯 主机波 特率 设为 1 2 0 终端 以不 同波特 率发 送 字符 90 .

设置 通讯 端 口号码
S ti g et s n
a ’

接 收 到 的字 节转 为 十 六 进制 符 , 到 表一 ( : 得 注 因收
发 波特 率不 同 的原 因 . 主机 端 可能 得 到 的不 止 一个 字节 .
取 第一个 ) 。
表 1 以 1 2 0 波 特 率 接 收 90
12 软 件 _
1. .1 2 MS mm 控 件 简 介 Co
本 文使用 V .. 序设 计语 言 。 B60程
软 件设 计为 两个 独 立程 序 以模 拟两 台机 器 :主机 与
终端 , 各使 用一个 MS o m 控 件 。通过 对 C mm o Cm o P  ̄属性 的设 置 . 主机 程 序 端 口设 为 C M1 终 端程 序 端 口设 为 将 O . C M3 O 。各 用 MS o C mm控 件 通 过 C M1和 C M3端 口进 O O
C m 用它 来处 理与 通讯 有关 的事 务 。 o m.
1 . 软 件 设 计 .2 2
用一 台 P C机 和一 条 US B转 串 口转接线 . 串 口与一 将 个 U B接 口相 连接 。用 一 台计算 机模 拟一个 主机与 一个 S 终 端进行 串 口通 讯 。主机使 用 RS 3 2 2串 1( 为 C M1 , 2设 I O ) 终 端使 用 一个 U B接 口. S 但通 过 U B转 串 口转接 线转 为 S 虚 拟 串 口( 为 C M3 。更 简 单地 , 直接 将 P 设 O ) 可 C机 串行 接 1 的 2 3脚短 接 . 2 I 、 可省 去转 接 线 , 不 用 U B 口, 是 也 S 只 实 感 略差 些 。本文 以前 一种 方式 为例 。
Vo .6 11 N O6 . NO . 2 0 V 0 7
基 于 MS o C mm 串口通讯 的波特 率 自动检 测 方法



( 重庆电子 工程职 业学院 , 重庆 4 13 ) 0 3 1
摘 要 : 过 对一 个 实验 结果 的原 理 分析 而 确定 , 收 、 两端 波 特 率 不 同情 况下 , 通 在 发 对具 体 的 字节 , 收 接 端 的“ 误读 ” 具有唯 一性 , 而提 出一种 串口通讯 中波 特率 自动检 测 的方 法 。 从
Ip t d n u 0 以文本 方 式 返 回 , 1 为 . 为 ,
以二进制 方 式返 回。
MS o m 提供 两 种通 讯方 式 : 件方 式 和查 询方 式 。 Cm 事 本 文使 用 事 件方 式 .而 MS o m 控 件 的唯一 事 件是 O 。 Cm n
将 字符 写入 输 出缓 冲区
Rtr s od he h l
设 置或 返 回 引发接 收事 件 的字 符数 。本 文设 为 1当 . 有 一个 字符 到达 时 , 引发 O C mm事 件 。 就 no
Co mmEv n et
V B环境和 M C m S o m控件 的 自 身特点 , 就有些勉 为其难 。
行通 讯
2 运 行 实 验 与 分 析 21 运 行 实 验 .
MS o 控 件 全 称 为 Mi oot o C mm c sf C mmu iai sC n r nct n o . o t1 r .是 Mirsf 公 司 提供 的简化 Widws下 串行 通 信 o coot no
通过对一个实验结果的原理分析而确定在收发两端波特率不同情况下对具体的字节接收端的误读具有唯一性
维普资讯
第 1 卷 第 6期 6
20 0 7年 1 1月
重庆 职 业 技 术 学 院 学报
o um a fCh n qngVocto a lo o 2 i ai n l& Te h clI siu e c nia n tt t
P C机 的 R 2 2串口通 讯.一般 使用 MS o m控 件进 S3 Cm 行, 尤其在 VB环境 中。 该控件 通信波特率 有 1 0 3 0 6 0 1 、0 、0 、 10 、4 0 4 0 、6 0 1 2 0 2 80 5 6 0 15 0 2 0 2 0 、 80 9 0 、9 0 、8 0 、7 0 、1 2 0等 。由 于通讯 终端 的多样性 . 其通信 速率 也就有 多种可 能 。 有时 , 需要 主机端测定并调整波特率去适应终 端机。若 使用操作底 层硬件 ,测定 传送速率 的方法来确定 .而 由于
相关文档
最新文档