首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
用I/O操作实现RS232口数字及模拟信号的采集
来源:本站整理  作者:佚名  2010-02-11 00:28:45



  本文介绍了如何利用RS232寄存器I/O操作,实现RS232口的直接数字量输入及简便的模拟量输入方法。用这种方法实现的A/D转换器及I/O扩展器,直接利用RS232口进行供电,无需外接其它电源。在软件编程方面,无需对串口进行波特率及数据格式设置。通过配置相应的电路,不仅能够完成标准TTL信号的输入,还能完成光隔小信号输入。是一种简便而又行之有效的数据采集方法。

关键词 RS232接口 MCR寄存器 MSR寄存器 LCR寄存器 数字量采集 模拟量采集 串行A/D转换

 1.  前言

RS232端口几乎是所有x86计算机必备的端口,它可以连接FAX/MODEM设备、串行鼠标器、串行小键盘、采集模块、PLC等,还可以连接RS232-RS485适配接头,控制RS485网络设备。RS232端口广泛采用9芯D型接头,具有接线简单、传输速率高、传数据可靠等优点。除了Tx/Rx方式的高效数据传输外,RS232接口还具备直接I/O输入输出能力。本文介绍的是利用RS232接口直接完成4路数字量信号的输入,可广泛地应用于机关开关式传感器、临近感应式传感器、霍尔效应式传感器、小型机械键盘、TTL信号的输入。除此之外,利用简单的I/O操作,还可实现RS232口的多路模拟信号采集。简单的串口I/O操作,只是利用RS232口的MCR及MSR寄存器,无需串口初始化及波特率设置等烦琐操作。

2.   RS232的端口安排

计算机正常启动后,RS232端口COM1、COM2、COM3、COM4的地址一般被安排在3F8、2F8、3E8、2E8,用于了解外部状态的寄存器地址则被分别设置为3FE、2FE、3EE、2EE,用于控制外部设备的寄器地址则被设置3FC、2FC、3EC、2EC,。RS232接口的针脚安排如下:

D型25芯接头

D型9芯接头

PIN8....CD

pin1

pin3...RxD

pin2

pin2...TxD

pin3

pin20..DTR

pin4

pin7....SG

pin5

pin6...DSR

pin6

pin4...RTS

pin7

pin5...CTS

pin8

pin22...RI

pin9

信号名称

TxD

Transmit Data

RxD

Receive data

RTS

Request to send

CTS

Clear to Send

DSR

Data Set Ready

DTR

Data terminal ready

SG

Signal ground

RI

Ring inDICator

CD

Carrier Detect

 

 

 

 

由于大多数x86计算机都使用9芯D型接头。下面讲述的寄存器安排,均指的是9芯D型接头。

 

RS232口MCR寄存器安排:

地址

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

3FC

X

X

X

X

X

X

PIN7

PIN4

2FC

X

X

X

X

X

X

PIN7

PIN4

3EC

X

X

X

X

X

X

PIN7

PIN4

2EC

X

X

X

X

X

X

PIN7

PIN4

 

              RS232口MSR寄存器安排

      

地址

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

3FE

PIN1

PIN9

PIN6

PIN8

X

X

X

X

2FE

PIN1

PIN9

PIN6

PIN8

X

X

X

X

3EE

PIN1

PIN9

PIN6

PIN8

X

X

X

X

2EE

PIN1

PIN9

PIN6

PIN8

X

X

X

X

 

上面的列表对RS232寄存器进行了必要的简化。MCR寄存器用于控制D型接头的7脚和4脚,MSR用于读取1、9、8、6脚的状态,5脚为地。标有X的位用于其它用途,本文不作介绍。

 

3.   RS232窃电技术

EIA-RS232标准中未定义电源输出引脚,所以RS232接口中找不到电源输出针脚,只能间接地从RS232的其它引脚中获取电源。最直接的方法是利用PIN7和PIN4两个针脚,它们足以驱动CD4093、LM324等MOS型IC芯片器件。除此之外,还可以用下述方法从Tx和Rx引脚中获取电源。

Tx和Rx在传输信号时是正负变化的,图中的二极管D1和D2可以从Rx和Tx中获取一定的能量供后续电路使用。由于本文的直接I/O不使用Tx和Rx传输数据,因此对RS232的窃电只使用PIN7和PIN4,电路图如下:

 

比较好的窃电方法是上述两种方法的结合,电路图如下:

 

4.   TTL信号的采集

RS232接口可以直接采集TTL信号,TTL信号电平与RS232的标准规定是不一样的,但TTL信号电平在RS232标准规定电平之内,所以TTL信号可以直接通过RS232进行采集。谈到RS232直接I/O操作,就要考虑MSR寄存器。

 

QBASIC采集例程

PINS =INP(&H3FE)

 

