新闻中心

EEPW首页 > 测试测量 > 设计应用 > 基于VB的PC-单片机通信波特率自动检测方法

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

作者:时间:2012-03-10来源:网络收藏

一.引言

主从分布式微机系统是控制领域广泛使用的微机系统。主机一般由数据处理能力强、有良好人机界面的担任,分机常以体积小、价格便宜、控制能力强的为核心。
信息量不大的通信一般采用串行通信方式。在分布式多通信系统中,常常要求从机自身的能随主机设备自动调整以使系统适应性更强、更具智能化。
本文介绍:主机为用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是偶校验位。

三.硬件原理框图


四.软件算法思想

通信开始时,主机用一帧十位的格式发一个ASCII码为0的测试字符,则对应的帧结构如下:

单片机循环检测RXD脚,无数据时该脚为高电平,当检测到测试数据起始位时(低电平)启动计数器T0,当检测到停止位时(高电平)停止记数,T0所记数(TH0TL0)为单片机接收一帧数据9位所需的机器数时间。则,单片机波特率为:
波特率=9/(TH0TL0 x 机器周期)
=9/(TH0TL0 x 12 x 振荡周期)
=(9 x 振荡频率)/(TH0TL0 x 12)

五.主机发送ASCII码值为0的字符的源程序

Private Sub Form_Load()
MSComm1.CommPort = 1 ;使用COM1串口
MSComm1.Settings = "9600,n,8,1" ;设置通信格式,见本文一
End Sub

Private Sub Send_Click()
If MSComm1.PortOpen = False Then MSComm1.PortOpen = True ;打开串口COM1
MSComm1.OutBufferCount = 0 ;清0发送缓冲区发送字符数
A =Chr(0) ;ASCII码为0的字符送A
MSComm1.Output = A ;发送
End Sub

说明:若程序中MSComm1.Settings = "9600,e,8,1",则发送的是一帧11位偶校验数据,其中D0~D8均为0。对应单片机检测程序(见下文五)TH0TL0结果值为一帧10位的对应机器数值。

六.单片机接收测试数据,计算接收一帧9位数据所需机器数时间,源程序如下:

ORG 8000H
MOV TMOD,#01H ;T0工作于方式1,GATE=0
MOV TH0,#00H ;清0 TH0TL0
MOV TL0,#00H
RLL1: JB P3.0,RLL1 ;等待RXD脚变低
SETB TR0 ;启动T0
RLL2: JNB P3.0,RLL2 ;等待RXD脚变高
CLR TR0 ;停止T0记数
MOV A,TL0 ;存放一帧9位记数机器数值
MOV A,TH0
 ......

参考书:

石东海 扈啸 周旭升《单片机数据通信技术从入门到精通》西安电子科技大学出版社 2002
复旦大学微机开发应用研究室《MCS—51微型计算机用户手册》1986



评论


相关推荐

技术专区

关闭