杜福鵬,阮濱
摘要:該文從C程序設(shè)計(jì)語言的特點(diǎn)出發(fā),論述了自動(dòng)測(cè)量系統(tǒng)中數(shù)據(jù)通信接口的軟件開發(fā)方法,實(shí)現(xiàn)了GPIB接口的初始化,數(shù)據(jù)接收,數(shù)據(jù)處理,數(shù)據(jù)發(fā)送的功能。
關(guān)鍵詞:GPIB;DLL調(diào)用;程控
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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
根據(jù)GPIB總線的特點(diǎn)和GPIB接口在儀器儀表中的廣泛應(yīng)用,系統(tǒng)采用D7210C和75160BN,75161BN實(shí)現(xiàn)了GPIB接口電路,接口電路實(shí)現(xiàn)了雙向、異步、準(zhǔn)確可靠的數(shù)據(jù)通信任務(wù)。軟件部分設(shè)計(jì)主要用到的是GPIB的WIN32API函數(shù)驅(qū)動(dòng)庫。通過DLL調(diào)用技術(shù)可以完成API函數(shù)庫封裝的對(duì)GPIB設(shè)備初始化、讀取數(shù)據(jù)、寫入數(shù)據(jù)或命令以及清除等各種控制操作。
1數(shù)據(jù)通信接口實(shí)現(xiàn)
根據(jù)GPIB接口特點(diǎn),采用D7210C和75160BN,75161BN芯片按照如下電路可以實(shí)現(xiàn)計(jì)算機(jī)與儀器與測(cè)量系統(tǒng)間的數(shù)據(jù)通信。
圖1數(shù)據(jù)通信接口電路
2對(duì)GPIB接口的初始化方法
void gpib_init()//gpib初始化
{
XBYTE[0x0500]=0x02;//芯片復(fù)位
XBYTE[0x0500]=0x2c;//置位外部計(jì)數(shù)發(fā)生器
XBYTE[0x0500]=0x8c;//設(shè)置為8bits數(shù)據(jù)傳送
XBYTE[0x0500]=0xa8;//低電平中斷
XBYTE[0x0500]=0xc0;//進(jìn)入準(zhǔn)備
XBYTE[0x0100]=0x03;//設(shè)輸入輸出產(chǎn)生中斷
XBYTE[0x0400]=0x31;//設(shè)受命方式為1
XBYTE[0x0600]=0x20;//設(shè)程控地址
XBYTE[0x0600]=0xc0;//設(shè)程控地址為15
XBYTE[0x0700]=0x0a;//設(shè)結(jié)束字符為“0x0a”(回車)
XBYTE[0x0500]=0;//立即執(zhí)行,產(chǎn)生本地消息
}
3數(shù)據(jù)接收函數(shù)
void rec488()//數(shù)據(jù)接收
{
char idata tem48,tem88;
char idata i,j;
tem48=XBYTE[0x0100];
if((tem48&0x08)==0x08)//產(chǎn)生器件清除中斷
{
;//不執(zhí)行任何指令
}
else if((tem48&0x04)==0x04)//出錯(cuò)中斷
{
XBYTE[0x0100]=0x08;//器件清除
return;
}
else if((tem48&0x01)==0x01)//收到數(shù)據(jù),將數(shù)據(jù)存到pdtem[]數(shù)組
{
i=0;
for(j=0;j<18;j++)
pdtem[j]=0;
tem88=XBYTE[0x0000];
while(tem88!=0x0a)//遇到結(jié)束符0x0a則接收完畢
{
pdtem[i]=tem88;
i++;
tem48=XBYTE[0x0100];
while((tem48&0x01)!=0x01)
tem48=XBYTE[0x0100];
tem88=XBYTE[0x0000];
}
strjudge();//接收完畢進(jìn)入數(shù)據(jù)處理程序
4數(shù)據(jù)處理函數(shù)
void strjudge()//數(shù)據(jù)處理
{
if(strncmp(pdtem,"data",4)==0)//判斷接收到的指令(如果前四個(gè)字符為"data0")
{
……
……
……//執(zhí)行相應(yīng)操作
send_data(pdtem);//將要返回的字符放到pdtem[]數(shù)組,發(fā)送到計(jì)算機(jī)接收
5數(shù)據(jù)發(fā)送函數(shù)
void send_data(char temp[64])//數(shù)據(jù)發(fā)送
{
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);//遇到結(jié)束符0x0a則發(fā)送完畢
while(((tem88=XBYTE[0x0100])&0x02)==0x02); //防止輸出中斷未清除,這句可以不加}
6結(jié)論
通過編程軟件實(shí)現(xiàn)了接口的初始化,數(shù)據(jù)的接收,數(shù)據(jù)的處理和數(shù)據(jù)的發(fā)送基本功能,在軟件平臺(tái)下調(diào)用板卡廠商提供的DLL對(duì)操作系統(tǒng)API(Application Programming Interface)函數(shù)的調(diào)用。API函數(shù)包含在附加名為DLL的動(dòng)態(tài)連接庫文件中,API函數(shù)可以做到很多的功能。因此,可以通過調(diào)用DLL的方法來調(diào)用各種API函數(shù),來實(shí)現(xiàn)各種任務(wù)。
參考文獻(xiàn):
[1]李宗陽.時(shí)間頻率計(jì)量[M].北京:原子能出版社,2002:88-101.
[2]季海峰.基于虛擬儀器測(cè)試系統(tǒng)的PCI-GPIB控制器的設(shè)計(jì)和研究[M].南京:南京理工大學(xué),2007:23-30.[2] Lippman S B.C++Primer中文版[M].李師賢,譯.4版.北京:人民郵電出版社,2006.
[3]馮宏華.C++應(yīng)用程序性能優(yōu)化[M].北京:電子工業(yè)出版社,2007.
[4]錢能.C++程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,1999.