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

2009-8-13 08:50 3488 5 6 分类: MCU/ 嵌入式
摘要:介绍了AT89C52单片机与PC机串行通信的实现方法,串行存储器24C256的读写操作流程,并给出了具体通信接口电路、单片机串行通信程序流程以及利用VB6.0的通信控件MSComm实现PC机串行通信的程序。系统经过实际应用,效果令人满意
5Z4^2E7V\:} S44606关键词:串行通信;单片机;Visual Basic6.0;MSComm;24C256电子园51单片机学习网 y,oMq n;j-q\-r@*b]
电子园51单片机学习网j1DD_-VB!^
1. 引言:

#y-S3L[R)I0l,y+LRY44606    随着计算机系统的应用和微机网络的发展,各种控制设备之间的通信功能越来越显得重要。在设计的减振控制系统中,控制器(下位机)采用两片AT89C52单片机,分别用于对左右减振器实施控制,同时将测量的温度、电流、速度等信号按一定采样时间保存在E2PROM ATC256中。为了能测试控制器的工作情况,包括初始安装时的状况测试和读取历史记录并做测试诊断以及能根据参数变化情况进行故障诊断,为此,同时开发了通信系统,上位机采用便携式PC机,上、下位机之间通过MAX485芯片实现串行数据通信。电子园51单片机学习网w6a0]H:Gw A^

