基于VB6_0的计算机与单片机串行通信_图文

安阳工学院学报

64

Journal of Anyang Institute of Technology

2007 年

基于 VB6.0 的计算机与单片机串行通信

张修太 1 胡雪惠 2
(1.安阳工学院,河南 安阳 455000;2.信阳师范学院,河南 信阳 464000)

摘要:介绍计算机与单片机串行通信的实现方案,其中计算机接收和发送数据是用 VB6 中的 MSCOMM 控件来实现

的,并将接收的数据保存在数据文中以备后继处理;单片机接收计算机的数据主要是用来设置单片机的工作参数的,单片机

定时向计算机发送一定的数据,主要是单片机产生的数据或由单片机检测的数据,用汇编语言编程。

关键词:串行通信;控件;单片机;MSComm;智能仪表;数据采集

中图分类号:TP311

文献标识码:A

文章编号:1673- 2928(2007)04- 0064- 05

串行通信在自动控制、数据采集、网络通信等 方面有着广泛的应用,下面就以具体的实例介绍 计算机与单片机之间的串行通信的实现方案。 1 基于 VB6 的串行通信[1,2] 1.1 VB6 串行通信的基础知识 1.1.1 用 VB 实现串行通信的方法
1)串行通信控件。Microsoft comm. Control 6.0 (MSComm);
2)应用程序接口。Windows API。采用串行通信 控件 MSComm 实现。 1.1.2 用 VB 实现串行通信的方式
1) 事件驱动方式。利用 MSComm 控件检查 CommEvent 事件属性值 (包括通信错误和通信事 件),当 MSComm 控件属性值与 CommEvent 事件属 性值相同时产生 Oncomm 事件,然后执行相应程 序,按照事件程序区中的程序实现数据的接收和 发送或者数据的保存等处理;本文利用 MSComm 的属性设置引发 Oncomm 事件实现数据接收。数 据发送是通过 Click 事件进行的。
2)程序查询方式。程序通过查询 CommEvent 的某一属性的值(包括通信错误值和通信事件值) 来确定是否进行数据接收和发送。 1.1.3 MSComm 控件属性
1)Commport。设置并返回通信端口号。有效端 口号为 1 到 16 的任何整数,必须在打开端口前设 置 Commport 属性。设置方法:Object. Commport=1
2)Settings。设置并返回波特率、奇偶校验、数 据位和停止位参数。波特率:一般取 110、300、600、 1200、2400、9600、14400、19200、28800、38400 等 ; 奇偶校验:E- 偶校验、O- 奇校验、N- 无校验;数

据位数:4、5、6、7、8;停止位数:1、1.5、2。设置格式:
Object.settings = 9600,N,8,1 3)InputMode。设置和返回 Input 属性取回的
数据类型。InputMode 设为 comInputModeText 时, 取回数据的格式为字符串,设为 comInputModeBinary 时,取回数据的格式为一个二 进制数据的数组。
4)Rthreshold 。设置并返回要接收的字符数。 Rthreshold 设为 0 时,不产生 Oncomm 事件,设为 一个整数时,接收缓冲区每收到这一整数个字符 都会产生 Oncomm 事件。
5)Sthreshold。设置并返回传输缓冲区中允许 最小字符数。Sthreshold 属性为 0 时,数据传输事件 不会产生 Oncomm 事件;如果 Sthreshold 属性为 6, 当在输出队列中字符数从 6 降到 5 时,产生 Oncomm 事件。
6)Inputlen。设置并返回 Input 属性接收缓冲 区读取的字符数。
7)Input。返回并删除接收缓冲区中的数据流。 Input 属性可以传输文本数据或二进制数据。用 Input 属性传输文本数据,必须定义一个包含一个 字符串的变量,发送二进制数据时,Input 属性通过 一个变量返回一个二进制数据的字节型数组。如 Object.Output=send( ),其中 send( )为 byte 型 数组。
8)Output。向传输缓冲区写数据流。Output 属 性可以传输文本数据或二进制数据,用 Output 属 性传输文本数据,必须定义一个包含一个字符串 的变量,发送二进制数据时,必须传递一个包含字 节数组的变量到 Output。如 receive=Object.Output,

收稿日期:2007- 04- 12 作者简介:张修太(1971- ),男,濮阳市人,安阳工学院电子信息与电气工程系工程师,主要从事电子信息方面的教学与研究。

