VB环境下实现PC机与单片机(8031)的串行通讯
作者:佚名; 更新时间:2014-12-05

摘要:一般的PC与单片机之间的串行通信,需要单片机采集数据,然后用异步串行通讯方式传给PC机。本文着重用VB具有面向对象的设计方法,友好的用户界面等优点,来探讨在VB环境下来实现PC机与单片机(8031)之间串行通讯的方法。

关键词PC机 单片机 串行通讯 数据交换

 

随着计算机技术特别是单片机技术的发展,在各种单片机应用系统的设计中,如智能仪器仪表、各类手持设备、GPS接收器等,常常遇到计算机与外界的信息交换,即通讯。串行通信是指按照逐位顺序传递数据的通信方式,由于仅需三根传输线传送信息且通信距离相对较远,所以在控制领域的现场监测、分布控制等场合有着重要的应用价值。鉴于PC机具有强大的监控和管理功能,单片机则具有快速以及容易控制的特点,在数据量不大、传输要求不高的情况下,一般都采用给PC机配置的RS-232标准串行接口COM1COM2等相连接来实现应用系统与PC机之间的数据交换。本文论述了在VB环境下如何实现单片机与PC机之间实现串行通讯所需条件,PC机通讯程序利用VB提供的MsComm串行通讯控件来完成,单片机的程序用汇编语言来写。

2.1 ADM101E芯片介绍

大多数PC机都有一个串行通讯端口RS-232用于两台计算机间进行串行通讯。RS - 232通讯接口是一种标准化的串行接口,是为远程通讯连接终端设备DTE(Data Terminal Equipment)与数据通讯设备DCE (Data Communication Equipment)定义的物理接口。RS-232采用非平衡连接(又称为单端线路),在这个线路中,信号电压加到一条导线上,所有的信号电压都使用一个公共的接地线。为了提高抗干扰能力和增加传送距离,RS232的每个脚线的信号和电平规定采用负逻辑电平,DC(-155V)规定为逻辑“1”,DC(+ 5—+15V)规定逻辑“0”, DC(-5+5V规定为过渡区)。由于单片机的输入、输出电平为TTL电平,与 PCRS-232标准串行接口的电气规范不一致,因此要实现单片机与PC机之间的数据通读,必须进行电平转换。一般常用的电平转换器件有MC1488MC1489MAX232等,但MC1488MC1489需要±12V电源,这对于不具备±12V电源的单片机系统是非常不便的。而双路RS-232收发器MAX232虽然只需要+5V电源,但对于仅用单路收发器的应用系统来说,又显得有些余。本文采用一种体积小、功耗低、单+5V电源供电的单路RS-232收发器ADM101E芯片如图1,该芯片的引角解释如表1

文本框:  图1  ADM101的引脚图

文本框: 表1  ADM101E的引脚说明
引脚	名称	功能说明
1	GND	地
2	CI-	充电泵电容CI的负端(CI为极化电容时)
3	V-	内部产生的负电压
4	TIN	发送器输入端(3~5V  TTL/CMOS逻辑电平)
5	ROUT	接收器输出(3~5V  TTL/CMOS逻辑电平)
6	RIN	接收器输入(EIA—232信号电平)
7	TOUT	发送器输出(EIA—232信号电平)
8	SD	关闭模式控制端,为“1”时,ADM101E进入关闭模式;为“0”时,ADM101E为正常工作模式
9	CI+	充电泵电容CI的正端(CI为极化电容时)
10	VCC	电源

2.2串行接口介绍

PC串行接口与经过转换的符合RS232C电气标准的单片机串行接口连接即可实现二者之间的异步串行通信。单片机串行接口有一个全双工串行接口,采用TTL逻辑电平,经过ADM101E芯片可方便地转换成RS_232电气标准。串行通讯连接如图2

2.3 MSComm通讯控件简介

文本框:  图2   8031单片机与PC机串行通讯连接图

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信捷职称论文写作发表网,奇偶校验。



3.1单片机的串口控制

    单片机串口控制较为简单,此处只给出初始化程序:

    MOV  TL1#0E8H

    MOV  TH1 , # 0E8H     定时器时间常数

    MOV  TMOD, # 20H    定时器Tl工作方式2

    MOV  SCON, # 50H     串行口方式1

    SETB   TRl          定时器开始工作

    MOV   IE, # 90H      允许串行口中断

    MOV    SBUFA       串行数据发送

 

文本框:  
图3 PC机程序设计通讯
流程图

    

Private Sub mnN1_Click()

MSComml. PortOpen=True ‘打开通讯端口

MSComml. RTSEnable=False‘置通讯端口为发送状态

MSComml. Settings="2400m81"‘奇偶校验位置1,发送地址信息

MSComml. OutBufferCount = 0‘清发送缓冲区

MSComml. output= 1 ‘发送单片机机地址信息

MSComml. Settings=2400s,8,1 奇偶校验位置0

发送数据信息

MSComml.Output= " "发送要求单片机接收极限值设置信息

       End Sub

Private Sub cmdrecvans_Click()‘接收应答信息,初始化MSComm

MSComm1.InBufferCount = 0‘接收缓冲区

MSComml. RThreshold= 2‘设置接收数据的长度

MSComml. RTSEnable= True‘置为接收状态

    Timer. Enabled=True

       End Sub

Private Sub Timer_Click()

   If MSComm1. InBufferCount=0 Then

MSComm1. Input

Frmsend. frm Show ‘Frmsend为极限值设定及发送窗口

Timer. Enabled=False

Else : Call errordeal‘应答信息错误,调应答信息错误处理子程序

 End If

End Sub

PC程序设计流程如图3所示。

本文主要对利用MSComm控件比较方便地开发串行通信程序做了阐述,实现串行通讯原理已经得到实验结果验证,考虑到将来对系统实时性的要求,采用了MSComm控件的查询处理机制,避免了中断处理机制的不稳定和不连续性,而且还可以很方便地控制多个串口,只需插入多个MSComm控件,并为每个MSComm控件编写OnComm()函数。但是,MSComm控件在VB中的使用较为复杂。

[1]王义祥.MCS-96单片机原理与应用[M].北京:兵器工业出版社,1994.

[2]刘小石.精通Visual C + +6.0[ M ].北京:清华大学出版社,2000

科技大学出版社,2001.

[4]胡峪.VC++高级编程技巧与示例[M].西安:西安电子科技大学出版社,2001.

[5]王子恢,戴健鹏.C语言大全(4)[M].北京:电子工业出版社,2001.

[6]李华.单片机通用接口技术[M].北京:北京航空航天大学出版社,1999

    核心期刊快速发表
    Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
    《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
    本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com