基于NI-VISA與LabVIEW的 USB接口應用設計
3.1 系統的工作原理
根據USB協(xié)議,任何傳輸都是由主機(host)開(kāi)始的,單片機的前臺工作就是等待。主機Pc首先要發(fā)送令牌包給USB,D12接收到令牌包就給單片機發(fā)中斷,單片機進(jìn)入中斷服務(wù)程序。首先讀D12的中斷寄存器,判斷LJSB令牌包的類(lèi)型,然后執行相應的操作,因此,USB單片機程序主要就是中斷服務(wù)程序的編寫(xiě)。在USB單片機程序中要完成對各種令牌包的響應,主要是對端口的編程。
3.2軟件部分的設計
系統的固件程序從功能上分為兩部分,整個(gè)編程在Keil C環(huán)境下完成。
(1)溫度傳感器DSl8B20的讀取程序時(shí)
Dsl8B20單線(xiàn)通信功能是分時(shí)實(shí)現的。它有很?chē)栏竦臅r(shí)序要求,對它的操作必須按協(xié)議進(jìn)行,即初始化→發(fā)ROM操作命令→發(fā)存儲器操作命令→數據處理。
(2)MCU和USB接口的通信程序
本程序使用D12的端點(diǎn)1和端點(diǎn)2進(jìn)行上位計算機與MCU P89C52之間的命令和數據的傳輸。端點(diǎn)1和端點(diǎn)2設置成模式0(非同步方式)。其中端點(diǎn)1以中斷傳輸和應答端點(diǎn)2以批量方式進(jìn)行數據的傳輸。端點(diǎn)1接收上位機發(fā)送過(guò)來(lái)的讀指令,端點(diǎn)2返回讀成功數據。
系統的固件程序編寫(xiě)以分層結構展開(kāi)。它足一種積木式結構,如圖3所示。
![]() |
①硬件提取層:單片機的I/O口、數據總線(xiàn)等硬件接口進(jìn)行操作。
②PDIUSBDl2命令接口:對D12器件進(jìn)行操作的模塊子程序集
③中斷服務(wù)程序:當D12向單片機發(fā)出中斷請求時(shí),讀取D12中斷傳輸來(lái)的數據,并設定事件標志"EPPFIAGS"和Setup包數據緩沖區"CONROL_XFER"傳輸給主循環(huán)程序。
④標準設備請求處理程序:對USB的標準設備請求進(jìn)行處理。
⑤廠(chǎng)商請求處理程序:對用戶(hù)添加的廠(chǎng)商請求進(jìn)行處理。
⑥主程序:出USB數據傳輸請求,處理總線(xiàn)事件和調用用戶(hù)自定義功能子程序
以NI-VISA為驅動(dòng)的主機LabVIEW應用程序的設計,NI-VISA采用3.2版本,LabVIEW采用7.1版本。
整個(gè)應用程序的主要框架使用了WHILE循環(huán)來(lái)進(jìn)行不斷的查詢(xún)。在程序的編寫(xiě)過(guò)程中,采用了類(lèi)似Windows程序中的事件驅動(dòng)機制,LabVIEW提供了這樣的結構--事件結構。各個(gè)消息的產(chǎn)生利用了各種界面控件并由Case選擇結構給出,程序結構圖如圖4所示。
![]() |
為了便于說(shuō)明USB操作次序,把圖4中事件結構展發(fā)USB驅動(dòng)應用程序的捷徑。
在圖5中,USB RAW設備通信采用端點(diǎn)l以中斷傳輸方式接收上位機操作命令,協(xié)議可以自己約定。端點(diǎn)2以批量傳輸方式給上位機發(fā)回溫度數據。其中端點(diǎn)數"130"是對應十六進(jìn)制數"0082"的十進(jìn)制數,此數表示端點(diǎn)2批量輸入;而端點(diǎn)數"1"則是對應十六進(jìn)制數"0001"的十進(jìn)制數,此數表示端點(diǎn)1中斷輸出。
![]() |
因為NI-VISA3.2版本不支持USB屬性"中斷輸出"(interrupt out),因此為了實(shí)現USB端點(diǎn)1的中斷輸出問(wèn)題,這里把USB屬性"批量輸出"(bulk out pipe)和"VI Write"節點(diǎn)組合在一起,來(lái)實(shí)現端點(diǎn)1中斷輸出。從NI-VISA3.3起,可以直接利用"中斷輸出"(interrupt out)屬性來(lái)實(shí)現。
結 語(yǔ)
經(jīng)實(shí)踐證明,采用基于NI-VISA驅動(dòng)的USB接口應用系統的設計非常容易,開(kāi)發(fā)難度低,對開(kāi)發(fā)者的要求不高;開(kāi)發(fā)出的系統穩定可靠,即使對Windows編程不熟悉的人也可以開(kāi)發(fā)USB出應用系統。它提供了另一種開(kāi)發(fā)USB驅動(dòng)應用程序的捷徑。
參考文獻:
[1].80C51datasheethttp://www.dzsc.com/datasheet/80C51_103447.html.
[2].ROMdatasheethttp://www.dzsc.com/datasheet/ROM_1188413.html.
[3].DS18B20datasheethttp://www.dzsc.com/datasheet/DS18B20_819975.html.
[4].P89C52X2datasheethttp://www.dzsc.com/datasheet/P89C52X2_538908.html.
評論