好文档 - 专业文书写作范文服务资料分享网站

Basic实现PC与89C51单片机之间的串行通信

天下 分享 时间: 加入收藏 我要投稿 点赞

……………………………………………………………精品资料推荐…………………………………………………

运用Visual Basic实现PC与89C51单片机之间的串行通信

作者:沈 飙 夏海燕

摘要 在Visual Basic开发环境下,运用VB提供的通信控件,实现PC机与89C51单片机之间的串行通信。

关键词 Visual Basic 89C51单片机 串行通信 A/D D/A转换

Serial Communication between PC and 89C51 with Visual Basic

Abstract:Serial communication between PC and 89C51 single-chip-computer by MSCOMM control box of Visual Basic is introduced.

Key Words:Visual Basic 89C51 Serial communication A/D D/A

1 系统简介

在中科院等离子体物理研究所受控核聚变物理实验装置控制系统中,我们开发设计了以计算机控制为基础的各种信号予置系统,系统原理如图1所示。

图1 系统原理图

系统上位机由一台(PC586)微机构成,软件采用Visual Basic编程,作出十分直观的人机界面,并通过串行口将所需的各种予置信号(数字信号)传给单片机系统,再由单片机系统产生实际的模拟信号经线性光电隔离器送到现场。予置数值可以分别显示在PC机软件窗口和单片机系统的予置数字表头上。同时,现场实测信号经过线性光电隔离器,也可以实时显示在本系统的检测数字表头上和PC机的界面上。如此设计界面直观,而且利于对现场信号进行实时监测。因此,采用本系统,大大提高了现场信号予置精度,对实验操作人员来说人机界面良好,简单易懂。我们将分硬件和软件两方面分别介绍该系统的情况。

2 硬件介绍

从系统原理图上可见,本系统关键的硬件部分是单片机系统的设计,上位机PC机则直接利用它的RS232串行口即可。系统硬件原理如图2所示。

1

……………………………………………………………精品资料推荐…………………………………………………

图2 系统硬件原理图

本系统采用CPU为89C51的单片微机,89C51本身带有2K的内存储器,可以在编程器上实现闪烁式的电擦写达几万次以上,比以往惯用的8031CPU外加EPROM为核心的单片机系统在硬件上具有更加简单、方便等优点,而且完全兼容MCS 51系列单片机的所有功能。该单片机系统的工作流程是这样的:89C51单片机利用自身具有的串行通信口,直接接收PC机传送下来的串行数据,然后将所接收的各组数据通过并行口输出,经过数字光隔,送到数据锁存器74LS373,最后将锁存的数据送到D/A转换器进行数模转换并通过运放将模拟信号输出,同时显示在相应的予置数字表上。现场返回的信号通过隔离,经过A/D转换器和数据锁存器变成单片机所需的并行数字信号送到单片机的数据存储单元中,再由串行口返送到PC机上,同时显示在PC机界面和本系统相对应的检测数字表上以便于予置和实际情况相对比。利用89C51输出口对不同数据锁存器74LS373和A/D、D/A的片选输出可以实现一台单片机同时对多路不同信号进行予置和检测。

3 软件结构

软件分PC机Visual Basic编程和89C51单片机汇编语言编程两部分,现分别介绍如下。 3.1 PC机部分

PC机采用Visual Basic(简称VB)编程。目前,VB已成为WINDOWS系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。VB支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件,而且可以十分简便地作出良好的人机界面。在标准串口通信方面,VB提供了具有强大功能的通信控件MSCOMM,文件名为MSCOMM.VBX。该控件可设置串行通信的数据发送和接收,对串口状态及串口通信的信息格式和协议进行设置。这是一个标准的十位串口通信,包括8位标准数据和数据的起始位和停止位。在发送或接收数据过程中触发OnComm事件,通过编程访问CommEvent属性了解通信事件的类型,分别进行各自的处理。每个通信控件对应一个串口,可以设计多个通信控件来访问多个通信口。VB通信控件设计软件如下:

2

……………………………………………………………精品资料推荐…………………………………………………

Global comm_time As Integer //定义一些全局变量 Global data(1000)As Integer Global Receive(1000)As Integer

Private Sub Form_Load()’ //串口初始化 Comml.CommPort=1 //设置串口1

Comml.Settings=“9600,N,8,1” //波特率:9600 奇校验,8位数据,1位停止位 Comml.InputLen=0 //读取接收缓冲区的所有字符

Comml.InBufferSize=256 //设置接收缓冲区为256字节 Comml.OutBufferSize=256 //设置发送缓冲区为256字节 Comml.PortOpen=True //打开串口1

Comml.SThreshold=1 //发送缓冲区空触发发送事件

Comml.RThreshold=1 //每一个字符到接收缓冲区都触发接收事件 End Sub

Public Sub send-data() //发送n个数据 For i=0 To n

Comml.Output=Chr(data(i)) Next i End Sub

Public Sub Comml_OnComm() //接收数据触发OnComm()事件 Select Case Comml.CommEvent //在CommEvent中接收数据 Case comEvReceive

Receive(comm_time)=Asc(Comml.Input) //将接收数据放在Receive(comm-time)数组中 Comm_time=comm_time+1 End Select End Sub

3.2 单片机部分

单片机89C51采用MCS51系列的汇编语言编程。它有一个标准的串行口,有4种工作方式,其中方式1是标准的10位异步通信方式,10位数据和PC机的标准串口相对应,由串行口控制寄存器SCON设置状态,其字节地址为98H。如下式所示:

SM0 SM1 SM2 REN TB8 RB8 T1 R1

本系统中89C51串口控制器SCON设置为50H,SM0、SM1为0、1,即为串行工作方式1,REN为1,即允许串口接收。另外,还应使89C51的中断允许寄存器IE的开放或禁止所有中断位EA为1,开放或禁止串行通道中断位ES为1,即允许串行口中断。89C51的并行口P0和P2分别作为八位数据的输入和输出口。P3口的输出作为数据锁存器和D/A、A/D的禁止和允许。程序流程如图4所示。 单片机程序清单简介: (1)主程序

MOV SP,#07

ACALL INIT //调串口初始化子程序 STRAT:CLR EA 清中断

MOV R0,#DATA1 存放接收数据首地址#DATA1 MOV R1,#DATA2 存放发送数据首地址#DATA2

3

Basic实现PC与89C51单片机之间的串行通信

……………………………………………………………精品资料推荐…………………………………………………运用VisualBasic实现PC与89C51单片机之间的串行通信作者:沈飙夏海燕摘要在VisualBasic开发环境下,运用VB提供的通信控件,实现PC机与89C51单片机之间的串行通信。关键词VisualBa
推荐度:
点击下载文档文档为doc格式
79hp681kbs2xzhu2kzn0175lm26kup00a1w
领取福利

微信扫码领取福利

微信扫码分享