摘 要:提出了一种基于Visual C++的MSP430单片机与PC之间进行串行通信的实现方法,给出了硬件电路图和通信源程序。调试实验表明,该硬件设计与软件开发达到了预期的功能要求。
关键词:MSP430;串行通信;Visual C++
随着单片机技术的发展,MSP430单片机在工业控制系统中对温度、压力和流量等参数进行监测和控制的应用越来越多。PC具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC的RS-232串行接口与外部设备进行通信是许多测控系统中常用的通信解决方法。它不仅利用了单片机实时控制的特点还充分发挥了PC运算能力强和存储容量大的优势。在日常应用中通常需要进行大量的数据计算,而MSP430运算能力有限,必须借助PC强大的数据处理能力,因此实现MSP430与PC之间的可靠数据传输变得尤为重要[1]。
本文将使用MSP430的同步∕异步串行模块(USART)与计算机进行串口通信。PC的通信软件采用Visual C++6.0编写,具体是利用MSComm控件完成与MSP430单片机的通信。
1 异步串行通信的概念
MSP430与PC之间的异步串行通信采用RS-232串行接口电路实现,利用PC的串行接口进行数据传输。在异步通信中,数据是逐帧传送的,其数据格式如图1所示。
在帧格式中,一个字符由起始位、数据位、奇偶校验位和停止位4部分组成。首先是一个起始位“0”,然后是5~8 bit数据(规定低位在前,高位在后),接下来是奇偶校验位,最后是停止位“1”。起始位“0”信号只占用1 bit,用来通知接收设备一个待接收的字符开始到来,在不传送字符时,线路上应保持为“1”。接收端不断检测线路的状态,若连续为“1”以后又检测到一个“0”,就知道要发来一个新字符,应立即准备接收[2]。
2 接口器件介绍
2.1 电平转换芯片
PC与MSP430通信使用RS-232串行总线标准。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平电压范围为+5 V~+15 V,负电平为-15 V~-5 V。当无数据传输时,线上为TTL电平,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。接收器典型的工作电平为+3 V~+12 V与-12 V~-3 V之间。如此高的电压是不能和单片机直接相连的,所以必须进行电平转换。本文利用LTC1385来实现电平转换[3],它是德州仪器推出的一款兼容RS-232标准的芯片。该芯片供电电压为3.3 V,与MSP430的3.3 V供电电压匹配。LTC1385芯片内部亦有两路发送器和两路接收器,本文只用到其中的一组。
2.2 信号接口介绍
PC都有串行接口,一般用RS-232接口。与RS-232相匹配的连接器有DB-25、DB-15和DB-9,其引脚各不相同。本文使用DB-9作为提供I/O卡或主板上COM1和COM2两个串行接口的连接器,提供异步通信的9个信号。
3 硬件电路设计
3.1 PC与MSP430的串行通信原理图
PC与MSP430串行通信原理图如图2所示,整个系统由PC、MSP430和LTC1385 3个部分组成。由于PC与MSP430串行通信时采用RS-232协议,因此不管是单片机向PC发送数据,还是PC向单片机发送数据都必须通过LTC1385进行电平转换[4]。在电路连接时,PC的串口输出应对应MSP430的串口输入。
3.2 系统电路连接图
整个系统电路连接图可分为两个部分:MSP430串口与LTC1385之间的连接以及LTC1385通过DB-9型连接器与PC的串口的连接,如图3所示。将MSP430的“UTXD0”引脚和LTC1385的“TR1IN”引脚相连,MSP430的“URXD0”引脚和LTC1385的“RX1OUT”引脚相连,即将MSP430的输入引脚和LTC1385的输出引脚相连,将MSP430的输出引脚和LTC1385的输入引脚相连。
LTC1385通过DB-9型连接器和PC的串口相连,具体实现要选用标准的串口线将LTC1385同PC的COM1口连接。
4 程序设计
整个程序设计分为PC的通信程序和MSP430的通信程序两部分。由于MSP430的通信程序采用汇编语言编写,其代码在各种环境下都大同小异,因此这里重点介绍PC通信程序的编写。
VC实现串行通信有3种途径:利用MSComm控件或者是利用CSerialPont类进行串口通信,以及利用WinAPI函数对串口进行操作[5]。以下重点介绍在Visual C++6.0开发环境下利用MSComm控件实现串行通信的方法。
编程采用基于对话框的主体程序框架结构,串口通信部分采用MSComm控件完成。具体步骤如下:
(1)创建工程。打开Visual C++6.0编程环境,新建一个工程,并输入相应的工程名和该工程所在的路径。
(2)添加相应的资源。为了能在友好的界面下对程序进行操作,必须为应用程序添加相应的资源,本文中只添加了通信程序必要的控件。添加两个“EDIT”控件,一个用来输入发送给单片机的数据,一个用来显示接收单片机传来的数据。添加一个“发送”按钮用来确定何时发送。本文的串口通信是通过MSComm控件完成的,所以还需要添加MSComm控件,添加完后,还需对其进行相关设置。对MSComm控件的设置一定要根据计算机外围的单片机来设置合理的参数,否则无法保证正常的串口通信。本文的MSComm控件设置界面如图4所示。
(4)消息映射。当单片机通过串口向PC发送数据或者单击“发送”按钮时,都激发了Windows消息,应用程序的窗口将收到这些消息,然后检查应用程序是否处理这些消息函数,为了处理这些函数必须添加相应的消息映射。
(5)添加程序执行代码。添加消息映射后只是给出了一个处理这些消息的函数的框架,具体的处理代码必须由用户来添加,限于篇幅本文只给出以下需要添加的部分代码。
∥*************初始化程序***********∥
BOOL CComtestDlg::OnInitDialog ()
{ CDialog::OnInitDialog ();
SetIcon(m_hIcon,TURE); ∥Set big iconSetIcon(m_hIcon,FALSE);∥Set small iconif(!m_comport.GetPortOpen()∥打开串口
{
m_comport.SetPortOpen (TURE);}
return TURE; ∥return TURE unless you set a focus to a control
}
∥*************发送程序***********∥
Void CComtestDlg::OnSend ()
{
UpdateData (TURE)
if (!m_comport.GetPortOpen())
m_comport.SetPortOpen (TURE);
m_comport.SetOutput(COleVariant(m_fasong));
∥发送消息
m_fasong="";
UpdateData (FALSE);
}
∥***********接收程序 *********∥
void CComtestDlg::OnCommMscomm()
{
if (m_comport.GetCommEvent()= =2)
{ m_jieshou=m_comport.GetInput().bstrVal; ∥接收消息
UpdateData (FALSE);
}
}
编译之后,PC上的应用程序运行结果如图6所示。
MSP430与PC的串行通信被广泛应用于各种控制系统中。本文提出了一种实现该串行通信的方法,并给出了具体的电路原理图和通信程序。实践证明,利用VC开发通信系统,从底层到上层直接面向用户,具有很强的调试功能。本文为PC与MSP430串行通信的实现提供了一个很好的参考。
参考文献
[1] 胡大可.MSP430系列FLASH型超低功耗16位单片机[M].北京:北京航空航天出版社,2001.
[2] 于万民.PC机与PIC单片机串行通讯的实现[J].现代电子技术,2000(8):12-16.
[3] 吴怀超.MCS-51 MSP430与PC间串行通讯比较[J].微处理机,2009(6):20-23.
[4] 吴怀超,周勇,赵丽梅.基于汇编语言的MSP430与上位机间串行通讯的实现[J].仪表技术与传感器,2010(8):62-65.
[5] 郑慧,范忠诚.零基础学Visual C++[M]. 北京: 机械工业出版社,2010.