用C语言编程的数据采集系统

更新时间:2023-05-22 21:43:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2001年第4期仪表技术

—15—

用C语言编程的数据采集系统

郑海英,王立红,闫俐

(辽宁工学院信息科学与工程系,辽宁锦州121001)

摘要:介绍一种利用PC机和ADC构成的、并用C语言编程的数据采集系统。

关键词:C语言;数据采集系统;A/D转换

DataAcquisitionSystemBasedonCProgram

ZHENGHai-ying;WANGLi-hong,YANLi

(InformationScience&EngineeringDept.ofLiaoningInstituteofTechnology,Jinzhou121001,China)

Abstract:ThepapergivesdataacquisitionsystembasedonCprogramandusingPCandADC.Keywords:Clanguage;dataacquisition;ADC

微机控制的数据采集系统,在过程控制和动态监测

等领域得到了非常广泛的应用。利用PC机和AD板构成这种系统是较好的选择。它可以在PC机显示器上给出比单片机数据采集系统更为生动的彩色显示,此外,还可以利用C语言编程的优越性取代汇编语言编程,从而不仅使程序大大简化,而且使其与机器无关,即在具有I/O扩展槽的不同型号的PC机上都可使用。1 硬件连接

PC机的I/O扩展槽给出了数据总线D0~D7,地址总线A0~A19,地址允许AEN以及IOR、IOW等信号。只要AD板的数据、地址总线分别与扩展槽的对应,则将AD板插入扩展槽即完成了硬件连接。AD板上的地址译码,一般采用不完全译码方式,即只用A0~A1112条地址线。但必须保证所译地址不与其他外设口地址冲突。现取AD574作为A/D转换器,其输入有0~10V和0~20V2个量程,并有12位和8位两种转换方式,输出分高8位和低4位,因此要占用4个地址,由A0连接到脚4和A1连接到脚5来实现。当A1A0为00和01时分别启动A/D的12位转换和8位转换,当A1A0为10和11时,则分别读出高8位和低4位。如果地址从0500H开始不与其他口地址冲突,用74系列逻辑芯片构成译码电路,则AD574与译码电路的连接如图所示。

A11A10A9A8  A7A6A5A4  A3A2A1A0  0101

0000

0000

地址允许AEN在IOR,IOW出现前变为低电平,以确认I/O口操作有效,因此把AEN加入地址译码电路中。

AD574的状态(STS)脚28,在转换结束时变为低电平,用三态门74LS244连接到D7,以便用来查询转换是否完毕。三态门脚1连接到74LS138的Y1,脚19连接到IOR。这样,三态们的地址将是0504H~0507H之一。例如访问0504H,便可将AD574脚28上的状态位经D7传送到CPU。为去除D6~D0各位的影响,可把此字节和80H相“与”,因而D6~D0各位都变为0。若“与”的结果为0,则状态位也为0,表示转换已完毕,便可读出转换结果的高8位和低4位。否则,应继续等待。

2 用C语言编写A/D转换程序

在C语言的库函数中,有访问外设口的函数out-portb(),它将一个字节数据写入外设口寄存器;函数inportb(),把口寄存器中一个字节读入CPU。因此,启动A/D转换应该用前者,但由上图知,并不需将数据写入AD574,只需将A1A0变为00,所以可把1字节写

收稿日期:2001—04

:—),,讲师,。

—16—

仪表技术2001年第4期

为0XFF。假定上图中用0~10V量程,且只有一个被测量通道,完成12位转换,则可写出如下的A/D转换函数:

unsigned adconvert()   {unsigned adh8=0; unsigned adL4=0; unsigned adresult=0; outportb(0x500,0xff); while(inportb(0x504)&&0x80);

/*定义adconvert函数*/

/*定义转换结果高8位*//*定义结果低4位*//*定义转换结果12位*//*启动A/D转换*/

/*查询状态位,等待转换结束*/

3 讨论

当多个通道被测量需要A/D转换时,只需利用多路模拟开关,例如CD4051,将各路被测量分时接入

AD574。同样,用上图中的74LS138的输出连接CD4051的片选。例如用Y3,则地址将是050CH~050FH之一。于是用outportb(0x50c,0x00)接通0号通道,outportb(0x50c,0x01)接通1号通道,等等。在主程序中应先接通要转换的通道,再启动A/D转换,即调用adconvert()函数。

在过程控制系统中,还需在上图所示AD板中,加入D/A转换器,它将机器输出的控制数据转为模拟量,去推动执行部分。此时,要用IOW和地址总线去控制D/A转换器的片选。例如用上图中的Y4,则地址将是0600H~0603H之一。于是用outportb(0x600,0xf3),便可把16进制一个字节数据f3写入D/A转换器,D/A转换器将其转换为模拟电流或电压输出。

(许雪军编发)

 adh8=(unsigned)inportb(0x502);/*取转换结果高8位*/ adL4=(unsigned)inportb(0x503);/*取低4位*/ adh8=adh4≤4; adresult=adh8+adL4; return(adresult);}

/*高8位左移4位*//*得出转换结果*//*将结果值返回调用处*/

 adL4=adL4≥4;       /*低4位右移4位*/

由上述可见,调用一次adconvert()函数,将进行一次A/D转换,并返回其12位转换结果。显然,此程序比汇编语言程序简单,可读性强,而且与机器类型无

关。

第二届NI征文大赛获奖名单

评选结果一等奖二等奖

李庄张明马法成

黄宜坚,汪海波,王伟

三等奖

金暄宏张天宏张小牛,时秋兰王鸿钰郑万泔

王虎,王鹏,温建中余永华,杨建国

鼓励奖

戴静谢亚宁

姓名

公司

天津大学精密仪器与光电子工程学院摩托罗拉(中国)电子有限公司天津中德职业技术学院国立华侨大学机电工程系上海理工大学光电学院

南京航空航天大学能源与动力学院清华大学电机系基本电工教研组上海仪器仪表研究所南京汽轮高新技术开发公司南京邮电学院通信工程系武汉理工大学能源动力工程学院上海理工大学光电学院

中国科学院高能物理研究所同步辐射实验室

飞利浦移动显示系统公司上海分公司北京航空航天大学航空可靠性综合重点实验室

清华大学电机系基本电工教研组

题  目

基于虚拟仪器的原油管道泄漏监测系统应用CVI进行汽车电喷模块的测试

虚拟仪器在设备故障诊断技术实验教学中的应用基于虚拟仪器的圆盘式电流变传动机构的检测与控制系统

图像处理方法在车灯配光检测系统中的应用研究NI若干技术在设备远程故障诊断中的应用基于LabVIEW的钢轨顶面短波不平顺检测系统的开发

压缩机性能测试系统

大型汽轮发电机组及辅机振动状态在线监测工作站用LabVIEW开发SDH/PDH远程测试系统

基于虚拟技术的柴油机状态监测与故障诊断系统的开发

基于虚拟仪器技术的烟道飘灰监测系统基于LabVIEW的同步辐射实验系统

基于LabVIEW和IMAQ的LCD机器视觉精确检测系统Lxy

单轴多点正弦振动试验控制系统用NI虚拟仪器提升电工实验教学水平

李春森

李传日,齐华时秋兰,赵伟,候国屏

本文来源:https://www.bwwdw.com/article/2kh4.html

Top