51单片机与VB串行通信的实现.doc_第1页
51单片机与VB串行通信的实现.doc_第2页
51单片机与VB串行通信的实现.doc_第3页
51单片机与VB串行通信的实现.doc_第4页
51单片机与VB串行通信的实现.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

51单片机与VB串行通信的实现摘要:介绍了AT89C52单片机与PC机串行通信的实现方法,串行存储器24C256的读写操作流程,并给出了具体通信接口电路、单片机串行通信程序流程以及利用VB6.0的通信控件MSComm实现PC机串行通信的程序。系统经过实际应用,效果令人满意 1 引言:随着计算机系统的应用和微机网络的发展,各种控制设备之间的通信功能越来越显得重要。在设计的减振控制系统中,控制器(下位机)采用两片AT89C52单片机,分别用于对左右减振器实施控制,同时将测量的温度、电流、速度等信号按一定采样时间保存在E2PROM ATC256中。为了能测试控制器的工作情况,包括初始安装时的状况测试和读取历史记录并做测试诊断以及能根据参数变化情况进行故障诊断,为此,同时开发了通信系统,上位机采用便携式PC机,上、下位机之间通过MAX485芯片实现串行数据通信。 广告插播信息维库最新热卖芯片: ADM708AR IR2151S MC34152P MIC4681BM TDA3613T D6N03 ICS650R-22 MAX632BCSA EPM9560RC208-15 TC9482F2 通信系统硬件电路设计通信系统硬件电路设计的突出特点是,控制器的外围一改传统的并行扩展,而采用新型串行芯片进行串行总线扩展。与传统的并行扩展相比,具有体积小、性能价格比高、工作可靠性高的优点。存储器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公司推出的串行E2PROM24C256。24C256遵从I2C总线协议,通过数据线SDA和时钟线SLA两根线直接与单片机相连,不需要其它器件和外围电路。它具有256Kbit的位存储容量,按8位一个字节的方式可提供32K字节的存储空间。对ATC256的读写操作完全符合I2C总线的数据传送,传送的每一帧数据为一个字节,要求每传送一个字节后,对方回应一个应答位。发送时先放送数据最高位,每次传送开始有起始信号,结束时有停止信号。在系统的设计中,对ATC256的写操作采用字节写,读操作采用顺序读的方式。根据系统要求,每到一分钟就向ATC256中写入1条记录(包括三个温度、电流、速度等5个数据),上位机需要读取数据时,可根据上位机的读取指令读取任意条记录。对ATC256的读/写程序流程如图2所示: 图2 字节写(左),连续读(右)程序流程 4串行数据通信程序设计41通信协议本系统串行通信采用异步通信方式。协议如下:1 一帧数据由1位起始位、8位数据位、无奇偶校验位、1位停止位共10位组成。2 波特率设为2400bps。单片机串行口按方式1工作,波特率由定时器T1控制,PC机串口波特率通过VB通讯控件的Settings属性设置,为保证数据传送的准确性,两者的波特率必须一致。42下位机(单片机)串行通信及程序设计单片机可以采用中断方式或查询RI(接受中断标志位)或TI(发送中断标志位)方式进行数据通信。设计采用查询方式,在定时器T2中断子程序中查询RI,一旦检测到RI=1则转入接受数据子程序,在子程序中单片机读取从上位机发送的通信指令、读取记录个数等数据,经校验正确后,即从ATC256存储器中将历史记录数据上传给PC机,单片机发送数据子程序流程图如图3:图3单片机发送数据子程序流程图43上位机(PC机)串行通信及程序设计1编程方法 上位机利用Visual Basic 6.0编程。用VB6.0开发串行通信程序有两种法,一种是利用Windows的API函数;另一种是采用VB6.0的通信控件MSComm。利用API函数编写串行通信程序较为复杂,需要掌握大量的通信知识,其优点是可实现的功能更丰富、应用面更广泛,适合于编写较为复杂的低层次通信程序。而VB6.0的MSComm通信控件提供了标准的事件处理函数、事件、方法,并通过控件属性对串口参数进行设置,比较容易地解决了串口通信问题。2VB6.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读取缓冲区的所有内容数据发送程序:Private Sub Command1_Click()Dim outbuf(1 To 6) As ByteDim lstr1 As StringDim hstr2 As StringDim len1 As IntegerCommand1.Enabled = Falselen1 = Len(Hex(Val(Text2.Text)If LR(1) = 1 Thenoutbuf(1) = 69 ;对应字符“E”Elseoutbuf(1) = 68 ;对应字符“D”End Ifoutbuf(2) = 84 ;对应字符“T”outbuf(3) = LR(1)outbuf(4) = stoby(hstr2) outbuf(5) = stoby(lstr1)outbuf(6) = 13MScomm1.RThreshold = 5 * Val(Text2.Text)MScomm1.Output = outbufEnd Sub数据接受程序:Private Sub MScomm1_OnComm() Select Case MScomm1.CommEventCase comEvReceiveDim 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 iCase comEvSendEnd SelectEnd Sub由于MSComm控件数据接受设计为按字节方式,可接发的数值范围为0255。当上位机读取数据个数超过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.1 adm101e芯片介绍 大多数pc机都有一个串行通讯端口rs-232用于两台计算机间进行串行通讯。rs - 232通讯接口是一种标准化的串行接口,是为远程通讯连接终端设备dte(data terminal equipment)与数据通讯设备dce (data communication equipment)定义的物理接口。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.3 mscomm通讯控件简介mscomm控件串口具有完善的串口数据的发送和接收功能。通过此控件,pc机可以利用串行口与其它设备实现轻松连接,简单高效地实现设备之间的通讯。此控件的事件响应有两种处理方式,事件驱动方式:由mscomm控件的oncomm事件捕获并处理通讯错误及事件;查询方式:通过检查commevent属性的值来判断事件和错误。 1) mscomm控件的主要属性和方法 a. commport:设置或返回串行端口号,其取值范围为199,缺省为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,接收数据中出现文件结束字符。 3 pc机与单片机主程序设计 3.1单片机的串口控制 单片机串口控制较为简单,此处只给出初始化程序:mov tl1,#0e8h mov th1 , # 0e8h; 定时器时间常数 mov tmod, # 20h; 定时器tl工作方式2 mov scon, # 50h; 串行口方式1 setb trl ; 定时器开始工作 mov ie, # 90h; 允许串行口中断 mov sbuf,a; 串行数据发送3.2地址信息、要求单片机接收极限值设置信息的发送 private sub mnn1_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= 发送要求单片机接收极限值设置信息 end sub 3.3数据信息(应答信息)的接收 private sub cmdrecvans_click()接收应答信息,初始化mscomm mscomm1.inbuffercount = 0接收缓冲区 mscomml. rthreshold= 2设置接收数据的长度 mscomml. rtsenable=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论