第四期

张修太 胡雪惠:基于 VB6.0 的计算机与单片机串行通信

65

其中 receive()为 byte 型数组。 9)Outbuffersize。以字节的形式设置并返回传
输缓冲区的大小,缺省值为 512 字节。 10)Inbuffersize。设置并返回接收缓冲区的字
节数,即整个接收缓冲区的大小。接收缓冲越大则 应用程序的内存越小。 1.2 用 VB6 实现的数据接收和发送
用 VB6 实现串行通信主要是 利 用 MSComm 控件的 Input 和 Output 属性进行数据的接收和发 送的。在进行数据传输时数据接收和发送的格式 应特别注意,一般情况下,计算机与单片机的串行 通信是采用二进制的形式, 即以字节为数据单位。 数据接收和发送的格式由 InputMode 的属性决定, InputMode 应设为 comInputModeBinary,接收数据 时,将数据流赋给字节型数组,发送数据时,把字节 型数组中的数据发送到输出缓冲区。 1.3 用 VB6 实现文件操作与数据保存
文件的操作在数据采集和数据处理上具有重 要的意义。文件操作包括文件的建立、打开、数据 读出、数据写入和文件的关闭。
VB6 中提供了一套工具- 文件系统对象(File System Object),可以方便地实现文件、文件夹的移 动、添加、改变、创建和删除等操作。文件系统对象 模 型 中 包 含 Drive、Folder、Files、FileSystemtObject 和 Textstream 等对象,其中 FileSystemtObject 为主 要对象,它提供了一整套用于创建、删除、收集相关 信息、操作驱动器、文件和文件夹的方法; Textstream 对象允许读、写文本文件。
文件系统对象模型可以创建顺序型的文本文 件,方便地实现文件的打开、关闭、读和写等操作。 文 件 的 创 建 主 要 使 用 CreateTextFile 方 法 、带 ForWriting 属 性 的 OpenTextFile 方 法 和 带 ForWriting 属性的 OpenAsTextSteam 方法。添加数 据 到 文 件 主 要 使 用 Textstream 对 象 的 Write 和 Writeline 方 法 。 从 文 件 中 读 取 数 据 是 使 用 Textstream 对象的 Read、Readline 和 ReadAll 方法 实现的。 1.4 VB 串行通信实例
本例可以实现从单片机接收数据显示在窗体 中并保存在数据文件中,通过串行通信实现单片机 的时间设定。本实例设计主要包括用户界面即窗 体设计和程序设计。 1.4.1 窗体设计
窗体如图 1 所示,由图知该窗体中包含 4 个

标签,其中一个用来显示从单片机接收到的时间数 据,另外三个分别用来标出三个文本框的名称即 HOUR、MINUITE 和 SECOND;三个文本框用来输 入所设置的时间数据;三个命令按钮,清除按钮用 来清除文本框中的内容,发送按钮用来把文本框中 的内容发送给单片机,退出按钮用来退出应用程 序;一个串行通信控件 MSComm,该控件在程序设 计时可见,运行时不可见,主要用来进行串行通信 控件属性和参数的设置,本例中串行通信参数设置 如下:Commport=1;Inputlen=3;SThreshold=0;Input- Mode=1 - co mInputModeBinary;RThreshold=3 ;sett- ings=9600, n, 8,1; 其 他 参 数 可 为 默 认 值 。 添 加 MSComm 控件时,先在 Projects/components/controls 中选中 Microsoft Comm Control 6.0 选项,使控件 MSComm 出现在工具箱中,然后把该控件放在窗体 中,设置控件参数即可。
图 1 运行界面
1.4.2 程序设计 Option Explicit '= = = = = = = = = = = = = = = ' 窗体装载程序 Private Sub Form_Load() If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End If MSComm1.OutBufferCount = 0 MSComm1.InBufferCount = 0 End Sub '= = = = = = = = = = = = = = = = ' 数据接收和文件操作的 OnComm 事件程序 Private Sub MSComm1_OnComm() Dim fs As New FileSystemObject Dim ts As TextStream Dim minsec() As Byte

安阳工学院学报

66

Journal of Anyang Institute of Technology

2007 年

