基于C语言的数据通信接口软件设计

2012-04-29 00:44杜福鹏,阮滨
电脑知识与技术 2012年2期
关键词:程控

杜福鹏,阮滨

摘要:该文从C程序设计语言的特点出发,论述了自动测量系统中数据通信接口的软件开发方法,实现了GPIB接口的初始化,数据接收,数据处理,数据发送的功能。

关键词:GPIB;DLL调用;程控

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)02-0335-03

Software C-based Design for Data Communication Interface

DU Fu-peng, RUAN Bin

(92493 Army 89 Unit, Huludao 125000, China)

Abstract: This article from the C programming language characteristics, discusses the automatic measurement system, data communication interface of the software development methodology, to achieve a GPIB interface initialization, data reception, data processing, data transmis? sion functions.

Key words: GPIB; DLL calls; program-controled

根据GPIB总线的特点和GPIB接口在仪器仪表中的广泛应用,系统采用D7210C和75160BN,75161BN实现了GPIB接口电路,接口电路实现了双向、异步、准确可靠的数据通信任务。软件部分设计主要用到的是GPIB的WIN32API函数驱动库。通过DLL调用技术可以完成API函数库封装的对GPIB设备初始化、读取数据、写入数据或命令以及清除等各种控制操作。

1数据通信接口实现

根据GPIB接口特点,采用D7210C和75160BN,75161BN芯片按照如下电路可以实现计算机与仪器与测量系统间的数据通信。

图1数据通信接口电路

2对GPIB接口的初始化方法

void gpib_init()//gpib初始化

{

XBYTE[0x0500]=0x02;//芯片复位

XBYTE[0x0500]=0x2c;//置位外部计数发生器

XBYTE[0x0500]=0x8c;//设置为8bits数据传送

XBYTE[0x0500]=0xa8;//低电平中断

XBYTE[0x0500]=0xc0;//进入准备

XBYTE[0x0100]=0x03;//设输入输出产生中断

XBYTE[0x0400]=0x31;//设受命方式为1

XBYTE[0x0600]=0x20;//设程控地址

XBYTE[0x0600]=0xc0;//设程控地址为15

XBYTE[0x0700]=0x0a;//设结束字符为“0x0a”(回车)

XBYTE[0x0500]=0;//立即执行,产生本地消息

}

3数据接收函数

void rec488()//数据接收

{

char idata tem48,tem88;

char idata i,j;

tem48=XBYTE[0x0100];

if((tem48&0x08)==0x08)//产生器件清除中断

{

;//不执行任何指令

}

else if((tem48&0x04)==0x04)//出错中断

{

XBYTE[0x0100]=0x08;//器件清除

return;

}

else if((tem48&0x01)==0x01)//收到数据,将数据存到pdtem[]数组

{

i=0;

for(j=0;j<18;j++)

pdtem[j]=0;

tem88=XBYTE[0x0000];

while(tem88!=0x0a)//遇到结束符0x0a则接收完毕

{

pdtem[i]=tem88;

i++;

tem48=XBYTE[0x0100];

while((tem48&0x01)!=0x01)

tem48=XBYTE[0x0100];

tem88=XBYTE[0x0000];

}

strjudge();//接收完毕进入数据处理程序

4数据处理函数

void strjudge()//数据处理

{

if(strncmp(pdtem,"data",4)==0)//判断接收到的指令(如果前四个字符为"data0")

{

……

……

……//执行相应操作

send_data(pdtem);//将要返回的字符放到pdtem[]数组,发送到计算机接收

5数据发送函数

void send_data(char temp[64])//数据发送

{

uchar i;

i=0;

do

{

tem88=XBYTE[0x0100];

while((tem88&0x02)!=0x02)

tem88=XBYTE[0x0100];

XBYTE[0x0000]=pdtem[i];

i++;

}

while(pdtem[i-1]!=0x0a);//遇到结束符0x0a则发送完毕

while(((tem88=XBYTE[0x0100])&0x02)==0x02); //防止输出中断未清除,这句可以不加}

6结论

通过编程软件实现了接口的初始化,数据的接收,数据的处理和数据的发送基本功能,在软件平台下调用板卡厂商提供的DLL对操作系统API(Application Programming Interface)函数的调用。API函数包含在附加名为DLL的动态连接库文件中,API函数可以做到很多的功能。因此,可以通过调用DLL的方法来调用各种API函数,来实现各种任务。

参考文献:

[1]李宗阳.时间频率计量[M].北京:原子能出版社,2002:88-101.

[2]季海峰.基于虚拟仪器测试系统的PCI-GPIB控制器的设计和研究[M].南京:南京理工大学,2007:23-30.[2] Lippman S B.C++Primer中文版[M].李师贤,译.4版.北京:人民邮电出版社,2006.

[3]冯宏华.C++应用程序性能优化[M].北京:电子工业出版社,2007.

[4]钱能.C++程序设计教程[M].北京:清华大学出版社,1999.

猜你喜欢
程控
基于单片机的程控增益放大器设计
基于Multisim10和AD603的程控增益放大器仿真研究
程控交换网络技术及智能云交换技术综述和展望
LabVIEW程控电子负载的实现与虚拟面板设计
功率程控发射机的设计
程控交换机的维护及管理探析
程控增益射频宽带放大器
基于STC89C52的程控移相器的设计
一种可程控精密直流电流测量系统的设计
基于STM32的程控直流电子负载设计