51单片机与VB串行通信的实现.docx
- 文档编号:11388518
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:10
- 大小:22.28KB
51单片机与VB串行通信的实现.docx
《51单片机与VB串行通信的实现.docx》由会员分享,可在线阅读,更多相关《51单片机与VB串行通信的实现.docx(10页珍藏版)》请在冰豆网上搜索。
51单片机与VB串行通信的实现
51单片机与VB串行通信的实现
摘要:
介绍了AT89C52单片机与PC机串行通信的实现方法,串行存储器24C256的读写操作流程,并给出了具体通信接口电路、单片机串行通信程序流程以及利用VB6.0的通信控件MSComm实现PC机串行通信的程序。
系统经过实际应用,效果令人满意
1.引言:
随着计算机系统的应用和微机网络的发展,各种控制设备之间的通信功能越来越显得重要。
在设计的减振控制系统中,控制器(下位机)采用两片AT89C52单片机,分别用于对左右减振器实施控制,同时将测量的温度、电流、速度等信号按一定采样时间保存在E2PROMATC256中。
为了能测试控制器的工作情况,包括初始安装时的状况测试和读取历史记录并做测试诊断以及能根据参数变化情况进行故障诊断,为此,同时开发了通信系统,上位机采用便携式PC机,上、下位机之间通过MAX485芯片实现串行数据通信。
广告插播信息
维库最新热卖芯片:
ADM708ARIR2151SMC34152PMIC4681BMTDA3613TD6N03ICS650R-22MAX632BCSAEPM9560RC208-15TC9482F
2.通信系统硬件电路设计
通信系统硬件电路设计的突出特点是,控制器的外围一改传统的并行扩展,而采用新型串行芯片进行串行总线扩展。
与传统的并行扩展相比,具有体积小、性能价格比高、工作可靠性高的优点。
存储器ATC256、通信芯片MAX485均是I2C总线器件。
单片机AT89C52的串行数据发送端TXD和串行数据接受端RXD分别与MAX485驱动器输入端DI和驱动器输出端D0,接受器输出使能端RE接地,驱动器输出使能端DE接单片机的T1端(P3.5脚)。
存储器ATC256的串行数据线SDA和串行时钟线SCL分别AT89C52的P3.7和P3.6相连,具体硬件电路框图如图1所示:
3.数据的存储—ATC256①
测得的温度、电流和速度等信号需实时保存,以便根据参数变化情况进行故障诊断和对加速度变化情况进行分析等。
系统设计存储器采用美国ATMEL公司推出的串行E2PROM——24C256。
24C256遵从I2C总线协议,通过数据线SDA和时钟线SLA两根线直接与单片机相连,不需要其它器件和外围电路。
它具有256Kbit的位存储容量,按8位一个字节的方式可提供32K字节的存储空间。
对ATC256的读写操作完全符合I2C总线的数据传送,传送的每一帧数据为一个字节,要求每传送一个字节后,对方回应一个应答位。
发送时先放送数据最高位,每次传送开始有起始信号,结束时有停止信号。
在系统的设计中,对ATC256的写操作采用字节写,读操作采用顺序读的方式。
根据系统要求,每到一分钟就向ATC256中写入1条记录(包括三个温度、电流、速度等5个数据),上位机需要读取数据时,可根据上位机的读取指令读取任意条记录。
对ATC256的读/写程序流程如图2所示:
图2字节写(左),连续读(右)程序流程
4.串行数据通信程序设计
4.1通信协议
本系统串行通信采用异步通信方式。
协议如下:
1.一帧数据由1位起始位、8位数据位、无奇偶校验位、1位停止位共10位组成。
2.波特率设为2400bps。
单片机串行口按方式1工作,波特率由定时器T1控制,
PC机串口波特率通过VB通讯控件的Settings属性设置,为保
证数据传送的准确性,两者的波特率必须一致。
4.2下位机(单片机)串行通信及程序设计
单片机可以采用中断方式或查询RI(接受中断标志位)或TI(发送中断标志位)方式进行数据通信②。
设计采用查询方式,在定时器T2中断子程序中查询RI,一旦检测到RI=1则转入接受数据子程序,在子程序中单片机读取从上位机发送的通信指令、读取记录个数等数据,经校验正确后,即从ATC256存储器中将历史记录数据上传给PC机,单片机发送数据子程序流程图如图3:
图3单片机发送数据子程序流程图
4.3上位机(PC机)串行通信及程序设计
1.编程方法
上位机利用VisualBasic6.0编程。
用VB6.0开发串行通信程序有两种法,一种是利用Windows的API函数;另一种是采用VB6.0的通信控件MSComm。
利用API函数编写串行通信程序较为复杂,需要掌握大量的通信知识,其优点是可实现的功能更丰富、应用面更广泛,适合于编写较为复杂的低层次通信程序。
而VB6.0的MSComm通信控件提供了标准的事件处理函数、事件、方法,并通过控件属性对串口参数进行设置,比较容易地解决了串口通信问题。
2.VB6.0的通信控件及通信方式③
MSComm是VB6.0提供的ActiveX控件,使用前需将该控件添加到VB工具栏。
MSComm控件具有功能完善的串口数据发送和接受功能,有两种处理通信的方式,即事件驱动方式和查询方式,事件驱动方式是利用MSComm控件的OnComm事件捕获并处理通信错误事件,是处理串行端口交互作用的一种非常有效的方法;查询方式是通过检查CommEvent属性的值来判断事件和错误。
本系统采用事件驱动方式进行串口通信设计,图4为上位机通信界面,设计4个命令按纽,分别为发送命令、退出、保存、浏览数据;两个文本框,Text2用于输入需从下位机读取的记录个数,Text3用于显示下位机发送来的数据;进行数据通信的单片机和串行通信口的选择通过两组单选按纽完成。
在发送命令按纽的Click事件中,将通信指令通过串行口发送给上位机,当选择左侧单片机时(变量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读取缓冲区的所有内容
数据发送程序:
PrivateSubCommand1_Click()
Dimoutbuf(1To6)AsByte
Dimlstr1AsString
Dimhstr2AsString
Dimlen1AsInteger
Command1.Enabled=False
len1=Len(Hex(Val(Text2.Text)))
………
IfLR
(1)=1Then
outbuf
(1)=69 ;对应字符“E”
Else
outbuf
(1)=68 ;对应字符“D”
EndIf
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
EndSub
数据接受程序:
PrivateSubMScomm1_OnComm()
SelectCaseMScomm1.CommEvent
CasecomEvReceive
Diminbuf()AsByte,i%,buf$
buf=""
inbuf=MScomm1.Input
Rev_num=UBound(inbuf)
ReDimlnum(0ToRev_num)AsInteger
Fori=0ToRev_num
lnum(i)=inbuf(i)
buf=buf+Str(inbuf(i))+" "
Nexti
CasecomEvSend
EndSelect
EndSub
由于MSComm控件数据接受设计为按字节方式,可接发的数值范围为0~255。
当上位机读取数据个数超过255(1字节)时,为了能让下位机正确接受,解决方法是通过编制的函数stoby将文本框Text2输入的记录个数(字符型)转化成字节型,并分成两个字节送给下位机。
另外,系统中有关数据保存、数据图表处理、打印等功能的实现在此不再赘述。
5.结论
I2C总线器件的采用简化了硬件电路设计,提高了可靠性。
本系统已投入使用,经过实际应用表明,通信系统工作稳定、可靠。
满足系统要求,每到一分钟就向ATC256中写入1条记录(5个数据),ATC256可保存12小时的记录,下位机需要读取数据时,可根据下位机的读取指令读取任意条记录。
VB环境下实现PC机与单片机的串行通讯
(1)
免费论文网未知点击量:
444【收藏论文】【打印论文】
摘要:
一般的pc与单片机之间的串行通信,需要单片机采集数据,然后用异步串行通讯方式传给pc机。
本文着重用vb具有面向对象的设计方法,友好的用户界面等优点,来探讨在vb环境下来实现pc机与单片机(8031)之间串行通讯的方法。
关键词:
pc机单片机串行通讯数据交换
1引言
随着计算机技术特别是单片机技术的发展,在各种单片机应用系统的设计中,如智能仪器仪表、各类手持设备、gps接收器等,常常遇到计算机与外界的信息交换,即通讯。
串行通信是指按照逐位顺序传递数据的通信方式,由于仅需三根传输线传送信息且通信距离相对较远,所以在控制领域的现场监测、分布控制等场合有着重要的应用价值。
鉴于pc机具有强大的监控和管理功能,单片机则具有快速以及容易控制的特点,在数据量不大、传输要求不高的情况下,一般都采用给pc机配置的rs-232标准串行接口com1、com2等相连接来实现应用系统与pc机之间的数据交换。
本文论述了在vb环境下如何实现单片机与pc机之间实现串行通讯所需条件,pc机通讯程序利用vb提供的mscomm串行通讯控件来完成,单片机的程序用汇编语言来写。
2系统介绍
2.1adm101e芯片介绍
大多数pc机都有一个串行通讯端口rs-232用于两台计算机间进行串行通讯。
rs-232通讯接口是一种标准化的串行接口,是为远程通讯连接终端设备dte(dataterminalequipment)与数据通讯设备dce(datacommunicationequipment)定义的物理接口。
rs-232采用非平衡连接(又称为单端线路),在这个线路中,信号电压加到一条导线上,所有的信号电压都使用一个公共的接地线。
为了提高抗干扰能力和增加传送距离,rs一232的每个脚线的信号和电平规定采用负逻辑电平,dc(-15一5v)规定为逻辑“1”,dc(5—15v)规定逻辑“0”,dc(-5一5v规定为过渡区)。
由于单片机的输入、输出电平为ttl电平,与pc机rs-232标准串行接口的电气规范不一致,因此要实现单片机与pc机之间的数据通读,必须进行电平转换。
一般常用的电平转换器件有mc1488、mc1489及max232等,但mc1488、mc1489需要±12v电源,这对于不具备±12v电源的单片机系统是非常不便的。
而双路rs-232收发器max232虽然只需要5v电源,但对于仅用单路收发器的应用系统来说,又显得有些余。
本文采用一种体积小、功耗低、单5v电源供电的单路rs-232收发器adm101e芯片如图1,该芯片的引角解释如表1。
2.2串行接口介绍
将pc串行接口与经过转换的符合rs一232c电气标准的单片机串行接口连接即可实现二者之间的异步串行通信。
单片机串行接口有一个全双工串行接口,采用ttl逻辑电平,经过adm101e芯片可方便地转换成rs_232电气标准。
串行通讯连接如图2。
2.3mscomm通讯控件简介
mscomm控件串口具有完善的串口数据的发送和接收功能。
通过此控件,pc机可以利用串行口与其它设备实现轻松连接,简单高效地实现设备之间的通讯。
此控件的事件响应有两种处理方式,事件驱动方式:
由mscomm控件的oncomm事件捕获并处理通讯错误及事件;查询方式:
通过检查commevent属性的值来判断事件和错误。
1)mscomm控件的主要属性和方法
a.commport:
设置或返回串行端口号,其取值范围为1—99,缺省为1
b.setting:
设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。
如:
mscomm.setting="9600,n,8,1”。
c.portopen:
打开或关闭串行端口。
d.rthreshold:
该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生mscomml--oncomm事件。
e.input:
从接收缓冲区移走一串字符。
f.output:
向发送缓冲区传送一字符串。
2)commevent属性
如果在通讯过程中发生错误或事件,就会引发oncomm事件并由commevent属性代码反映错误类型,可根据该属性值来执行不同的程序操作或数据处理。
以下是部分属性常数值及其含义:
a.comevsend:
其值为1,发送缓冲区的内容少于sthreshold指定的值。
b.comevreceive:
其值为2,接收缓冲区内字符数达到rthreshold值,该事件在缓冲区中数据被移走前将持续产生。
c.comeventrxparity:
其值为1009,奇偶校验。
d.comeveof:
其值为7,接收数据中出现文件结束字符。
3pc机与单片机主程序设计
3.1单片机的串口控制
单片机串口控制较为简单,此处只给出初始化程序:
movtl1,#0e8h
movth1,#0e8h;定时器时间常数
movtmod,#20h;定时器tl工作方式2
movscon,#50h;串行口方式1
setbtrl;定时器开始工作
movie,#90h;允许串行口中断
movsbuf,a;串行数据发送
3.2地址信息、要求单片机接收极限值设置信息的发送
privatesubmnn1_click()
mscomml.portopen=true‘打开通讯端口
mscomml.rtsenable=false‘置通讯端口为发送状态
mscomml.settings="2400,m,8,1"‘奇偶校验位置1,发送地址信息
mscomml.outbuffercount=0‘清发送缓冲区
mscomml.output=1‘发送单片机机地址信息
mscomml.settings=2400,s,8,1奇偶校验位置0,
发送数据信息
mscomml.output=""发送要求单片机接收极限值设置信息
endsub
3.3数据信息(应答信息)的接收
privatesubcmdrecvans_click()‘接收应答信息,初始化mscomm
mscomm1.inbuffercount=0‘接收缓冲区
mscomml.rthreshold=2‘设置接收数据的长度
mscomml.rtsenable=true‘置为接收状态
timer.enabled=true
endsub
privatesubtimer_click()
ifmscomm1.inbuffercount=0then
mscomm1.input
frmsend.frmshow‘frmsend为极限值设定及发送窗口
timer.enabled=false
else:
callerrordeal‘应答信息错误,调应答信息错误处理子程序
endif
endsub
pc程序设计流程如图3所示。
4结束语
本文主要对利用mscomm控件比较方便地开发串行通信程序做了阐述,实现串行通讯原理已经得到实验结果验证,考虑到将来对系统实时性的要求,采用了mscomm控件的查询处理机制,避免了中断处理机制的不稳定和不连续性,而且还可以很方便地控制多个串口,只需插入多个mscomm控件,并为每个mscomm控件编写oncomm()函数。
但是,mscomm控件在vb中的使用较为复杂。
参考文献
[1]王义祥.mcs-96单片机原理与应用[m].北京:
兵器工业出版社,1994.
[2]刘小石.精通visualc6.0[m].北京:
清华大学出版社,2000
[3杨毓,李明.visualbasic6.0实用开发教程[m].成都:
电子科技大学出版社,2001.
[4]胡峪.vc高级编程技巧与示例[m].西安:
西安电子科技大学出版社,2001.
[5]王子恢,戴健鹏.c语言大全(第4版)[m].北京:
电子工业出版社,2001.
[6]李华.单片机通用接口技术[m].北京:
北京航空航天大学出版社,1999
[7]魏庆福,姚亦鸣,李枫,等.std总
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 VB 串行 通信 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)