微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AT89C52单片机与VB串行通信的实现

AT89C52单片机与VB串行通信的实现

时间:03-23 来源:互联网 点击:

信指令通过串行口发送给上位机,当选择左侧单片机时(变量LR(1)=1),通信指令为“ET”,选择右侧单片机时(变量LR(1)=2),通信指令为 “DT”,数据传送以回车符(十进制ASCII码为13)作为结束标记。

下面是MSComm控件的初始化程序、部分数据发送和接受程序:
MSComm控件的初始化(属性设置)程序:
MScomm1.ComPort=1 ;设置串行端口(com1)
MScomm1.Settings=2400,n,8,1 ;设置波特率及数据帧格式
MScomm1.InputMOde=1 ;数据接受按字节(binary)方式
MScomm1.InbufferSize=4000 ;数据接受缓冲区大小为4000字节
MScomm1.InputLen=0 ;INPUT读取缓冲区的所有内容

数据发送程序:
Private Sub Command1_Click()
Dim outbuf(1 To 6) As Byte
Dim lstr1 As String
Dim hstr2 As String
Dim len1 As Integer
Command1.Enabled = False
len1 = Len(Hex(Val(Text2.Text)))
………
If LR(1) = 1 Then
outbuf(1) = 69 ;对应字符“E”
Else
outbuf(1) = 68 ;对应字符“D”
End If
outbuf(2) = 84 ;对应字符“T”
outbuf(3) = LR(1)
outbuf(4) = stoby(hstr2)
outbuf(5) = stoby(lstr1)
outbuf(6) = 13
MScomm1.RThreshold = 5 * Val(Text2.Text)
MScomm1.Output = outbuf
End Sub

数据接受程序:
Private Sub MScomm1_OnComm()
Select Case MScomm1.CommEvent
Case comEvReceive
Dim inbuf() As Byte, i%, buf$
buf =
inbuf = MScomm1.Input
Rev_num = UBound(inbuf)
ReDim lnum(0 To Rev_num) As Integer
For i = 0 To Rev_num
lnum(i) = inbuf(i)
buf = buf + Str(inbuf(i)) +
Next i
Case comEvSend
End Select
End Sub

由于MSComm控件数据接受设计为按字节方式,可接发的数值范围为0~255。当上位机读取数据个数超过255(1字节)时,为了能让下位机正确接受,解决方法是通过编制的函数stoby将文本框Text2输入的记录个数(字符型)转化成字节型,并分成两个字节送给下位机。另外,系统中有关数据保存、数据图表处理、打印等功能的实现在此不再赘述。

5.结论

2C总线器件的采用简化了硬件电路设计,提高了可靠性。本系统已投入使用,经过实际应用表明,通信系统工作稳定、可靠。满足系统要求,每到一分钟就向 ATC256中写入1条记录(5个数据),ATC256可保存12小时的记录,下位机需要读取数据时,可根据下位机的读取指令读取任意条记录。

[参考文献]
[1]ATMEL 2-wires Serial EEPROMs AT24C128/256[DK].
[2]何立民,单片机高级教程[M],北京:北京航空航天大学出版社,1999年.
[3]范逸之 陈立元,Visual Basic 与RS-232串行通信控制[M],北京:中国青年出版社,2002年.

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

网站地图

Top