Dim aa, bb, cc Label1.Caption = "" minsec() = MSComm1.Input aa = minsec(0) bb = minsec(1) cc = minsec(2) Label1.Caption = aa & ":" & bb & ":" & cc If Not fs.FileExists("c:\tempreture.txt") Then Set ts = fs.CreateTextFile("c:\tempreture.txt") Else End If Set ts = fs.OpenTextFile ("c:\tempreture.txt", ForAppending, True) ts.WriteLine Label1.Caption ts.Close End Sub '= = = = = = = = = = = = = = = ' 清除命令程序 Private Sub Command1_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub '= = = = = = = = = = = = = = = ' 发送命令程序 Private Sub Command2_Click() Dim send(1 To 3) As Byte If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End If send(1) = Text1.Text send(2) = Text2.Text send(3) = Text3.Text MSComm1.Output = send End Sub '= = = = = = = = = = = = = = = ' 退出命令程序 Private Sub Command3_Click() Unload Me If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If End Sub '= = = = = = = = = = = = = = =

2 单片机串行通信[3,4] 2.1 单片机串行通信的基础知识
51 系列单片机内部有一个全双工的串行通信 端口,两个 SBUF 寄存器分别负责数据的接收和发 送,虽然两个 SBUF 寄存器占用同一地址,但通过 读取和写入 SBUF 寄存器的动作可以区分对哪个 SBUF 寄存器进行操作,因此串行通信可以同时进 行数据的接收和发送。
串行通信有四种工作模式,串行端口处于模 式 0 时,数据的发送和接收都是通过 RXD 引脚 进行的,TXD 负责发送移位脉冲,波特率为石英晶 体振荡频率的十二分之一;模式 1 时,RXD 和 TXD 引脚分别负责十位数据的接收和发送,波特 率可通过软件设定计时/ 计数器 1 进行确定;模 式 2 时,RXD 和 TXD 引脚分别负责十一位数据 的接收和发送,波特率由 PCON 寄存器的 SMOD 位决定;模式 3 与模式 2 基本相同,只是其波特 率可通过设定计时/ 计数器 1 进行调整。 2.2 单片机串行通信实例
本例是通过串行端口初始化、计时/ 计数器 1 的规划实现串行通信的。另外,本程序还实现了 时钟功能,时钟的时间设定是由计算机通过串行 通信完成的,具本程序如下:
;常量定义
HOUR EQU 30H
MINUITE EQU 31H
SECOND EQU 32H

ORG 00H JMP MAIN ORG 0BH JMP TRANSMITE ORG 23H JMP RECEIVE ORG 30H

MAIN: MOV SP,#5FH MOV TMOD,#21H
MOV TH1,#0FDH MOV TL1,#0FDH MOV TH0,#03CH MOV TL0,#0A0H

; 计时/ 计数器0 、1 分 ; 别为模式 1 和模式 2
; 计时/ 计数器初值

第四期

张修太 胡雪惠:基于 VB6.0 的计算机与单片机串行通信

67

SETB TR1

; 启动计时/ 计数器

SETB TR0 MOV SCON,#01010000B ; 串行通信模式 1

; 允许接收

MOV PCON,#00H

; SMOD=0

MOV IE,#10010010B

; 中断规划

MOV R3,#20

; 产生秒时间常数

MOV R4,#5 ; 5 秒钟发送一次数据的常数

MOV HOUR,#08

; 时钟初值

MOV MINUITE,#30

MOV SECOND,#00

LCALL TIME

; 时间显示子程序

WAIT1:

JMP ¥

TRANSMITE: ; 时间产生和数据发送的中断 ; 服务程序
PUSH PSW PUSH ACC MOV TH0,#03CH MOV TL0,#0A0H DJNZ R3,EXIT MOV R3,#20 ;= = = = = = = = = = = MOV A,SECOND CJNE A,#59,INCSEC MOV SECOND,#00 MOV A,MINUITE CJNE A,#59,INCMIN MOV MINUITE,#00 MOV A,HOUR CJNE A,#23,INCHOU MOV HOUR,#00 JMP OUT INCHOU: INC HOUR JMP OUT INCMIN: INC MINUITE JMP OUT INCSEC: INC SECOND OUT: LCALL TIME

;= = = = = = = = = = =

DJNZ R4,EXIT

MOV R4,#05H

CLR ES

MOV A,HOUR

MOV SBUF,A

JNB TI,¥

CLR TI

MOV A,MINUITE

MOV SBUF,A

JNB TI,¥

CLR TI

