用VB 编程语言实现PC机与AVR 单片机的通信

分享到:

0  引 言
在当今,网络技术越来越多地应用在各个领域,微机技术及单片机也不断发展,因此,目前大多数小型计算机监控系统都采用以PC 机和单片机构成的串行通信网络来完成监控任务。其中,单片机主要进行对数据的实时采集、处理,再通过串口将数据送入PC 机的缓冲区,然后由PC 机对数据进行进一步处理,以便得到所需的图形、图像及实验结果。采用VB 语言中的通信控件能够很好地完成二者之间的通信功能。
1  系统简介
本系统是一个小型的人体心电监测系统,将心电信号采出后经过A/ D 转换,由PC 机绘制出心电图形,进行实时显示,便于医护人员观察和诊断,系统原理如图1 所示。系统的下位机即单片机系统,将现场采集的信号经A/ D 转换送入系统上位机。系统上位机由一台PC 机构成,采用Vi2sual Basic 编程,做出友好的界面风格,可实时观察心电信号。
图1  系统原理图
2  MSCOMM 控件功能介绍
VB 提供了一个基本通信控件MSCOMM32.OCX ,它具备串行通信的能力,可以通过串口接收
和传输数据。
CommPort :端口号,用于选择通过哪个端口进行通信。
InBufferCount :返回接收缓冲区中等待的字符数,可以通过置0 来清空缓冲区。
InBufferSize :设置并返回接收缓冲区的字节数。
Settings :设置并返回波特率、奇偶校验、数位、停止位参数。通常设置为:“9 600 , n ,8 ,1”。
PortOpen :设置并返回通讯端口的状态(开或关) 。端口打开后,可以直接读写数据流。
Input :返回并删除接收缓冲区中的数据流。
InputLen :设置并返回Input 属性从接收缓冲区读取的字符数。
InputMode :设置或返回Input 属性取回的数据的类型。
Output :往传输缓冲区写数据流。
3  通信协议
1) 上位机与下位机通信的数据格式均为起始位,命令码,帧长,信息段,校验和,停止位。
起始位与停止位标定一次发送,起始位以前和停止位以后的数据均视为干扰信号。
帧长记录了信息段和校验和总共的字节数。
2) 所有的数据均按ASCII 码(十六进制) 操作。
3) 具体定义如下
信息中的每8 位(1 字节) 作为2 个字符发送。每8 位表示成16 进制数,高4 位、低4 位分
别对应一个ASCII 字符0~9 、A~F。
本协议以“:”(ASCII 值为0X3A) 开始,其次为命令码:8 位、信息段:长度由待发数据而定、校验和:8 位,最后以“回车”或“换行”(ASCII值分别为0X0D、0X0A) 结束。其中,校验和的计算方法为256 - [命令码+信息段长度] mod 256 (mod 表示求余) 。
根据功能不同设置了2 个命令码10 (ASCII值分别为0X31 、0X30) 和11 (ASCII 值分别为0X31 、0X31) 。在起始符后即为命令码,判断该值,以便转向相应的处理程序。
4  软件实现
MSCOMM 控件的使用使得用户不需要对通信底层进行操作,简便而有效。它有事件驱动和查询2 种通信方式,由于本系统只是一个小型的监测系统,因此,采用查询方式即可满足要求。放置一个定时器,参数设定为500 ms ,即每0. 5 s 检测一次缓冲区,将数据读入。

