摘要PIC系列单片机作为一款外设丰富性能优良的单片机,被广泛应用于各种控制系统。在微机测控系统中,用作上位机的PC机系统与用作下位机的单片机之间经常要进行信息交换。为此提出了一种基于Visual C++的PIC18F452单片机与PC机之间串行通信的实现方法,给出了硬件电路图和通信源程序,调试实验表明,硬件设计与软件开发达到了预期的功能要求。该方法为PIC单片机与PC机间串行通信的应用提供了良好的参考。
关键词PIC单片机;串行通信;Visual C++
随着单片机技术的发展,PIC单片机在工业控制系统中如温度、压力和流量等参数进行监测和控制中的应用越来越多。PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC机的RS-232串行接口与外部设备进行通讯是许多测控系统中常用的通信解决方法。它不仅利用了单片机实时控制的特点又充分发挥了PC机运算能力强和存储容量大的优势。在日常应用中通常需要进行大量的数据计算,而PIC单片机运算能力有限,必须借助PC机的数据处理能力,因此实现PIC单片机与PC机之间可靠数据传输变得尤为重要。
文中将使用PIC单片机的同步/异步串行模块(USART)和计算机进行串口通信。PC机的通信软件采用Visual C++6.0编写,具体是利用MSComm控件完成与PIC单片机的通信。
1 异步串行通信的概念
PIC单片机与PC机之间的异步串行通信采用RS-232串行接口电路实现,利用PC机的串行接口进行数据传输。在异步通信中,数据是逐帧传送的,其格式如图1所示。
在帧格式中,一个字符由4部分组成:起始位、数据位、奇偶校验位和停止位。首先是一个起始位“0”,然后是5~8位数据,接下来是奇偶校验位,最后是停止位“1”。起始位“0”信号只占用1位,用来通知接收设备一个待接收的字符开始到来。在不传送字符时,线路上应保持为“1”。接收端不断检测线路的状态,若连续为“1”以后又检测到一个“0”,就知道要发来一个新字符,应立即准备接收。
2 接口器件介绍
2.1 电平转换芯片
PC机与HC单片机通信使用RS-232串行总线标准。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平电压范围为5~15 V,负电平为-15~-5 V。当无数据传输时,线上为TTL电平,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。接收器典型的工作电平为3~12 V与-12~-3 V之间。如此高的电压是不能和单片机直接相连的,所以必须进行电平转换。文中利用MAX232实现电平转换。MAX232芯片是由德州仪器公司推出的一款兼容RS-232标准的芯片。该器件包含2个驱动器、2个接收器和一个电压发生器电路提供TTA/EIA-232-F电平。
2.2 信号接口介绍
PC机都有串行接口,一般用RS-232接口。与RS-232相匹配的连接器有DB-25、DB-15和DB-9,其引脚也各不相同。文中使用的是DB-9连接器,作为提供I/O卡或主板上COM1和COM2两个串行接口的连接器,提供异步通信的9个信号。
3 硬件电路设计
3.1 PC机与PIG单片机的串行通信原理图
PC机与PIC单片机串行通信原理如图2所示,整个系统由3个部分组成。由于PC机与PIC单片机串行通信时采用RS-232协议,因此无论是单片机向PC发送数据,还是PC机向单片机发送数据都必须通过MAX232进行电平转换。在电路连接时,PC机的串口输出应对应PIC单片机的串口输入。
3.2 系统电路连接图
整个系统电路连接图可分为两个部分,PIC单片机串口与MAX232之间的连接以及MAX232通过DB-9型连接器和PC机串口的连接,如图3所示。将PIC单片机的“RC6/TXD”引脚和MAX232的“T1IN”引脚相连;单片机的“RC7/RXD”引脚和MAX232的“R1OUT”引脚相连,即将单片机的输入引脚和MAX232的输出引脚相连;将单片机的输出引脚和MAX232的输入引脚相连。
MAX232通过DB-9型连接器和PC机的串口相连,具体实现应选用标准的串口线将AX232同PC机的COM1口连接。
4 程序设计
整个程序设计为两部分,分别是PC机的通信程序和PIC单片机的通信程序。由于PIC单片机的通信程序采用汇编语言编写,其编写过程在各种环境下大同小异。
VC实现串行通信有3种途径,利用MSComm控件或者是利用CSerialPont类进行串口通信,还可用WinAPI函数对串口进行操作。以下重点介绍在Visual C++6.0开发环境下利用MSComm控件实现串行通信的方法。
编程是采用基于对话框的主体程序框架结构,串口通信部分采用MSComm控件完成。具体步骤如下。
(1)创建工程。打开Vlsaal C++6.0编程环境,新建一个工程,并输入相应的工程名和该工程所在的路径。
(2)添加相应的资源。为能在友好的界面下对程序进行操作,必须为应用程序添加相应的资源,文中只添加了通信程序必要的控件。添加两个“EDIT”控件;一个用来输入发送给单片机的数据;一个用来显示接收到的单片机传来的数据。添加一个“发送”按钮用来确定何时发送。文中的串口通信通过MSComm控件完成,所以还需要添加MSComm控件。添加完MSComm控件后,还需对其进行相关设置。对MSComm控件的设置一定要根据计算机外围的单片机来设置合理的参数,否则无法保证正常的串口通信。文中MSComm控件的设置界面如图4所示。
(3)添加成员变量。应用程序上的控件负责接收输入或者显示输出,应用程序后台的成员变量来管理这些数据,添加好资源后还要使控件和成员变量关联起来。成员变量添加界面如图5所示。
(4)消息映射。当单片机通过串口向PC机发送数据或者单击“发送”按钮,都是激发了Windows消息,应用程序的窗口将收到这些消息。收到消息后,检查应用程序是否处理这些消息函数,为处理这些函数必须添加相应的消息映射。
(5)添加程序执行代码。PC端的Visual C++程序的程序流程如图6所示。
添加消息映射后只给出了一个处理这些消息的函数的框架,具体的处理代码必须由用户添加。
编译之后,PC机上的应用程序运行结果如图7所示。
将要发送的数据写到发送数控件中,单击“发送”按钮,则PC机通过串口将数据发送给单片机。如果单片机将数据发送给PC机,则程序将自动把接收到的数据显示在接收数控件中。
5 结束语
PIC单片机与PC机的串行通信被广泛应用于各种控制系统中。文中提出了一种实现该串行通信的方法,并给出了具体的电路原理图和通信程序。实践证明,利用VC开发通讯系统,从底层到上层直接面向用户,具有较强的调试功能。因此文中为PC机与PIC单片机串行通信的实现提供了良好的参考。