單片機(jī)系統(tǒng)中的率表算法:近年來,國內(nèi)許多單位用MOTOROLA 68HC05C8A,68HC05C9A,68HC05L5,68HC05L16等單片機(jī)開發(fā)復(fù)費(fèi)率表電表。電力部門也在為開發(fā)中的復(fù)費(fèi)率電表制定一些規(guī)范。復(fù)費(fèi)率電表中有一項功能要求,能給出所謂最大需置。
標(biāo)簽: 單片機(jī)系統(tǒng) 算法
上傳時間: 2013-11-06
上傳用戶:jackgao
基于ADuC812單片機(jī)的暖表計量系統(tǒng):針對傳統(tǒng)供熱系統(tǒng)對熱量的浪費(fèi)以及不能實現(xiàn)分戶控制,設(shè)計了基于單片機(jī)的能實現(xiàn)分戶計量、分室控溫,按戶收費(fèi)的暖表計量系統(tǒng). 介紹了系統(tǒng)功能、結(jié)構(gòu)組成、工作原理,設(shè)計了控制電路以及控制程序,并將該系統(tǒng)應(yīng)用在實際中,其供熱及計量方式比傳統(tǒng)的能節(jié)能約10%.關(guān)鍵詞: 暖表計量系統(tǒng);節(jié)能;單片機(jī)
上傳時間: 2014-01-06
上傳用戶:smallfish
MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用TI公司的MSP430系列微控制器是一個近期推出的單片機(jī)品種。它在超低功耗和功能集成上都有一定的特色,尤其適合應(yīng)用在自動信號采集系統(tǒng)、液晶顯示智能化儀器、電池供電便攜式裝置、超長時間連續(xù)工作設(shè)備等領(lǐng)域。《MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用》對這一系列產(chǎn)品的原理、結(jié)構(gòu)及內(nèi)部各功能模塊作了詳細(xì)的說明,并以方便工程師及程序員使用的方式提供軟件和硬件資料。由于MSP430系列的各個不同型號基本上是這些功能模塊的不同組合,因此,掌握《MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用》的內(nèi)容對于MSP430系列的原理理解和應(yīng)用開發(fā)都有較大的幫助。《MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用》的內(nèi)容主要根據(jù)TI公司的《MSP430 Family Architecture Guide and Module Library》一書及其他相關(guān)技術(shù)資料編寫。 《MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用》供高等院校自動化、計算機(jī)、電子等專業(yè)的教學(xué)參考及工程技術(shù)人員的實用參考,亦可做為應(yīng)用技術(shù)的培訓(xùn)教材。MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用 目錄 第1章 MSP430系列1.1 特性與功能1.2 系統(tǒng)關(guān)鍵特性1.3 MSP430系列的各種型號??第2章 結(jié)構(gòu)概述2.1 CPU2.2 代碼存儲器?2.3 數(shù)據(jù)存儲器2.4 運(yùn)行控制?2.5 外圍模塊2.6 振蕩器、倍頻器和時鐘發(fā)生器??第3章 系統(tǒng)復(fù)位、中斷和工作模式?3.1 系統(tǒng)復(fù)位和初始化3.2 中斷系統(tǒng)結(jié)構(gòu)3.3 中斷處理3.3.1 SFR中的中斷控制位3.3.2 外部中斷3.4 工作模式3.5 低功耗模式3.5.1 低功耗模式0和模式13.5.2 低功耗模式2和模式33.5.3 低功耗模式43.6 低功耗應(yīng)用要點(diǎn)??第4章 存儲器組織4.1 存儲器中的數(shù)據(jù)4.2 片內(nèi)ROM組織4.2.1 ROM表的處理4.2.2 計算分支跳轉(zhuǎn)和子程序調(diào)用4.3 RAM與外圍模塊組織4.3.1 RAM4.3.2 外圍模塊--地址定位4.3.3 外圍模塊--SFR??第5章 16位CPU?5.1 CPU寄存器5.1.1 程序計數(shù)器PC5.1.2 系統(tǒng)堆棧指針SP5.1.3 狀態(tài)寄存器SR5.1.4 常數(shù)發(fā)生寄存器CG1和CG2?5.2 尋址模式5.2.1 寄存器模式5.2.2 變址模式5.2.3 符號模式5.2.4 絕對模式5.2.5 間接模式5.2.6 間接增量模式5.2.7 立即模式5.2.8 指令的時鐘周期與長度5.3 指令集概述5.3.1 雙操作數(shù)指令5.3.2 單操作數(shù)指令5.3.3 條件跳轉(zhuǎn)5.3.4 模擬指令的簡短格式5.3.5 其他指令5.4 指令分布??第6章 硬件乘法器?6.1 硬件乘法器的操作6.2 硬件乘法器的寄存器6.3 硬件乘法器的SFR位6.4 硬件乘法器的軟件限制6.4.1 硬件乘法器的軟件限制--尋址模式6.4.2 硬件乘法器的軟件限制--中斷程序??第7章 振蕩器與系統(tǒng)時鐘發(fā)生器?7.1 晶體振蕩器7.2 處理機(jī)時鐘發(fā)生器7.3 系統(tǒng)時鐘工作模式7.4 系統(tǒng)時鐘控制寄存器7.4.1 模塊寄存器7.4.2 與系統(tǒng)時鐘發(fā)生器相關(guān)的SFR位7.5 DCO典型特性??第8章 數(shù)字I/O配置?8.1 通用端口P08.1.1 P0的控制寄存器8.1.2 P0的原理圖8.1.3 P0的中斷控制功能8.2 通用端口P1、P28.2.1 P1、P2的控制寄存器8.2.2 P1、P2的原理圖8.2.3 P1、P2的中斷控制功能8.3 通用端口P3、P48.3.1 P3、P4的控制寄存器8.3.2 P3、P4的原理圖8.4 LCD端口8.5 LCD端口--定時器/端口比較器??第9章 通用定時器/端口模塊?9.1 定時器/端口模塊操作9.1.1 定時器/端口計數(shù)器TPCNT1--8位操作9.1.2 定時器/端口計數(shù)器TPCNT2--8位操作9.1.3 定時器/端口計數(shù)器--16位操作9.2 定時器/端口寄存器9.3 定時器/端口SFR位9.4 定時器/端口在A/D中的應(yīng)用9.4.1 R/D轉(zhuǎn)換原理9.4.2 分辨率高于8位的轉(zhuǎn)換??第10章 定時器?10.1 Basic Timer110.1.1 Basic Timer1寄存器10.1.2 SFR位10.1.3 Basic Timer1的操作10.1.4 Basic Timer1的操作--LCD時鐘信號fLCD?10.2 8位間隔定時器/計數(shù)器10.2.1 8位定時器/計數(shù)器的操作10.2.2 8位定時器/計數(shù)器的寄存器10.2.3 與8位定時器/計數(shù)器有關(guān)的SFR位10.2.4 8位定時器/計數(shù)器在UART中的應(yīng)用10.3 看門狗定時器11.1.3 比較模式11.1.4 輸出單元11.2 TimerA的寄存器11.2.1 TimerA控制寄存器TACTL11.2.2 捕獲/比較控制寄存器CCTL11.2.3 TimerA中斷向量寄存器11.3 TimerA的應(yīng)用11.3.1 TimerA增計數(shù)模式應(yīng)用11.3.2 TimerA連續(xù)模式應(yīng)用11.3.3 TimerA增/減計數(shù)模式應(yīng)用11.3.4 TimerA軟件捕獲應(yīng)用11.3.5 TimerA處理異步串行通信協(xié)議11.4 TimerA的特殊情況11.4.1 CCR0用做周期寄存器11.4.2 定時器寄存器的啟/停11.4.3 輸出單元Unit0??第12章 USART外圍接口--UART模式?12.1 異步操作12.1.1 異步幀格式12.1.2 異步通信的波特率發(fā)生器12.1.3 異步通信格式12.1.4 線路空閑多處理機(jī)模式12.1.5 地址位格式12.2 中斷與控制功能12.2.1 USART接收允許12.2.2 USART發(fā)送允許12.2.3 USART接收中斷操作12.2.4 USART發(fā)送中斷操作12.3 控制與狀態(tài)寄存器12.3.1 USART控制寄存器UCTL12.3.2 發(fā)送控制寄存器UTCTL12.3.3 接收控制寄存器URCTL12.3.4 波特率選擇和調(diào)制控制寄存器12.3.5 USART接收數(shù)據(jù)緩存URXBUF12.3.6 USART發(fā)送數(shù)據(jù)緩存UTXBUF12.4 UART模式--低功耗模式應(yīng)用特性12.4.1 由UART幀啟動接收操作12.4.2 時鐘頻率的充分利用與UART模式的波特率12.4.3 節(jié)約MSP430資源的多處理機(jī)模式12.5 波特率的計算??第13章 USART外圍接口--SPI模式?13.1 USART的同步操作13.1.1 SPI模式中的主模式--MM=1、SYNC=113.1.2 SPI模式中的從模式--MM=0、SYNC=113.2 中斷與控制功能13.2.1 USART接收允許13.2.2 USART發(fā)送允許13.2.3 USART接收中斷操作13.2.4 USART發(fā)送中斷操作13.3 控制與狀態(tài)寄存器13.3.1 USART控制寄存器13.3.2 發(fā)送控制寄存器UTCTL13.3.3 接收控制寄存器URCTL13.3.4 波特率選擇和調(diào)制控制寄存器13.3.5 USART接收數(shù)據(jù)緩存URXBUF13.3.6 USART發(fā)送數(shù)據(jù)緩存UTXBUF??第14章 液晶顯示驅(qū)動?14.1 LCD驅(qū)動基本原理14.2 LCD控制器/驅(qū)動器14.2.1 LCD控制器/驅(qū)動器功能14.2.2 LCD控制與模式寄存器14.2.3 LCD顯示內(nèi)存14.2.4 LCD操作軟件例程14.3 LCD端口功能14.4 LCD與端口模式混合應(yīng)用實例??第15章 A/D轉(zhuǎn)換器?15.1 概述15.2 A/D轉(zhuǎn)換操作15.2.1 A/D轉(zhuǎn)換15.2.2 A/D中斷15.2.3 A/D量程15.2.4 A/D電流源15.2.5 A/D輸入端與多路切換15.2.6 A/D接地與降噪15.2.7 A/D輸入與輸出引腳15.3 A/D控制寄存器??第16章 其他模塊16.1 晶體振蕩器16.2 上電電路16.3 晶振緩沖輸出??附錄A 外圍模塊地址分配?附錄B 指令集描述?B1 指令匯總B2 指令格式B3 不增加ROM開銷的指令模擬B4 指令說明B5 用幾條指令模擬的宏指令??附錄C EPROM編程?C1 EPROM操作C2 快速編程算法C3 通過串行數(shù)據(jù)鏈路應(yīng)用\"JTAG\"特性的EPROM模塊編程C4 通過微控制器軟件實現(xiàn)對EPROM模塊編程??附錄D MSP430系列單片機(jī)參數(shù)表?附錄E MSP430系列單片機(jī)產(chǎn)品編碼?附錄F MSP430系列單片機(jī)封裝形式?
標(biāo)簽: MSP 430 超低功耗 位單片機(jī)
上傳時間: 2014-05-07
上傳用戶:lwq11
Microchip ZigBee協(xié)議棧:ZigBee™ 是專為低速率傳感器和控制網(wǎng)絡(luò)設(shè)計的無線網(wǎng)絡(luò)協(xié)議。有許多應(yīng)用可從ZigBee 協(xié)議受益,其中可能的一些應(yīng)用有:建筑自動化網(wǎng)絡(luò)、住宅安防系統(tǒng)、工業(yè)控制網(wǎng)絡(luò)、遠(yuǎn)程抄表以及PC 外設(shè)。與其他無線協(xié)議相比, ZigBee 無線協(xié)議提供了低復(fù)雜性、縮減的資源要求,最重要的是它提供了一組標(biāo)準(zhǔn)的規(guī)范。它還提供了三個工作頻帶,以及一些網(wǎng)絡(luò)配置和可選的安全功能。如果您正在尋求現(xiàn)有的控制網(wǎng)絡(luò)技術(shù)(例如RS-422、RS-485)或?qū)S袩o線協(xié)議的替代方案, ZigBee 協(xié)議可能是您所需的解決方案。此應(yīng)用筆記旨在幫助您在應(yīng)用中采用ZigBee 協(xié)議。 可以使用在應(yīng)用筆記中提供的Microchip ZigBee 協(xié)議棧快速地構(gòu)建應(yīng)用。為了說明該協(xié)議棧的用法,本文包含了兩個有效的演示應(yīng)用程序。可將這兩個演示程序作為參考或者根據(jù)您的需求經(jīng)過簡單修改來采用它們。此應(yīng)用筆記中提供的協(xié)議棧函數(shù)庫實現(xiàn)了一個與物理層無關(guān)的應(yīng)用程序接口。 因此,無需做重大修改就可以輕松地在射頻(Radio Frequency,RF)收發(fā)器之間移植應(yīng)用程序。在此文檔末尾的“常見問題解答”中提供了有關(guān)Microchip 協(xié)議棧和用法的一些常見問題及其答案。
標(biāo)簽: Microchip ZigBee 協(xié)議棧
上傳時間: 2013-10-08
上傳用戶:u789u789u789
基于AT89C2051單片機(jī)的數(shù)字電容表設(shè)計:AT89C2051單片機(jī)的P1.0、P1.1的模擬輸入阻抗很低,被測信號進(jìn)行阻抗變換后,才能送入P1.0(電容積分信號)、P1.1(參考電壓)。通過測量電容的積分信號達(dá)到參考電壓的時間,來測量電容的容量大小。
上傳時間: 2013-11-14
上傳用戶:2404
基于89C2051單片機(jī)的熱表通訊模塊的開發(fā):介紹了利用89C2051 單片機(jī)開發(fā)某熱表的通訊模塊,并將其應(yīng)用于實驗用主從分布式控制系統(tǒng)中,實現(xiàn)了工控機(jī)同多個熱表的串行通訊。闡述了串行通訊規(guī)程,利用單片機(jī)的普通I/ O 端口實現(xiàn)串行口功能的方法,從而解決了該單片機(jī)在實際的串行通訊應(yīng)用中串口資源少的問題。通訊模塊通過RS - 485 通訊方式實現(xiàn)了熱表與工控機(jī)的遠(yuǎn)距離通訊。在充分利用單片機(jī)端口資源的基礎(chǔ)上完成了工控機(jī)與多臺單片機(jī)通訊。關(guān)鍵詞:單片機(jī);串行通訊;普通I/ O 端口;RS - 485 ;多機(jī)通訊
標(biāo)簽: 89C2051 單片機(jī) 通訊模塊
上傳時間: 2014-04-16
上傳用戶:tb_6877751
信息技術(shù)的日新月異要求發(fā)展新的技術(shù)來提高熱量計量收費(fèi)的可靠性,改變過去熱力站數(shù)據(jù)采集靠人工抄表的落后方法,以實現(xiàn)集中供熱系統(tǒng)管理的全面自動化。便攜式查表器是一種新興的現(xiàn)場數(shù)據(jù)采集技術(shù)。本文所設(shè)計的查表器通過RS485 接口從現(xiàn)場使用的熱量計中遠(yuǎn)距離采集數(shù)據(jù),它采用Intel 80C196 作為CPU, 240×128 點(diǎn)陣的液晶作為顯示器,并擴(kuò)展了256K 的非易失性RAM 來保存30 個熱力站的所有運(yùn)行數(shù)據(jù)。信息革命沖擊著各行各業(yè),傳統(tǒng)的數(shù)據(jù)采集方式已不適應(yīng)信息時代的需要。常規(guī)的現(xiàn)場儀表數(shù)據(jù)采集方法要靠查表員手工來完成。有些儀表安裝在危險場所,如在地下的熱水管道系統(tǒng),查表員有時會冒生命危險。目前公用事業(yè)的發(fā)展,迫切要求改變傳統(tǒng)的數(shù)據(jù)采集方式,以更方便、更快捷的服務(wù)來適應(yīng)信息時代的到來。微處理器、存儲器、VLSI, A/D 轉(zhuǎn)換等技術(shù)的迅速發(fā)展,使得現(xiàn)場儀表與控制中心之間傳遞的不再是傳統(tǒng)的模擬信號,而是數(shù)字信號。數(shù)字信號不但避免了模擬信號傳輸過程中存在的精度降低、信號衰減、易引入干擾信號等的不足,而且顯著提高了信號的可靠性,它為采用新的數(shù)據(jù)采集技術(shù)提供了可能。
標(biāo)簽: 便攜式 熱量計 查表器 系統(tǒng)設(shè)計
上傳時間: 2013-11-17
上傳用戶:tzl1975
用AT89C2051單片機(jī)制作的數(shù)字電容表:AT89C2051作為AT89C51的簡化版雖然去掉了P0、P2等端口,使I/O口減少了,但是卻增加了一個電壓比較器,因此其功能在某些方面反而有所增強(qiáng),如能用來處理模擬量、進(jìn)行簡單的模數(shù)轉(zhuǎn)換等。本文利用這一功能設(shè)計了一個數(shù)字電容表,可測量容量小于2微法的電容器的容量,采用3位半數(shù)字顯示,最大顯示值為1999,讀數(shù)單位統(tǒng)一采用毫微法(nf),量程分四檔,讀數(shù)分別乘以相應(yīng)的倍率。
上傳時間: 2013-11-19
上傳用戶:wuyuying
有兩種方式可以讓設(shè)備和應(yīng)用程序之間聯(lián)系:1. 通過為設(shè)備創(chuàng)建的一個符號鏈;2. 通過輸出到一個接口WDM驅(qū)動程序建議使用輸出到一個接口而不推薦使用創(chuàng)建符號鏈的方法。這個接口保證PDO的安全,也保證安全地創(chuàng)建一個惟一的、獨(dú)立于語言的訪問設(shè)備的方法。一個應(yīng)用程序使用Win32APIs來調(diào)用設(shè)備。在某個Win32 APIs和設(shè)備對象的分發(fā)函數(shù)之間存在一個映射關(guān)系。獲得對設(shè)備對象訪問的第一步就是打開一個設(shè)備對象的句柄。 用符號鏈打開一個設(shè)備的句柄為了打開一個設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個符號鏈出口,應(yīng)用程序可以用下面這個例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開一個設(shè)備。這個設(shè)備必須有一個符號鏈,以便應(yīng)用程序能夠打開它。有關(guān)細(xì)節(jié)查看有關(guān)Kdevice和CreateLink的內(nèi)容。在上述調(diào)用中第一個參數(shù)中前綴后的部分就是這個符號鏈的名字。注意:CreatFile中的第一個參數(shù)不是Windows 98/2000中驅(qū)動程序(.sys文件)的路徑。是到設(shè)備對象的符號鏈。如果使用DriverWizard產(chǎn)生驅(qū)動程序,它通常使用類KunitizedName來構(gòu)成設(shè)備的符號鏈。這意味著符號鏈名有一個附加的數(shù)字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應(yīng)用程序需要被覆蓋的I/O,第六個參數(shù)(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個輸出接口打開句柄用這種方式打開一個句柄會稍微麻煩一些。DriverWorks庫提供兩個助手類來使獲得對該接口的訪問容易一些,這兩個類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個設(shè)備信息集,該信息集包含了特殊類中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類的一個實例來獲得一個或更多的CdeviceInterface類的實例。CdeviceInterface類是一個單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個路徑名的指針,該指針可以在CreateFile中使用來打開設(shè)備。下面用一個小例子來顯示這些類最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在設(shè)備中執(zhí)行I/O操作一旦應(yīng)用程序獲得一個有效的設(shè)備句柄,它就能使用Win32 APIs來產(chǎn)生到設(shè)備對象的IRPs。下面的表顯示了這種對應(yīng)關(guān)系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解釋一下設(shè)備類成員的Close和CleanUp:CreateFile使內(nèi)核為設(shè)備創(chuàng)建一個新的文件對象。這使得多個句柄可以映射同一個文件對象。當(dāng)這個文件對象的最后一個用戶級句柄被撤銷后,I/O管理器調(diào)用CleanUp。當(dāng)沒有任何用戶級和核心級的對文件對象的訪問的時候,I/O管理器調(diào)用Close。如果被打開的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯誤(無效功能)。以前為Windows95編寫的VxD的應(yīng)用程序代碼中可能會在打開設(shè)備的時候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個屬性,因為它將導(dǎo)致沒有特權(quán)的用戶企圖打開這個設(shè)備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數(shù)轉(zhuǎn)換成IRP域的方法依賴于設(shè)備對象的屬性。當(dāng)設(shè)備設(shè)置DO_DIRECT_IO標(biāo)志,I/O管理器將buff鎖住在存儲器中,并且創(chuàng)建了一個存儲在IRP中的MDL域。一個設(shè)備可以通過調(diào)用Kirp::Mdl來存取MDL。當(dāng)設(shè)備設(shè)置DO_BUFFERED_IO標(biāo)志,設(shè)備對象分別通過KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或?qū)懖僮鳙@得buff地址。當(dāng)設(shè)備不設(shè)置DO_BUFFERED_IO標(biāo)志也不設(shè)置DO_DIRECT_IO,內(nèi)核設(shè)置IRP 的UserBuffer域來對應(yīng)ReadFile或WriteFile中的buff參數(shù)。然而,存儲區(qū)并沒有被鎖住而且地址只對調(diào)用進(jìn)程有效。驅(qū)動程序可以使用KIrp::UserBuffer來存取IRP域。對于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴于特殊的I/O控制代碼,它不在設(shè)備對象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構(gòu)造控制代碼。這個宏的其中一個參數(shù)指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對應(yīng)的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數(shù):Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代碼指明METHOD_BUFFERED,系統(tǒng)分配一個單一的緩沖來作為輸入與輸出。驅(qū)動程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動程序通過調(diào)用KIrp::IoctlBuffer獲得緩沖地址。在完成時,I/O管理器從系統(tǒng)緩沖拷貝數(shù)據(jù)到提供給Ring 3級調(diào)用者使用的緩沖中。驅(qū)動程序必須在結(jié)束前存儲拷貝到IRP的Information成員中的數(shù)據(jù)個數(shù)。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數(shù)呈現(xiàn)不同的含義。參數(shù)InputBuffer被拷貝到一個系統(tǒng)緩沖,這個緩沖驅(qū)動程序可以通過調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對象,驅(qū)動程序?qū)@個對象的訪問通過調(diào)用KIrp::Mdl來實現(xiàn)。對于METHOD_OUT_DIRECT,調(diào)用者必須有對緩沖的寫訪問權(quán)限。注意,對METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會做映射來配置緩沖。虛擬地址只對調(diào)用進(jìn)程有效。這里是一個用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現(xiàn)在使用一個DeviceIoControl調(diào)用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,這里放的是包含有執(zhí)行操作命令的字符串指針 0, FirmwareRev, //這里是output串指針,存放從驅(qū)動程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設(shè)備拷貝串到里面并將拷貝的資結(jié)束設(shè)置到FirmwareRevSize中。在驅(qū)動程序中,代碼看起來如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
標(biāo)簽: 驅(qū)動程序 應(yīng)用程序 接口
上傳時間: 2013-10-17
上傳用戶:gai928943
單片機(jī)實用接口技術(shù)介紹了MCS-51系列單片機(jī)應(yīng)用系統(tǒng)的各種實用接口技術(shù)及其配置。內(nèi)容包括:MCS-51系列單片機(jī)組成原理:應(yīng)用系統(tǒng)擴(kuò)展、開發(fā)與調(diào)試;鍵盤輸入接口的設(shè)計及調(diào)試;打印機(jī)和顯示器接口及設(shè)計實例;模擬輸入通道接口技術(shù);A/D、D/A、接口技術(shù)及在控制系統(tǒng)中的應(yīng)用設(shè)計;V/F轉(zhuǎn)換器接口技術(shù)、串行通訊接口技術(shù)以及其它與應(yīng)用系統(tǒng)設(shè)計有關(guān)的實用技術(shù)等。本書是為滿足廣大科技工作者從事單片機(jī)應(yīng)用系統(tǒng)軟件、硬件設(shè)計的需要而編寫的,具有內(nèi)容新穎、實用、全面的特色。所有的接口設(shè)計都包括詳細(xì)的設(shè)計步驟、硬件線路圖及故障分析,并附有測試程序清單。書中大部分接口軟、硬件設(shè)計實例都是作者多年來從事單片機(jī)應(yīng)用和開發(fā)工作的經(jīng)驗總結(jié),實用性和工程性較強(qiáng),尤其是對應(yīng)用系統(tǒng)中必備的鍵盤、顯示器、打印機(jī)、A/D、D/A通訊接口設(shè)計、模擬信號處理及開發(fā)系統(tǒng)應(yīng)用舉例甚多,目的是讓將要開始和正在從事單片機(jī)應(yīng)用開發(fā)的科研人員根據(jù)自己的實際需要來選擇應(yīng)用,一書在手即可基本完成單片機(jī)應(yīng)用系統(tǒng)的開發(fā)工作。 MCS-51系列單片機(jī)實用接口技術(shù)目錄 第一章 MCS51系列單片機(jī)組成原理第二章 MCS-51單片機(jī)系統(tǒng)擴(kuò)展第三章 MCS-51單片機(jī)應(yīng)用系統(tǒng)的開發(fā)第四章 鍵盤及其按口技術(shù)第五章 顯示器接口設(shè)計第六章 打印機(jī)接口設(shè)計第七章 模擬輸入通道接口技術(shù)第八章 D/A轉(zhuǎn)換器與MSC-51單片機(jī)的接口設(shè)計與實踐第九章 A/D轉(zhuǎn)換器與MCS-51單片機(jī)的接口設(shè)計與實踐 第十章 V/F轉(zhuǎn)換器接口技術(shù) 第十一章 串行通訊按日技術(shù)第十二章應(yīng)用系統(tǒng)設(shè)計中的實用技術(shù)附錄AMCS51單片機(jī)指令速查表附錄一常用EPROM固化電壓參考表
上傳時間: 2013-11-24
上傳用戶:hfnishi
蟲蟲下載站版權(quán)所有 京ICP備2021023401號-1