图2  程序流程图
以下是加载窗体时对MSCOMM 控件的初
始化设置
Private Sub Form  Load ()
With MSComm1
. CommPort = 1 ’设置通讯端口
. InBufferCount = 0 ’清空缓冲区
. InBufferSize = 5 000
’设置通讯波特率等
. Settings = “9 600 , n ,8 ,1”
If (PortOpen = False) Then
PortOpen = True
End if’将取出的数据设置为二进制
. InputMode = comInputModeBinary
End With
End Sub
接收按钮按下时,定时器启动,开始检查缓冲区中是否有数据。本系统定义了2 个定时器,一个用于对通讯协议中起始符和命令码的检测,另一个用于控制信息段的数据流。
接收数据时,定义一个变体(Variant) 类型的变量tempbuf ,将缓冲区内的数据赋给此变量tempbuf = MSComm1. Input ,同时还要定义一个字节(Byte) 型的数组变量indate () ,再次赋值indate = tempbuf ,这样就可以操作indate () 中的数据了。
由于Input 属性在取出数据后会自动清空缓冲区,因此不再需要用其他代码强制清空。
为了解决传输干扰的问题,还要求上位机给下位机发送数据,以通知下位机接收的数据是否无误,从而使下位机决定是否重新发送数据。
发送数据时,定义一字符串(St ring) 类型的数组变量outdate ( ) ,将需要发送的数据赋给变量,然后用下面语句发送MSComm1. Output = CVar (outdate)
5  硬件实现
实现电路如图3 所示。
AT90 系列单片机带有一个全双工的通用串行异步收发器(UART) ,数据传送通过把被传送的数据写入UART I/ O寄存器UDR 来初始化,在波特率时钟加载到移位寄存器的传送操作时,起始位从TXD 引脚移出,然后是数据,低位在先。当停止位被移出时UDR 寄存器中没有新的数据,UDRE 标志位将保
持为1 直到UDR 被重写。而在数据接收时,接收器前端的逻辑以16 倍波特率采样RXD 引脚的信号。如果一个有效的起始位被发现,就开始起始位之后的数据位的采样,在采样的同时,这些位被移入传送移位寄存器。当停止位到来时,3 个采样中的大数应为1 才能接收该停止位。
图3  硬件实现电路
6  结束语
本系统试运行已经成功,说明MSCOMM 控件完全可以实现各种高速复杂的串行通信协议,具有很高的实用价值。
参 考 文 献
[1 ]  耿德根,宋建国,马潮. AVR 高速嵌入式单片机原理与应用[M] . 北京:北京航空航天大学出版社,
2001.
[2 ]  东箭工作室. Visual Basic 5. 0 中文版程序设计[M] . 北京:清华大学出版社,1997.InBufferSize :设置并返回接收缓冲区的字节数。
 

继续阅读
掌握物联网产品五大技术架构 普及智能家居

技术框架的提出往往只是为了理解问题,并没有一个固定的标准,也没有严格的界限。例如在产品部分的连网部件中,也有用于网络连接的元器件和通信协议。对技术架构的了解,将有助于从整体的层面去掌握技术。其不只局限于智能家居产品,也可以供其他智能产品参考使用。

物联网低功耗广域网络的参数比较

通信协议无疑是物联网中争论最多的领域之一,这些争论中,有些是标准之争,有些是专利之争,其中无线通信是物联网领域普遍关注的话题。物联网智库讨论过WiFi、蓝牙、Zigbee之争,但这些协议均为局域网络协议,广域网络方面当前功耗和成本的经济性越来越吸引物联网的应用者,被称为低功耗广域网络(Low Power Wide Area,LPWA)。

基于串行通信的智能家居上位机设计

上位机设计是智能家居系统的一个重要组成部分,担负着管理、控制、维护和用户界面操作的重任,高效可靠的上位机设计是整个系统正常运作的重要保障。

PC 机与AVR 单片机之间串行通信的实现

基于RS 232 串行通信协议, 阐述了一种PC 机与AVR 系列单片机A tmega128 之间串行通信的实现方式, 实现了PC 机与单片机间数据的双向传输。其中PC 机为主发送端, 单片机为主接收端。硬件上, 简单介绍了利用MAX232E芯片解决PC 机与单片机电气规范不一致的方法。软件上, PC 机端通信程序采用C 语言编程, 运用Turbo C 库函数bio s1h中提供的调用B IO S 软中断的函数bio scom () 实现; 单片机端通信程序采用C51 编程, 使用UART 接收结束中断、UART 发 送结束中断。本文提供了相关C 语言和C51 源程序。

基于AVR单片机的智能电池充电器的设计与实现方案

介绍了以AVR 单片机为核心智能充电器的控制原理,讨论了充电器的硬件结构和软件设计思想。该充电器对充电过程进行全面管理,描述了充电检测的关键技术,实现了智能充电。并对充电电源、电压进行自动检测调整,充电后自动转为恒压浮充状态,使充电过程按理想的充电曲线进行,达到既保护电池、又能使电池充满的最佳效果等要求。这种全新的智能充电方式,有效地解决了普通充电器将蓄电池“充坏”的技术难题,大幅度提高了蓄电池的实际循环寿命,是电动自动车、电动汽车的理想产品。

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss