深入浅出VC++串口编程--基本概念
引言
在PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。我们可以通过设备管理器来查看COM的硬件参数设置,如图1。
图1 在Windows上查看PC串口设置 |
迄今为止,几乎每一台PC都包含COM。本质而言,COM是PC为和外界通信所提供的一种串行数据传输的接口。作为一种物理通信的途径和设备,它和目前风靡的另一种串行接口――USB所提供的功能是一致的。不过RS-232C显然已经开始被后起之秀USB赶超,因为USB的传输速率已经远远超过了RS-232C。
尽管如此,RS-232C仍然具有非常广泛的应用,在相对长的一段时间里,难以被USB等接口取代。RS-232C接口(又称EIA RS-232C),1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定,全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"。
本文将对这一接口进行硬件原理的介绍,随后我们将逐章学习DOS平台的串口编程,及Windows平台下基于API、控件和第三方类的串口编程,最后本文将给出一个综合实例。
在本文的连载过程中,您可以通过如下方式联系作者(热忱欢迎读者朋友对本文的内容提出质疑或给出修改意见):
作者email:21cnbao@21cn.com(可以来信提问,笔者将力求予以回信解答,并摘取其中的典型问题,在本系列文章最后一次连载的《读者反馈》中予以阐述);
硬件原理
众所周知,CPU与存储芯片和I/O芯片的通信是并行的(并行传输的最大位数依赖于CPU的字长、数据总线的宽度),一种叫做UART(通用异步收发器,Universal Asynchronous Receiver/Transmitter)的芯片提供了并行数据传输和RS-232C串行数据传输方式的转换。这样的设备通常有如图2所示的管脚分布,当其向外传输数据时,CPU并行的将数据写入这类芯片的寄存器,UART再将寄存器中的数据一位一位地移动并向外传输;当外界向其传输数据时,UART一位一位地接收数据,并将其移位组合为并行数据,CPU再并行地读取这些数据。实际上,由于UART芯片一般以TTL/CMOS电平工作,在UART连接接口之前,还要经过一个TTL/CMOS和RS-232C电平的转换。RS-232C规定了其标准的电气特性,逻辑1对应的电压必须在-5~-15V之间;逻辑0对应的的电压必须在+5~+15V之间。
图2 UART并/串转换 |
一个常见的TTL/CMOS和RS-232C电平转换芯片如图3。
图3 常见的TTL/CMOS和RS-232C电平转换芯片 |
RS-232C通常以两类接插件与外界相连,分别称为DB9和DB25,如图4所示。
图4 DB9和DB25 |
而接插件中各个针的定义则如表1:
表1 DB9和DB25引脚定义
DB9
|
DB25
|
||||
针号 | 功能说明 | 缩写 | 针号 | 功能说明 | 缩写 |
1 | 数据载波检测 | DCD | 8 | 数据载波检测 | DCD |
2 | 接收数据 | RXD | 3 | 接收数据 | RXD |
3 | 发送数据 | TXD | 2 | 发送数据 | TXD |
4 | 数据终端准备 | DTR | 20 | 数据终端准备 | DTR |
5 | 信号地 | GND | 7 | 信号地 | GND |
6 | 数据设备准备好 | DSR | 6 | 数据准备好 | DSR |
7 | 请求发送 | RTS | 4 | 请求发送 | RTS |
8 | 清除发送 | CTS | 5 | 清除发送 | CTS |
9 | 振铃指示 | DELL | 22 | 振铃指示 | DELL |
RS-232C定义为数据通信设备(DCE)和数据终端设备(DTE)之间的互连,实现上,到现在为止,究竟一个设备属于DCE还是属于DTE已经没有明显的界限,PC即可作为DCE,又可作为DTE。两串口互连,连接方法主要有二:
一种方法是,数据的发送和接收由软件控制,不进行硬件握手,其连接方法如图5(最常用DB9连接示意)和表2(DB9、DB25三线连接表),真正需要互相连接的是RXD、TXD和GND;
图5 无硬件握手时两串口连接 |
表2 DB9、DB25三线连接
9针-9针
|
5针-25针
|
2 9针-25针
|
|||
2 | 3 | 3 | 2 | 2 | 2 |
3 | 2 | 2 | 3 | 3 | 3 |
5 | 5 | 7 | 7 | 5 | 7 |
软件握手又称为XON/XOFF,通常以CTRL-S(0x13)和CTRL-Q(0x11)两个字符来实现流控制。前者用于请求对方暂停发送,后者用于清除暂停传送的请求,继续发送数据。
另一种方法是,数据的发送和接收由硬件控制,进行硬件握手,其连接方法如图6(最常用DB9连接示意),需要连接的信号除RXD、TXD和GND外,还包括DTR、DSR、RTS和CTS。
硬件握手依赖于RTS和CTS信号,当发送设备欲发送数据时,将RTS信号置为有效表示请求发送,接收设备准备好后,置CTS信号有效,接着发送设备通过信号线TXD开始发送串行数据。
这里我们联想开来,RTS/CTS模式在许多领域里都出现过。回忆一下IEEE 802.11无线局域网协议标准,在其MAC协议中就使用了RTS/CTS,RTS/CTS抽象开来就是一种请求/应答。笔者曾经在拙作中多次以实例论证计算机领域里许多知识的相通性,这又是一个明证。
图6 有硬件握手时两串口连接 |
实际上,目前我们经常使用的是方法一,即只连接RXD、TXD和GND,简单灵活。另外,串口之间互连还有诸多途径,如图7所示。
|
调试工具
在MS-DOS下使用的编程环境是TC 2.0;
在Windows 2000下的编程环境是VC++ 6.0;
借助工具:串口调试助手2.1(图8)。
图8 串口调试助手 |
串口调试助手是由《Visual C++/Turbo C串口通信编程实践》一书作者龚建伟编写的共享软件,可以方便地进行串口上的数据收发、显示(16进制和ASCII码方式)和串口参数的设置,在串口调试领域应用广泛。
"串口调试助手"的开发原理很简单(相信读者看完本文后在相当短的时间之内就能开发出这样的软件),但是作者龚建伟敏锐地抓住了串口调试在业界的需求,使得自身随这一软件而成名。这一事件或多或少会给程序员们一定的启发。优秀的共享软件不一定要技术含量高,只要有需求,哪怕是开发原理再简单,都能拥有广泛的使用者。
为了在一台PC上同时搭建DOS和Windows平台,我们应该在Windows平台上安装虚拟PC的软件VmWare(图9,VMware Inc.版权所有,http://www.vmware.com)。VMware的确是天才的作品!在同一PC上,利用VmWare几乎可以安装所有的操作系统,而且操作系统之间的切换不需要重新启动电脑,与传统的LILO等多系统引导方式有本质的不同。VM的意义是Virtual Machine,即虚拟出一个逻辑的电脑。
图9 VmWare虚拟PC |
在虚拟PC的MS-DOS操作系统上,我们安装TC 2.0开发环境。
如果您的PC上没有软驱,为了制作MS-DOS启动软盘,请安装RamDiskNT模拟一个软盘,并在其上安装MS-DOS启动程序。RamDiskNT是一个磁盘模拟软件,其界面如图10所示。
|
深入浅出VC++串口编程--基本概念相关推荐
- 深入浅出VC++串口编程--基于控件
深入浅出VC++串口编程之基于控件源代码下载 MSComm控件 Visual C++为我们提供了一种好用的ActiveX控件Microsoft Communications Control(即MSCo ...
- 深入浅出VC++串口编程--第三方类
串口类 从本系列文章连载三.四可以看出,与通过WIN32 API进行串口访问相比,通过MScomm这个Activex控件进行串口访问要来的方便许多,它基本上可以向用户屏蔽多线程的细节,以事件(发出On ...
- 深入浅出VC++串口编程--短信应用开发
前面数次连载我们以较长的篇幅讲解了串口通信的硬件原理.DOS平台控制以及基于WIN32 API.控件和第三方类的串口编程.作为本系列文章的最后一次连载,本章将给出一个典型的应用实例:西门子短信服务模块 ...
- 深入浅出VC++串口编程之短信应用开发
前面数次连载我们以较长的篇幅讲解了串口通信的硬件原理.DOS平台控制以及基于WIN32 API.控件和第三方类的串口编程.作为本系列文章的最后一次连载,本章将给出一个典型的应用实例:西门子短信服务模块 ...
- 深入浅出VC++串口编程--基于Win32 API
1.API描述 在WIN32 API中,串口使用文件方式进行访问,其操作的API基本上与文件操作的API一致. 打开串口 Win32 中用于打开串口的API 函数为CreateFile,其原型为: H ...
- 深入浅出VC++串口编程之基于Win32 API
1.API描述 在WIN32 API中,串口使用文件方式进行访问,其操作的API基本上与文件操作的API一致. 打开串口 Win32 中用于打开串口的API 函数为CreateFile,其原型为: H ...
- 深入浅出Visual C++串口编程--深入浅出VC++串口编程之DOS的串口编程
在DOS平台下,操作串口主要有下列方式:通过BIOS调用.通过串口的硬件中断或通过对串口硬件进行轮询,本章将对以上三种方式进行具体的介绍并给出例子. 1.BIOS中断 在DOS操作系统下,IBM PC ...
- MFC 串口编程实例
MFC 串口编程实例 VC串口编程从实现方法上一般分为两种,一种使用MSCOMM控件,这种方法比较简单,软件的移植性较低,在这里介绍一种串口封装类的使用方法. 代码 先看代码 CommUtils.cp ...
- VC串口通信编程-2
VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...
最新文章
- C#中导出Excel报表的方法
- stylelint初体验
- ________________2058_______________后台数据不够。可能误判。
- winscp开启ftp_如何使用winscp,如何使用winscp连接FTP
- (27) java web的struts2框架的使用-基于表单的多文件上传
- java new url 带密码_获取密码重置URL
- WSAStartup()函数以及DLL的加载
- element UI 制作带快捷选项的时间选择器
- C++ STL 迭代器5种类型 简介
- python进程的回收—wait
- 使用Java8的进来,这几个方法不香吗?
- mysql2008无法登陆_SQL2008不能登录实例
- 正则表达式JavaScript版本回顾笔记背诵版本
- I2C总线串行串行输入输出结构
- MTK 驱动(76)---如何用adb控制MTKLogger
- Redis数据库 | 快速入门 | 自学笔记
- php 随机输出字符串,如何使用PHP生成随机字符串
- 【Web技术】(实验一)HTML静态网页设计
- nuvoton ADC采集
- 打外星人的回合制JAVA游戏_25款最佳太空游戏盘点 带玩家到太空殖民打外星人...
热门文章
- oracle的redo与undio
- Vue性能优化:图片与组件,如何实现按需加载?
- Nginx通过地理位置限制访问
- 如果你不喜欢Windows 11开始菜单,还可以用注册表换回Windows 10样式
- CentOS7 Cloudera Manager6 完全离线安装 CDH6 集群
- 1、Docker部署及基础理论
- leetcode 最长回文子串
- css display: inline-block 去间隙
- 【树莓派】如何设置树莓派 VNC 的分辨率
- C#LeetCode刷题之#705-设计哈希集合​​​​​​​(Design HashSet)