<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于USB的pH值控制器數據通訊的實(shí)現

基于USB的pH值控制器數據通訊的實(shí)現

作者: 時(shí)間:2011-06-28 來(lái)源:網(wǎng)絡(luò ) 收藏

1.引言:   

在糖提煉過(guò)程中,糖廠(chǎng)澄清工段的 PH值控制對糖的純度和生產(chǎn)成本起著(zhù)決定性的作用?;?ATMEL公司的 AT91M55800的嵌入式控制器就是自動(dòng)檢測控制澄清工段的 pH值,克服了以往手工操作 pH值波動(dòng)較大的缺點(diǎn)。

本文介紹的是 和上位機在現場(chǎng)的 pH值數據傳輸的實(shí)現,采用 通訊方式,主要因為 具有以下優(yōu)點(diǎn):   

用戶(hù)使用方便。設備自動(dòng)識別,自動(dòng)安裝驅動(dòng)程序和配置。

應用范圍廣。傳輸速率快,總線(xiàn)支持同步和異步傳輸方式。

靈活。支持不同速率的設備。

穩定。協(xié)議中包含錯誤檢測,支持熱插拔。

易于與 PC接口。支持即插即用。

成本低廉。

選用的 芯片是 PHILIPS公司成熟且價(jià)格低廉的 PDIUSBD12。整套方案要解決的工作主要有三個(gè)部分,一是 AT91M55800上 USB固件程序的設計;二是上位機 USB驅動(dòng)程序的編寫(xiě);三是上位機數據傳輸應用軟件的實(shí)現。圖 2為 PDIUSBD12的硬件連接原理圖。

2.USB固件程序編寫(xiě)固件程序的一個(gè)最主要的目的就是讓 Windows可以檢測和識別設備,此外,它還完成數據的傳輸和根據不同的需求而進(jìn)行一些控制和處理的任務(wù)。固件程序主要包括三部分:a)初始化 AT91M55800和所有的外圍電路(包括 PDIUSBD12);b)主循環(huán)部分;c)中斷服務(wù)程序。 PDIUSBD12的固件由中斷驅動(dòng),當 CPU處理前臺任務(wù)時(shí),USB的傳輸可在后臺進(jìn)行。這確保了最佳的傳輸速率和更好的軟件結構,同時(shí)簡(jiǎn)化了編程和調試。后臺 ISR(中斷服務(wù)程序)和前臺的主程序循環(huán)之間的數據交換可以通過(guò)事件標志和數據緩沖區來(lái)實(shí)現。在多路地址 /數據總線(xiàn)方式中,單片機與 PDIUSBD12的通信就像單片機外擴了一片 RAM器件一樣??梢园凑障旅娴某绦蛳?PDIUSBD12發(fā)送數據或命令:   void outportb(unsigned int Addr,unsigned char Data)   {   ((unsigned char xdata )Addr)=Data;   }   其中,Addr是 PDIUSBD12的地址,Data是輸出的數據和命令。當 Addr為奇數時(shí)表示輸出的是命令,Addr為偶數時(shí)表示輸出的是數據。中斷服務(wù)程序處理由 PDIUSBD12產(chǎn)生的中斷,將數據從 PDIUSBD12內部讀取到 CPU的存儲器,并建立正確的事件標志,以通知主循環(huán)程序進(jìn)行處理。程序首先讀取 PDIUSBD12的中斷寄存器來(lái)決定中斷源,然后轉入相應的子程序進(jìn)行處理??刂贫它c(diǎn)的輸入/輸出能夠完成設備的枚舉操作。端點(diǎn) 1和端點(diǎn) 2定義為普通端點(diǎn),可以實(shí)現中斷傳輸或批量傳輸等。

3.上位機 USB驅動(dòng)   

采用 DriverStudio來(lái)開(kāi)發(fā) USB的 WDM驅動(dòng)。WDM(Windows Driver Model)是微軟公司全新的驅動(dòng)程序模式,支持即插即用、電源管理和 WMI技術(shù)。

DriverStudio中的 DriverWorks提供了 USB驅動(dòng)程序設計向導,只要按照向導完成相應的操作和設置就可以設計出一個(gè)簡(jiǎn)單的 USB驅動(dòng)程序。

在進(jìn)行 USB數據采集系統驅動(dòng)程序開(kāi)發(fā)之前首先要明確 USB設備的配置和驅動(dòng)程序實(shí)現的功能,在我們的數據采集系統中,共用到三個(gè) USB端口,分別為:   控制端口 0   IN端口 1   OUT端口 2 設計的驅動(dòng)程序主要功能是:簡(jiǎn)單的實(shí)現對兩個(gè)端口的讀寫(xiě)操作。知道這些后就可以著(zhù)手進(jìn)行 USB驅動(dòng)程序開(kāi)發(fā)工作了。

DriverStudio是嵌入在 VC6.0中的,所以開(kāi)發(fā) WDM驅動(dòng)和用 VC開(kāi)發(fā)一個(gè)可視化工程的情況類(lèi)似。DriverWizard會(huì )一步步的根據我們的設定給出一個(gè) WDM驅動(dòng)的大體框架,我們要做的就是在其中加入我們所要實(shí)現的 USB端口 1和端口 2的讀寫(xiě)功能代碼。

在向導過(guò)程中有一步很重要,這一步提示用戶(hù)選擇總線(xiàn)類(lèi)型,該驅動(dòng)程序為 USB總線(xiàn)功能驅動(dòng)程序,所以選擇 USB總線(xiàn)。USB設備的 Vendor ID和 Product ID應該對應芯片,否則驅動(dòng)程序不會(huì )被正確識別。這里 PDIUSBD12對應的 Vendor ID為 0471,Product ID為 0888。

向導完成,添加完端口讀寫(xiě)功能代碼后,接下來(lái)的工作是編譯驅動(dòng)程序工程文件,生成需要的 USB功能驅動(dòng)程序。

4.上位機應用軟件   

要實(shí)現的是通過(guò)自己編寫(xiě)的應用程序和 進(jìn)行數據的批量傳輸。當點(diǎn)擊[數據發(fā)送]按鈕時(shí),將數據發(fā)送框中的命令數據發(fā)送到 。而點(diǎn)擊 [數據接收]按鈕,將從 pH值控制器接收到的 pH值數據在數據接收框中顯示出來(lái)。按[退出]按鈕則退出應用程序。如圖 3

USB數據采集系統的軟件設計的步驟如下:   在應用軟件設計中,多線(xiàn)程技術(shù)的應用會(huì )大大地提高應用程序的效率,輔助線(xiàn)程完成后臺數據采集的工作。應用程序的界面操作不受后臺數據處理的影響。

其中讀線(xiàn)程函數為:   

UNIT ReadTread(void pParam)   {   Cstting strTemp;   unsigned char iobuf[65];   unsigned long nBytes=0;   CUSB_softDlg pDlg=(CUSB_softDlg)pParam;   //使[接收]按鈕變灰   pDlg->GetDlgItem(IDC_RECEIVE_BUTTON)->EnableWindow(FALSE);   for(int i=0;i65;i++)   {   iobuf[i]=0;   }   //進(jìn)行讀操作,如果讀不到數據則無(wú)限期等待   if(!ReadFile(pDlg->m_hRead,iobuf,64,nBytes,NULL))   {   AfxMessageBox(“讀取數據失??!”,MB_ICONWARNING|MB_OK);   }   iobuf[nBytes]=’国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放

<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>