用PComm开发PC机与单片机的通信程序设计
信要求。本文将介绍另外一种用PComm处理PC机的串口通信方法。
PComm是一种用于处理多进程/多线程的串口通信软件开发工具,它提供了许多基于API函数的命令集来处理串口通信,可以在Visual C++、Visual Basic、Delphi 5.0等多种开发工具下使用,且具有传输速度快、使用灵活方便等特点,能够满足复杂情况下的串口通信要求。
3.1 Pcomm的主要命令码
PComm的主要命令码有以下几种:
● sio open(port);
用于设置并打开串口,其中port的1、2、3、4分别代表COM1、COM2、COM3、COM4。当返回值为0时,表示串口已经打开,否则为串口打开出错。
● sio close(port);
关闭串口,当返回值为0时,表示串口已经关闭,否则为串口关闭出错。
● sio ioctl(port?baud?mode);
用于设置串口波特率、校验位、数据位、停止位等参数。
● sio getch();
从串口输入缓冲区读出一个字符,返回值为0表示已收到数据。
● sio-read(port?buf?len);
用于从串口输入缓冲区读出一串字符,buf代表字符串数组len代表数组长度,返回值为0表示未收到字符,大于0代表收到字符的个数。
● sio-SetReadTimeouts?port?TotalTimeouts(Inter-valTimeouts);
在设定的等待时间内连续读串口输入缓冲区,TotalTimeouts代表设定的等待时间,IntervalTimeouts代表每次读出的间隔时间。
● sio-flush(port?func);
用于清空缓冲区。当func为0时清空输入缓冲区,为1时清空输出缓冲区,为2时清空输入输出缓冲区。
● sio-putch(port?term);
用于向串口缓冲区发送一个字符,返回值为0时表示发送正确,否则表示发送错误。
● sio-write(port?buf?len);
用于从串口缓冲区发送一串字符,buf代表字符串数组,len代表数组长度。
3.2 实现过程
在用Pcomm处理PC机的串口通信时,其实现过程如下:
(1)启动VC++ 6.0,新建一个基于对话框的应用程序TxRx。同时增加静态文本、编辑框和按钮控件,并为它们添加相应的变量。其属性见表1。
表1 TxRx应用程序的属性
控 件 | ID | 变量名 | 类 型 |
按 钮 | IDC_TRSMITT | 发送按钮 | |
Edit | IDC_TXDATA | M_TxData | Cstring |
Edit | IDC_RXDATA | M_RxData | Cstring |
(2) 将Pcomm.h和Pcomm.lib加入到工程中,并在TxRxDlg.cpp文件中加入#include “Pcomm.h”头文件,此后便可调用其提供的通信命令集。
(3)在TxRxDlg.cpp文件中添加有关程序代码,也就是在OnInitiDialog??函数中的TODO语句后加入以下代码:
//TODO? Add extra initialization here
int ret?port=1?
ret=sio open?port?? //打开串口1
sio DTR?port?0?? //置DTR为低电平
sio ioctl?port?B19200?P NONE|BIT 8| STOP 1?? //设置波特率为19200,8位数据位,
1位停止位,无校验位。
3.3 数据通信
下面举例说明PC机如何通过串口向单片机发送并接收数据。
void CTXRXDlgSendRecv//收发数据子函数
{
while1
{
int ret1
sio flush?port?2;//清空串口输入输出缓冲区
sio- write(port,1,5);
向串口缓冲区发送5个字符
sio- SetReadTimeouts(port,40,1);
//在40ms内每隔1ms读一次串口
ret1=sio-read(port,RecvBuf,1);
if (ret1>0)
{
sio- close(port);
break;
}
//若收到数据,关闭串口,跳出循环
else;
//若未收到数据,对串口再一次发数据并再次查询接收。
}
}
4 结束语
本文给出了分布式控制系统中上位PC机与下位单片机之间进行异步串行通信的解决方案。此方案在实际运行过程中,运行稳定,通信性能良好,从而较好地解决了上位机与下位机之间的通信问题。
- 基于GPRS网络的PLC分布式控制系统(11-30)
- 何为现场总线控制(11-16)
- 基于iCAN 协议的CAN-bus 分布式控制系统(07-14)
- 分布式控制系统在底火成品自动装配线中的运用(06-19)
- 基于DSP控制的三电平变频器的研究(08-10)
- BF561 SPORT口异步通信的软件模拟(05-08)