微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 在VB下PC机与MCS-51单片机的串行通信

在VB下PC机与MCS-51单片机的串行通信

时间:01-30 来源:互联网 点击:

  在开发微机控制及数据采集的系统中,经常需要通过RS232接口实现PC机与单片机之间的串行通信。在DOS时代,程序员须要具备相当的硬件知识,才有可能着手编写PC下的串行通信程序。而当今在VB下,利用现有的Microsoft Comm control控件,只需要编写少量的程序代码,就可以轻松、高效地完成任务。更何况Visual Basic是目前广受程序员喜爱的可视化编程语言,利用它还能够编写出Windows下漂亮的应用程序。

一、 Microsoft Comm control控件简介

  微软公司提供的Microsoft Comm control控件(简称MSComm)为编程者提供了简化的Windows下的串行通信编程,使编程者不必掌握诸多关于硬件方面的知识。它提供了两种处理串行通信的方法:一是事件驱动方法;二是查询法。

1. 事件驱动法

  这是一种很强的处理串口活动的方法。当串口接收到或发送完指定数量的数据时,或当状态发生改变时,MSComm 控件都将触发OnComm事件,该事件也可以捕获通信中的错误。当应用程序捕获到这些事件后,可通过检查MSComm控件的CommEvent属性的值来获知所发生的事件或错误,从而执行相应的处理。这种方法具有程序响应及时,可靠性高等优点。

2. 查询法

  可以在每个重要的程序之后查询MSComm控件某些属性(如CommEvent属性和InBufferCount属性)的值来检测事件和通信错误。这对小的自含程序可能比较常用。

  MSComm控件有许多重要的属性,其中几个重要的属性如下:

  · CommPort: 设置或返回通信端口。为1时对应COM1;为2时对应COM2。
  · Settings: 设置或返回波特率、奇偶校验、数据位和停止位参数。
  · PortOpen: 打开或关闭通信口。
  · Input: 读取或删除缓冲区中的数据流。
  · Output: 将数据写入发送缓冲区。
  · InputLen: 设置和返回Input属性从接收缓冲区中读取的字节数。
  · InputMode: 设置和返回的类型。该属性为0时,Input属性所检取的数据是文本;为1时,Input属性所检取的数据是二进制数据。这个属性对与单片机的通信尤为重要。

二、 通信线路连接

  PC机的某个串行口通过电缆线与RS232收发器MAX232的232电平端口三线交叉连接,如图1所示。MAX232的逻辑电平端口与单片机的串行口相连。PC机RS232的9针连接器的4脚和6脚、7脚和8脚不用连接。



图1 PC机与单片机的通信接口电路框图

三、 编程实现

1. 实现功能

  因本程序为通信演示程序,所以功能较为简单。具体功能为利用键盘在PC机中输入一个6字节(12位的 0~9,A~F)的二进制数,然后用鼠标点击通信命令按钮,PC机就将此二进制数发给单片机,单片机收到此数后再原样发回,PC机收到后显示在窗体上。试验者可通过肉眼比较发送和接收的两个数据,检验通信是否成功。

2. 通信协议

  波特率:19.2kb/s;无奇偶校验;8位数据位;1位停止位。

3. PC机VB程序

  (1) 在工程项目中添加一个窗体,取名为frmcomm,设置其Caption属性为通信。
  (2) 在窗体中添加两个大小一样的文本框,分别取名为txtSend和txtRcv。
  (3) 在窗体中添加一个命令按钮,取名为cmdcomm,设置其Caption属性为通信。
  (4) 在窗体中添加MSComm控件,取名为MSComm1。
  (5) 打开代码窗口,在cmdcomm控件的Click事件中加入以下程序代码:

Private Sub cmdcommClick()
  Dim Senddat(5) As Byte,Rcvdat() As Byte,
    dattemp As Variant,i As Integer
  cmdcomm.Enabled=False′使cmdcomm按钮失效
  For i=0 To 5′从发送文本框txtSend获取发送数据
    Senddat(i)="H" Mid(txtSend.Text,i * 2+1,2)
  Next i
  MSComm1.CommPort=1′设置端口号为1
  MSComm1.Settings="19200,N,8,1"′设置波特率等通 ′信协议
  MSComm1.InputLen=6′设置一次从串口读取6个字节
  MSComm1.PortOpen=True′打开串行口
  MSComm1.InputMode=comInputModeBinary′从串口 ′读取二进制数据
  MSComm1.Output=Senddat′发送数据
  Do Until MSComm1.InBufferCount >= 6′查询方式,等 ′待接收到6个字节
    DoEvents
  Loop
  dattemp=MSComm1.Input′从串口读取数据至变体变量
  Rcvdat=dattemp′数据送至接收二进制数组
    txtRcv.Text=""
  For i=0 To 5′接收数据送至接收文本框txtRcv显示
    txtRcv.Text=txtRcv.Text Right("0" Hex(Rcvdat(i)),2)
  Next i
  MSComm1.PortOpen=False′关闭串行口
  cmdcomm.Enabled=True′使能cmdcomm接钮
End Sub

(6) 选择开始-运行。用PC机键盘在输入文本框中输入要发送的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top