ODNR;nQT2_)CiJ.J446062. 通信系统硬件电路设计电子园51单片机学习网P/R5eW$X(p
    通信系统硬件电路设计的突出特点是,控制器的外围一改传统的并行扩展,而采用新型串行芯片进行串行总线扩展。与传统的并行扩展相比,具有体积小、性能价格比高、工作可靠性高的优点。存储器ATC256、通信芯片MAX485均是I2C总线器件。单片机AT89C52的串行数据发送端TXD和串行数据接受端RXD分别与MAX485驱动器输入端DI和驱动器输出端D0,接受器输出使能端RE接地,驱动器输出使能端DE接单片机的T1端(P3.5脚)。存储器ATC256的串行数据线SDA和串行时钟线SCL分别AT89C52的P3.7和P3.6相连,具体硬件电路框图如图1所示:电子园51单片机学习网 L4\(bjMkFe
   电子园51单片机学习网IxOA u


2X-Q[7N Ri446063.数据的存储—ATC256①
6@k ciy.?44606    测得的温度、电流和速度等信号需实时保存,以便根据参数变化情况进行故障诊断和对加速度变化情况进行分析等。系统设计存储器采用美国ATMEL公司推出的串行E2PROM——24C256。24C256遵从I2C总线协议,通过数据线SDA和时钟线SLA两根线直接与单片机相连,不需要其它器件和外围电路。它具有256Kbit的位存储容量,按8位一个字节的方式可提供32K字节的存储空间。对ATC256的读写操作完全符合I2C总线的数据传送,传送的每一帧数据为一个字节,要求每传送一个字节后,对方回应一个应答位。发送时先放送数据最高位,每次传送开始有起始信号,结束时有停止信号。在系统的设计中,对ATC256的写操作采用字节写,读操作采用顺序读的方式。根据系统要求,每到一分钟就向ATC256中写入1条记录(包括三个温度、电流、速度等5个数据),上位机需要读取数据时,可根据上位机的读取指令读取任意条记录。
$}:{k3]IccD44606    对ATC256的读/写程序流程如图2所示:
&cna.{,|!I44606 电子园51单片机学习网VE t^7|@~&gr1n U
                                                          
4W.gip-jV44606                                                 
R]g1@'xD O^44606图2 字节写(左),连续读(右)程序流程             

9U|O&OQ;N:D44606 电子园51单片机学习网p,f L_`o(@v7~

4.串行数据通信程序设计电子园51单片机学习网S3{X2z"Y:g)[(D b
4.1通信协议电子园51单片机学习网S En:L(b ~RlR1c/}!E
    本系统串行通信采用异步通信方式。协议如下:电子园51单片机学习网?)Y8|k9\X$~*C
    1. 一帧数据由1位起始位、8位数据位、无奇偶校验位、1位停止位共10位组成。
AuT[zyIP;I8m hC44606    2. 波特率设为2400bps。单片机串行口按方式1工作,波特率由定时器T1控制,电子园51单片机学习网4t.n oXH M;Y pI7gH
    PC机串口波特率通过VB通讯控件的Settings属性设置,为保证数据传送的准确性,两者的波特率必须一致。
7q&O*qughiQ&r446064.2下位机(单片机)串行通信及程序设计电子园51单片机学习网H"xg;L)U&g3D:ff
    单片机可以采用中断方式或查询RI(接受中断标志位)或TI(发送中断标志位)方式进行数据通信②。设计采用查询方式,在定时器T2中断子程序中查询RI,一旦检测到RI=1则转入接受数据子程序,在子程序中单片机读取从上位机发送的通信指令、读取记录个数等数据,经校验正确后,即从ATC256存储器中将历史记录数据上传给PC机,单片机发送数据子程序流程图如图3:
d7bzq3eBt Fc44606 
],MEfnu_f44606图3单片机发送数据子程序流程图

;MZ `1qI4g.F*UZ44606

8[~gI$U Q0] R&^"J-d446064.3上位机(PC机)串行通信及程序设计电子园51单片机学习网)c&g\%wh:hK\
    1.编程方法
0zj-Cj T#K44606    上位机利用Visual Basic 6.0编程。用VB6.0开发串行通信程序有两种法,一种是利用Windows的API函数;另一种是采用VB6.0的通信控件MSComm。利用API函数编写串行通信程序较为复杂,需要掌握大量的通信知识,其优点是可实现的功能更丰富、应用面更广泛,适合于编写较为复杂的低层次通信程序。而VB6.0的MSComm通信控件提供了标准的事件处理函数、事件、方法,并通过控件属性对串口参数进行设置,比较容易地解决了串口通信问题。
B-Q!g6NM][44606    2.VB6.0的通信控件及通信方式③电子园51单片机学习网C;i n_+qE$z&s
    MSComm是VB6.0提供的ActiveX控件,使用前需将该控件添加到VB工具栏。MSComm控件具有功能完善的串口数据发送和接受功能,有两种处理通信的方式,即事件驱动方式和查询方式,事件驱动方式是利用MSComm控件的OnComm事件捕获并处理通信错误事件,是处理串行端口交互作用的一种非常有效的方法;查询方式是通过检查CommEvent属性的值来判断事件和错误。
aEF,g vUZ44606    本系统采用事件驱动方式进行串口通信设计,图4为上位机通信界面,设计4个命令按纽,分别为发送命令、退出、保存、浏览数据;两个文本框,Text2用于输入需从下位机读取的记录个数,Text3用于显示下位机发送来的数据;进行数据通信的单片机和串行通信口的选择通过两组单选按纽完成。在发送命令按纽的Click事件中,将通信指令通过串行口发送给上位机,当选择左侧单片机时(变量LR(1)=1),通信指令为“ET”, 选择右侧单片机时(变量LR(1)=2),通信指令为 “DT”,数据传送以回车符(十进制ASCII码为13)作为结束标记。电子园51单片机学习网;h-hO e|5|7EL#{k

电子园51单片机学习网 C1f)S X&UNe!\

                              电子园51单片机学习网B;?\ csKAny

电子园51单片机学习网)o4rp7jg

    下面是MSComm控件的初始化程序、部分数据发送和接受程序:电子园51单片机学习网-p`&QSjy
MSComm控件的初始化(属性设置)程序:
$i#z@ ]/T;E4H\44606MScomm1.ComPort=1   ;设置串行端口(com1)
]8m%Ks L ?"mPd44606MScomm1.Settings=2400,n,8,1 ;设置波特率及数据帧格式
#Oh-mc ^XF44606MScomm1.InputMOde=1 ;数据接受按字节(binary)方式
e+cj}2e44606MScomm1.InbufferSize=4000 ;数据接受缓冲区大小为4000字节
O']"gWRn3I&U;hq f44606MScomm1.InputLen=0 ;INPUT读取缓冲区的所有内容电子园51单片机学习网 vL6^Q8pj&{8n4ib


W kX!O ]p44606数据发送程序:
,kKIo1z"K B44606Private Sub Command1_Click()电子园51单片机学习网 r V*?"D&IYFFD,\
Dim outbuf(1 To 6) As Byte电子园51单片机学习网,w7v p g4_q+^%|0~?
Dim lstr1 As String
:UL6f"Xo8F6c'E!c1P]44606Dim hstr2 As String电子园51单片机学习网,P$UY3@)S3zs1Hb
Dim len1 As Integer
?]tU/Lcz%|da$`44606Command1.Enabled = False电子园51单片机学习网5N+ZR,x,N:Ol/xE
len1 = Len(Hex(Val(Text2.Text)))电子园51单片机学习网%}3B k+O U3v QBAh;Fa
………电子园51单片机学习网!N(f5rJ:DK's:rsv O
If LR(1) = 1 Then
Tz7UJ1{5l9Y|$_.@;Y44606outbuf(1) = 69       ;对应字符“E”
)W*QD[ V-p+S#k44606Else电子园51单片机学习网)Oa(h-g{1`
outbuf(1) = 68       ;对应字符“D”
d9tI_O7V'}44606End If
L.|ELKd ?T44606outbuf(2) = 84           ;对应字符“T”
{,n5o d(@LQ+Xc"f"k+i o44606outbuf(3) = LR(1)
{)Z1_\+r&A44606outbuf(4) = stoby(hstr2) 
Q'Pz+q.gH44606outbuf(5) = stoby(lstr1)
*^,rUEY8Q44606outbuf(6) = 13
~.Q]N:uW2\44606MScomm1.RThreshold = 5 * Val(Text2.Text)电子园51单片机学习网&}vp1| u3z,Wa
MScomm1.Output = outbuf
mY0{sCtf44606End Sub电子园51单片机学习网WbQ5j t*F?/T|2J9T9dv
数据接受程序:
6h t6OH5d \s44606Private Sub MScomm1_OnComm()  电子园51单片机学习网.SOQi9~fw9F%u3^
Select Case MScomm1.CommEvent电子园51单片机学习网)Aeb5NJ(Y4b!J
Case comEvReceive电子园51单片机学习网e|9imaVQ,{
Dim inbuf() As Byte, i%, buf$
0H4d!p#]th/\T44606      buf = ""电子园51单片机学习网fk3{-kz\{'O ^
      inbuf = MScomm1.Input电子园51单片机学习网-cA(J'D8v F@.`
      Rev_num = UBound(inbuf)电子园51单片机学习网3o n(_B P(BDj
      ReDim lnum(0 To Rev_num) As Integer电子园51单片机学习网c0P{3I-[:L
   For i = 0 To Rev_num
Hr"V4m.\H44606        lnum(i) = inbuf(i)
l2~^wLv,FFy44606        buf = buf + Str(inbuf(i)) + "    "电子园51单片机学习网q2v,p9a&MN#^Yi
  Next i电子园51单片机学习网`D"^.b:Y
Case comEvSend电子园51单片机学习网oB @/^6c9H3i ?
End Select
*T,L us'@2[)H44606End Sub
6_A:A:~&eo44606    由于MSComm控件数据接受设计为按字节方式,可接发的数值范围为0~255。当上位机读取数据个数超过255(1字节)时,为了能让下位机正确接受,解决方法是通过编制的函数stoby将文本框Text2输入的记录个数(字符型)转化成字节型,并分成两个字节送给下位机。另外,系统中有关数据保存、数据图表处理、打印等功能的实现在此不再赘述。电子园51单片机学习网"Knscc H[


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

z~} R{HS4V ~)w44606

c;Aou:]hwc^Z44606[参考文献]电子园51单片机学习网m JWi{`t
[1]ATMEL 2-wires Serial EEPROMs  AT24C128/256[DK].电子园51单片机学习网Y2u:B`ID~ |,W iT2W
[2]何立民,单片机高级教程[M],北京:北京航空航天大学出版社,1999年.
:Q0J%R)HEvC0Tgs7~44606[3]范逸之 陈立元,Visual Basic 与RS-232串行通信控制[M],北京:中国青年出版社,2002年.电子园51单片机学习网d+E!l5H c-B,td1R

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2015-9-18 20:40

代码补全

相关推荐阅读
用户1414655 2012-11-28 16:09
给你们介绍一些毛骨悚然的骗人技术
星期六下午 2 点多, 我一个人乘70 路至四川路,当中我在和我老公通电话的时候发觉有人拍了下我的肩膀,刚开始我以为是遇到认识的人和我打招呼的,后来一看旁边是40 多岁的...
用户1414655 2009-11-24 23:01
通信电源蓄电池温度监测系统设计
0 引 言    在通信系统的设计和建设中,通信电源被称为通信系统的心脏,电源系统将直接影响通信系统的可靠性和稳定性。美国APC公司的一项调查结果表明,大约有75%以上的通信系统故障都是由于电源设备故...
用户1414655 2009-09-23 08:53
各种白光LED驱动电路特性评比
作者:    时间:2008-12-02    来源:52RD硬件研发         1996年日亚化学的中村氏发表蓝光LED之后,白光LED就被视为次世代照明光源最具发展潜力的元件,因此有关白光L...
用户1414655 2009-09-23 08:52
论机器视觉与图像分析技术
作者:    时间:2008-12-02    来源:52RD硬件研发         也许你仍然希望能得到咨询专家的帮助,不过紧缩包裹型(Shrink-Wrapped)开发工具包现在已经使得缺乏专业...
用户1414655 2009-09-23 08:52
LCD TV视频解码器技术概述
作者:    时间:2008-12-03    来源:52RD硬件研发          CD TV属于高整合性电子产品,它涵盖了演算法、软体、韧体、硬体、晶片、无线射频等领域,且许多专利仍是属于国外...
用户1414655 2009-09-23 08:52
液晶显示器的自动调光技术
作者:    时间:2008-12-03    来源:52RD硬件研发          最近几年大型液晶显示器的应用,从笔记型电脑、PDA、桌上型电脑用监视器,持续扩展至家用液晶电视等领域,液晶电视...
EE直播间
更多
我要评论
1
5
关闭 站长推荐上一条 /3 下一条