新聞中心

EEPW首頁 > 醫(yī)療電子 > 設(shè)計應(yīng)用 > 基于USB的便攜式醫(yī)療設(shè)備數(shù)據(jù)采集和傳輸系統(tǒng)設(shè)計

基于USB的便攜式醫(yī)療設(shè)備數(shù)據(jù)采集和傳輸系統(tǒng)設(shè)計

作者: 時間:2010-04-08 來源:網(wǎng)絡(luò) 收藏

  下位機工作在DOS狀態(tài),軟件程序采用BORLANDC語言。主要工作是初始化CH375、查詢中斷及中斷處理。相關(guān)程序代碼如下:

  (1)處理接收數(shù)據(jù)的中斷服務(wù)程序

  void interrupt (__CPPARGS)

  {

   unsigned char len,i;

   //獲取中斷狀態(tài)并取消中斷請求

  CH375WriteCmd(0x22);

   d0=CH375ReadData(); //讀回狀態(tài)

  if((d0==0x02)||(d0==0x01)) //批量端點2接收到PC機發(fā)送的數(shù)據(jù)

  {//讀取數(shù)據(jù)}

   inportb(0x21);

   outportb(0x20,0x20); //發(fā)EOI命令,

   清除中斷

}

(2)寫數(shù)據(jù)子程序

void CH375WriteData( unsigned char dat )

{

/* 寫數(shù)據(jù)口 */

outportb( PortBaseAddr + 0, dat );

DelayuS( 1 );

}

(3)讀數(shù)據(jù)子程序

unsigned char CH375ReadData( void )

{

unsigned char d;

DelayuS( 1 );

/* 讀數(shù)據(jù)口 */

d = inportb( PortBaseAddr + 0 );

return( d );

}

(4)主程序

int main(int argc,char *argv[])

{

..................

for(;;) //等待

{//軟件進入主循環(huán),處理突發(fā)事件

while(kbhit()) ch=getch();

if(ch==27) break;

if(ch==59){.//向PC機發(fā)送數(shù)據(jù)}

if(ch==60){//寫中斷特征數(shù)據(jù)}

readbuf(); //讀接口緩沖區(qū)數(shù)據(jù)

}

..................

}

4上位機中的程序設(shè)計

因為CH375的動態(tài)鏈接庫DLL提供了許多API接口函數(shù),所以應(yīng)用程序只需通過幾條簡單的文件操作API函數(shù),就可以實現(xiàn)與下位機的通信。

又因CH375的動態(tài)鏈接庫DLL提供了偽中斷服務(wù)(實際的中斷服務(wù)仍然是在驅(qū)動程序庫完成的,只是在完成后向DLL發(fā)個通知,再由DLL再調(diào)用偽中斷服務(wù)子程序),基于此,系統(tǒng)采用了偽中斷服務(wù)來實現(xiàn)數(shù)據(jù)的上傳,這不僅縮短了系統(tǒng)的開發(fā)周期,而且很好地滿足了下位機的實時性要求。上傳數(shù)據(jù)的程序流程圖如圖2所示。

數(shù)據(jù)的下傳只需用簡單的下傳API發(fā)送數(shù)據(jù)。由CH375中斷接收即可。

上位PC機工作在Windows環(huán)境下,我們采用Visual C++6.0語言編程。具體程序?qū)崿F(xiàn)如下:

(1)初始化PC104-USB卡

在這里完成對設(shè)備的初始化,如CH375DLL.DLL文件的加載、設(shè)備的成功打開、緩沖區(qū)的清理、數(shù)據(jù)的上傳模式、設(shè)置偽中斷服務(wù)程序等。

助聽器原理相關(guān)文章:助聽器原理




評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