MOV A,SECOND

MOV SBUF,A

JNB TI,¥

CLR TI

NOP

SETB ES

SETB ET0

EXIT:

POP ACC

POP PSW

RETI

;= = = = = = = = = = =

RECEIVE:

; 串行通信中断服务程序,

; 接收数据

PUSH PSW

PUSH ACC

CLR ES

CLR RI

MOV A,SBUF

MOV HOUR,A

JNB RI,¥

CLR RI

MOV A,SBUF

MOV MINUITE,A

JNB RI,¥

CLR RI

MOV A,SBUF

MOV SECOND,A

SETB ES

POP ACC

POP PSW

RETI

安阳工学院学报

68

Journal of Anyang Institute of Technology

2007 年

TIME:

时间显示子程序(略)

-----

END

3 结束语

串行通信在智能仪表、数据采集系统等方面具

有广泛的应用。本文通过具体的实例分析了计算机

与单片机之间的通信方法,计算机通信程序、文件

操作程序是用 VB6 实现的,程序设计简单,界面友

好,单片机通信程序是用汇编语言实现的。本文的

实例在计算机和单片机上调试成功。

参考文献:
[1]晶辰工作室.Visual basic 6.0 中文版实用参考手册— ——属 性与事件篇[M].北京:电子工业出版社,1991. [2] Evangelos Petroutsos.Visual basic 6 从入门到精通[M].邱仲 潘,等译.北京:电子工业出版社,2001. [3] 李华,等.Mcs- 51 系列单片机实习接口技术[M].北京:北 京航空航天大学出版社,2003. [4] 杨忠煌,等.单芯片 8051 实务与应用[M]. 北京:中国水利 水电出版社,2001.

The Serial Communication Between Computer and
Single- chip Microcomputer Based On VB 6.0
ZHANG Xiutai1 HU Xuehui2
(1.Anyang Institute of Technology,Anyang 455000,China; 2.Xinyang Normal University,Xinyang 464000,China)

Abstract: The serial communication between computer and single- chip microcomputer is mainly introduced in this paper. The data, the computer receiving from or sending to single- chip microcomputer ,is transmitted through the control of MSComm and stored in the file. The data ,the single- chip microcomputer receiving from computer, is used to set the working parameter of single- chip microcomputer. The data, transmitted at intervals from single- chip microcomputer to computer, is mainly the data produced in or detected by single- chip microcomputer. The program is edited in assembly language. Key words:Serial communication;Control;Single- chip microcomputer;MSComm;Intelligent instrument; Data collection

(上接第 56 页)
参考文献:
[1] 岳昆,王晓玲,周傲英. Web 服务核心支撑技术研究综述 [J].软件学报.2004,15(3). [2] 王成耀,王宗杰,张德政,等. 基于虚拟数据中心的气田信 息整合平台研究[J].计算机应用研究.2006(4).

[3] Eric Newcomer,Greg Lomow.Understanding SOA with Web Services [M]. 北京,电子工业出版社,2006. [4] Ramesh Nagappan,Robert Skoczylas,Rima Patel Sriganesh. Developing Java Web Services[M].北京,清华大学出版社,2004.

Application Integration of Digital Gas Field Based on SOA
HOU Guifa1,2, LUO Ying2
(1. Beijing University of Science & Technology, Beijing 100083,China; 2 .Anyang Institute of Technology, Anyang 455000,China)
Abstract:The application integration architecture using Web Services and Service- Oriented Architecture (SOA) is much easier to be extended and has more flexibility. Service- Oriented integration in digital gas field can satisfy the request that sharing data and interoperability in existent application system. It can also define business flow according to the change of business. This can decrease the cost of system extending. Key words:Service- Oriented Architecture; Web Service; Application integration; Digital gas field


相关文档

基于vb60的计算机与单片机串行通信
基于VB6_0的计算机与单片机之间的串行通信
基于VB6_0实现单片机与PC机的串口通信
计算机与单片机的串行通讯探究
基于VB6_0实现PC机与单片机的串行通讯
基于VB6.0实现微机与单片机串行通信程序设计
VB6_0实现PC机与单片机的串行通信
用VB6.0开发微机与多台单片机之间的串行通信程序
用VB6[1].0实现PC机与单片机的串行通信
基于VB6_0的MSP430单片机与PC机串口通信设计_杨梅
电脑版