I/O操作实现RS232口数字及模拟信号的采集

宋永强 北京232信箱 邮编101149

中海油田服务有限公司研发中心信息技术及产品制造部


BIT7 = (PINS AND 128) / 128

BIT6 = (PINS AND  64) /  64

BIT5 = (PINS AND  32) /  32

BIT4 = (PINS AND  16) /  16

 

TC++采集例程

#include<conio.h>

#include<stdio.h>

main()

{

int ISTATU,BNC,BIT7,BIT6,BIT5,BIT4;

ISTATU = inportb(0x3fe);

BIT7 = (ISTATU&128) / 128

BIT6 = (ISTATU& 64) /  64

BIT5 = (ISTATU& 32) /  32

BIT4 = (ISTATU& 16) /  16

}

 

Visual Basic采集例程

由于Visual Basic本身不具备端口处理能力。因此,要借助于外部的动态链接库实现对端口的操作。WINACQ.DLLWINACQ32.DLL是比较适用的动态链接库。前者用于VB2.0VB3.0WIN3X环境下的程序开发,后者用于VB5.0VB6.0WIN9X环境下的控制开发。您可以任意使用传播这两个动态链接库。

 

此程序可以在处或在下述站点免费下载:

http://www.download.com.cn

http://www.daqchina.net

 

l        VB2VB3编程

MODULE1.BAS模块中声明送数函数

DECLARE FUNCTION OUTDATA LIB "WINACQ.DLL"

(BYVAL WPP AS INTEGER,BYVAL WMM AS INTEGER)

AS INTEGER

其中WPP: 端口地址    WMM: 数据

 

MODULE1.BAS模块中再声明取数函数

DECLARE FUNCTION FETDATA LIB "WINACQ.DLL"

(BYVAL WPP AS INTEGER) AS INTEGER

其中WPP: 端口地址    函数返回值即为读取的数据

 

FORM1窗体上放一个COMMAND1钮,其下面填写代码:

 

ISTATU = FETDATA(&H3FE)

BIT7  = (ISTATU AND 128) / 128

BIT6 = (ISTATU AND  64) /   64

BIT5 = (ISTATU AND  32) /   32

BIT4 = (ISTATU AND  16) /   16

 

l        VB5VB6编程

VB5VB6下编程与在VB2VB3下编程类似。

 

MODULE1.BAS模块中声明送数函数

DECLARE FUNCTION OUTDATA LIB "WINACQ32.DLL"

(BYVAL WPP AS INTEGER,BYVAL WMM AS INTEGER)

AS INTEGER

其中WPP: 端口地址    WMM: 数据

 

MODULE1.BAS模块中再声明取数函数

DECLARE FUNCTION FETDATA LIB "WINACQ32.DLL"

(BYVAL WPP AS INTEGER) AS INTEGER

其中WPP: 端口地址    函数返回值即为读取的数据

 

FORM1窗体上放一个COMMAND1钮,其下面填写代码:

 

ISTATU = FETDATA(&H3FE)

BIT7 = (ISTATU AND 128) / 128

BIT6 = (ISTATU AND  64) /  64

BIT5 = (ISTATU AND  32) /  32

BIT4 = (ISTATU AND  16) /  16

 

上述编程需要将WINACQ.DLLWINACQ32.DLL拷贝到WINDOWS\SYSTEM目录及WINDOWS\SYSTEM32目录下面去。

 

采集到的BIT7BIT6BIT5BIT4意义如下:

MSR寄存器位值

9D型接头针脚状态

BIT7

BIT6

BIT5

BIT4

PIN1

PIN9

PIN6

PIN8

0

0

0

0

低电平

低电平

低电平

低电平

0

0

0

1

低电平

低电平

低电平

高电平

0

0

1

0

低电平

低电平

高电平

低电平

0

0

1

1

低电平

低电平

高电平

高电平

0

1

0

0

低电平

高电平

低电平

低电平

0

1

0

1

低电平

高电平

低电平

高电平

0

1

1

0

低电平

高电平

高电平

低电平

0

1

1

1

低电平

高电平

高电平

高电平

1

0

0

0

高电平

低电平

低电平

低电平

1

0

0

1

高电平

低电平

低电平

高电平

1

0

1

0

高电平

低电平

高电平

低电平

1

0

1

1

高电平

低电平

高电平

高电平

1

1

0

0

高电平

高电平

低电平

低电平

1

1

0

1

高电平

高电平

低电平

高电平

1

1

1

0

高电平

高电平

高电平

低电平

1

1

1

1

高电平

高电平

高电平

高电平

由此可以看出,我们通过软件连续读取MSR寄存器的状态就直接反应了RS232D型接头的针脚的电平情况。

关键词:

相关阅读

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:21,343.75000 毫秒