【网学提醒】:本文主要为网上学习者提供利用VC++开发串行通讯程序,希望对需要利用VC++开发串行通讯程序网友有所帮助,学习一下吧!
资料包括: 论文(4页2180字) 源码
说明:摘 要:本文详细介绍了使用Visual C++开发串行通讯程序的方法,并给出了一些具体的代码示例
程序。
关键词:串行通信 通讯控件
尽管现在越多越多的新型接口设备的出现,但是串口设备仍然凭借其结构简单、成本低廉等优点在
计算机外围设备中占据着重要的地位。尤其在低速率的工控设备中发挥着其主导作用。但是在用Visual C++开发串口设备的上位机程序仍然令许多是程序设计人员感到头疼,因此我们在这里简单的介绍一下串口的原理以及使用利用VC++开发开发串行通讯
程序的几种方法。
一、串口寄存器简单说明
计算机的串口芯片通常都是UART16550,它提供了8个字节长的I/O寄存器地址用以对其进行配置以及数据传输。
串口寄存器有很多都是复用的--即在读写的时候分别起到不同的作用。同时,当“线路控制寄存器”的最高为为''1''时,寄存器0,1还分别作为串口波特率因子低、高字节设置寄存器。
二、直接I/O端口访问方式
程序可以直接读写I/O端口来设置串口的工作方式。在正确设置了串口的波特率以及字长、停止位和效验方式等以后,串口就可以正常工作了。然后程序检查线路状态寄存器的最低位(位0),如果为‘1’就说明有数据到达,通过接收保持寄存器读入数据。如果状态寄存器的位5为''1''则表示发送保持寄存器已经就绪,可以进行数据发送。同时如果产生奇偶效验错、帧格式错或接收超时等错误也可以通过线路状态寄存器检测出来。下面一段
程序可以对串口进行简单的设置以及读写。
//设置串口的工作方式
void SetCommPort(unsigned int CommPort)
{
// 设置串口波特率位9600bps
outportb(CommPort+3,0x80);
outportb(CommPort ,0x0C);
outportb(CommPort+1,0x00);
// 设置8位字长,0位停止位,无奇偶效验位
outportb(CommPort+3,0x03);
outportb(CommPort+1,0x00);
// 不使用中断控制
outportb(CommPort+4,0x00);
outportb(CommPort+1,0x00);
}
//对串口进行读写访问
void ReadWriteComm(unsigned int CommPort, unsigned char &data)
{
// 等待发送寄存器空
while(inportb(CommPort+5) & 0x20 == 0);
outportb(CommPor, data);
// 等待数据的到来
while(inportb(CommPort+5) & 0x01 == 0);
data = inportb(CommPort);
}
这种方式适用于对串口进行简单的访问控制。同时由于Windows2000系统不支持直接I/O端口访问操作,因此也不能使用这种方式。
三、利用VC++的控件进行访问
VC++提供了一个Microsoft Communications Control控件可以对串口进行访问。并且由于VC的封装,它可以使程序设计人员不用理解那些复杂的API函数就可以轻松的写出串行通讯
程序。并且它适用于Windows98以及Windows2000等多个系统。
下面,我们举例说明如何使用Microsoft Communications Control控件访问串口。本
程序的编程环境是Win98和VC++6.0。这个编程示例可以由用户选定进行传输的通信端口,并设定这个端口的相关参数,包括波特率、数据位、停止位、奇偶校验和流量控制等。还具有发送数据和接收数据的双重功能。
1、创建
程序并添加控件
启动VC++,利用MFC AppWizard(exe)新建一个项目文件,并命名为CommTest,在AppWizard第一步选择基于对话框的应用程序类型(Dialog based),在第二步将ActiveX Controls复选框选中,表示本程序支持ActiveX控件。其他均接收缺省设置,AppWizard将自动生成一个以对话框为主窗口的应用程序。下面我们将在该
程序中加入通讯控件。在Resource View中打开对话框(IDD_COMMTEST_DIALOG),将其修改为如图一所示的对话框。
单击Project菜单,从菜单中选择Add to Project,再单击Components and Controls,从弹出的对话框中单击Registered ActiveX Controls,然后在列表框中选择Microsoft Communications Control,单击OK。这时会询问你是否加入CMSComm类,单击OK,返回后就会看到控件工具条上添加了一个通讯控件(形状如电话机),将其拖放到对话框上,同时注意到Project中新增加了一个类。
目录:一、串口寄存器简单说明
二、直接I/O端口访问方式
三、利用VC++的控件进行访问