3.2.3 Hello World--第一个串口通信程序(3)
下面的事情对于不同的开发环境是完全一样的。所以完全有理由合并不同版本的工程。在网上"下载专区"的源代码中,您会发现这个例子以这样一个文件结构出现:
---HelloWorld | HelloWorld.cpp | HelloWorldVC6.dsp | HelloWorldVC6.dsw | HelloWorldVC7.sln | HelloWorldVC7.vcproj | StdAfx.cpp | StdAfx.h |
您可以根据Visual C++(www.cppentry.com)的版本,打开相应的工程。无论您使用何种版本的Visual C++(www.cppentry.com),工程所包含的源代码文件是相同的。
作为第一个程序,我们打算采用最简单的方式展示串口通信程序设计中最基本的技术要点。
在本书的前面讲到串口是计算机系统的I/O设备,所以需要使用I/O库的基本头文件(stdio.h)。在StdAfx.h中合适的位置包含这个头文件,还有以下必要的头文件:
#include <stdio.h> #include <string.h> |
为了显示Hello World,首先需要定义这个字符串:
#include "stdafx.h" int main(int argc, char* argv[]) { char lpBuf[]="Hello World!"; …… return 0; } |
接下来就要打开串口"COM1":
#include "stdafx.h" int main(int argc, char* argv[]) { char lpBuf[]="Hello World!"; FILE* pFile=fopen("COM1","w"); if (pFile==NULL) { return 1; } …… return 0; } |
当打开成功后,就把字符串写到这个文件中。
#include "stdafx.h" int main(int argc, char* argv[]) { char lpBuf[]="Hello World!"; FILE* pFile=fopen("COM1","w"); if (pFile==NULL) { return 1; } fwrite(lpBuf,sizeof(char),strlen(lpBuf),pFile); …… return 0; } |
一定不要忘记关闭文件指针,尽管操作系统会自动关闭文件指针,但是为了照顾到程序代码的可读性以及程序的稳定性,建议您养成使用诸如fclose、CloseHandle等收尾处理函数的好习惯。
#include "stdafx.h" int main(int argc, char* argv[]) { char lpBuf[]="Hello World!"; FILE* pFile=fopen("COM1","w"); if (pFile==NULL) { return 1; } fwrite(lpBuf,sizeof(char),strlen(lpBuf),pFile); fclose(pFile); return 0; } |
程序编写完成后,需要编译这个工程。编译的选项在Build(编译)菜单中。
现在打开接收端的串口调试助手,在发送端运行刚刚编译的程序,就会在接收端的数据接收区域中看到"Hello World!"。
为了试验这个通信示例的可行性,本书的作者尝试了很多种串口连接方案,结果运行得都非常好。尽管如此,还是相信有一些读者的程序不能正常地工作,即使物理连接是畅通的,而且COM1没有被其他设备(比如有一个串口鼠标)或程序(比如忘记关掉占用COM1的串口调试助手)占用。
请把fopen语句参数中的"COM1"换成"CON",编译并运行,观察发生的现象。
如果您使用的是低于Windows Vista版本的操作系统,请尝试建立一个名为COM1的文件,观察操作系统的反馈并思考为什么。
如果您成功地运行了Hello World,请尝试使用fread进行串口数据的接收。
【责任编辑:
云霞 TEL:(010)68476606】