多路電壓采集系統(tǒng)一、實(shí)驗(yàn)?zāi)康模保煜た删幊绦酒珹DC0809,8253的工作過(guò)程,掌握它們的編程方法。2.加深對(duì)所學(xué)知識(shí)的理解并學(xué)會(huì)應(yīng)用所學(xué)的知識(shí),達(dá)到在應(yīng)用中掌握知識(shí)的目的。 二、實(shí)驗(yàn)內(nèi)容與要求1.基本要求通過(guò)一個(gè)A/D轉(zhuǎn)換器循環(huán)采樣4路模擬電壓,每隔一定時(shí)間去采樣一次,一次按順序采樣4路信號(hào)。A/D轉(zhuǎn)換器芯片AD0809將采樣到的模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),轉(zhuǎn)換完成后,CPU讀取數(shù)據(jù)轉(zhuǎn)換結(jié)果,并將結(jié)果送入外設(shè)即CRT/LED顯示,顯示包括電壓路數(shù)和數(shù)據(jù)值。2. 提高要求 (1) 可以實(shí)現(xiàn)循環(huán)采集和選擇采集2種方式。(2)在CRT上繪制電壓變化曲線。 三、實(shí)驗(yàn)報(bào)告要求 1.設(shè)計(jì)目的和內(nèi)容 2.總體設(shè)計(jì) 3.硬件設(shè)計(jì):原理圖(接線圖)及簡(jiǎn)要說(shuō)明 4.軟件設(shè)計(jì)框圖及程序清單5.設(shè)計(jì)結(jié)果和體會(huì)(包括遇到的問(wèn)題及解決的方法) 四、總體設(shè)計(jì)設(shè)計(jì)思路如下:1) 4路模擬電壓信號(hào)通過(guò)4個(gè)電位器提供0-5V的電壓信號(hào)。2) 選擇ADC0809芯片作為A/D轉(zhuǎn)換器,4路輸入信號(hào)分別接到ADC0809的IN0—IN4通道,每隔一定的時(shí)間采樣一次,采完一路采集下一路,4路電壓循環(huán)采集。3) 利用3個(gè)LED數(shù)碼管顯示數(shù)據(jù),1個(gè)數(shù)碼管用來(lái)顯示輸入電壓路數(shù),3個(gè)數(shù)碼管用來(lái)顯示電壓采樣值。4) 延時(shí)由8253定時(shí)/計(jì)數(shù)器來(lái)實(shí)現(xiàn)。 五、硬件電路設(shè)計(jì)根據(jù)設(shè)計(jì)思路,硬件主要利用了微機(jī)實(shí)驗(yàn)平臺(tái)上的ADC0809模數(shù)轉(zhuǎn)換器、8253定時(shí)/計(jì)數(shù)器以及LED顯示輸出等模塊。電路原理圖如下:1.基本接口實(shí)驗(yàn)板部分1) 電位計(jì)模塊,4個(gè)電位計(jì)輸出4路1-5V的電壓信號(hào)。2) ADC0809模數(shù)轉(zhuǎn)換器,將4路電壓信號(hào)接到IN0-IN3,ADD_A、ADD_B、ADD_C分別接A0、A1、A2,CS_AD接CS0時(shí),4個(gè)采樣通道對(duì)應(yīng)的地址分別為280H—283H。3) 延時(shí)模塊,8253和8255組成延時(shí)電路。8255的PA0接到8253的OUT0,程序中查詢計(jì)數(shù)是否結(jié)束。硬件電路圖如圖1所示。 圖1 基本實(shí)驗(yàn)板上的電路圖實(shí)驗(yàn)板上的LED顯示部分實(shí)驗(yàn)板上主要用到了LED數(shù)碼管顯示電路,插孔CS1用于數(shù)碼管段碼的輸出選通,插孔CS2用于數(shù)碼管位選信號(hào)的輸出選通。電路圖如圖2所示。
上傳時(shí)間: 2013-11-06
上傳用戶:sunchao524
交通燈控制器的設(shè)計(jì)與實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康?. 了解交通燈管理的基本工作原理。2. 熟悉8253計(jì)數(shù)器/定時(shí)器、8259A中斷控制器和8255A并行接口的工作方式及應(yīng)用編程。3. 掌握多位LED顯示的方法。 二、 實(shí)驗(yàn)內(nèi)容與要求設(shè)計(jì)一個(gè)用于十字路口的交通燈控制器。1.基本要求: 1) 東西和南北方向各有一組紅,黃,綠燈用于指揮交通,紅,黃,綠的持續(xù)時(shí)間分別為25s,5s,20s。2) 當(dāng)有緊急情況(如消防車(chē))時(shí),兩個(gè)方向均為紅燈亮,計(jì)時(shí)停止,當(dāng)特殊情況結(jié)束后,控制器恢復(fù)原來(lái)狀態(tài),正常工作。3) 一組數(shù)碼管,以倒計(jì)時(shí)方式顯示兩個(gè)方向允許通行或禁止通行的時(shí)間。2.提高部分:1) 實(shí)時(shí)修改交通燈的持續(xù)時(shí)間。2) 根據(jù)不同時(shí)段對(duì)主要交通方向的信號(hào)進(jìn)行調(diào)整。3) 可以使用LCD顯示提示信息。 三、實(shí)驗(yàn)報(bào)告要求 1.設(shè)計(jì)目的和內(nèi)容 2.總體設(shè)計(jì) 3.硬件設(shè)計(jì):原理圖(接線圖)及簡(jiǎn)要說(shuō)明 4.軟件設(shè)計(jì)框圖及程序清單 5.設(shè)計(jì)結(jié)果和體會(huì)(包括遇到的問(wèn)題及解決的方法) 四、總體設(shè)計(jì)交通燈的工作過(guò)程如下:設(shè)十字路口的1、3為南,北方向,2、4為東西方向,初始態(tài)為4個(gè)路口的紅燈全亮。之后,1、3路口的綠燈亮,2、4路口的紅燈亮,1、3路口方向通車(chē),2個(gè)路口的LED數(shù)碼管開(kāi)始倒計(jì)時(shí)25秒。延遲20秒后,1、3路口的綠燈熄滅,而1,3路口的黃燈開(kāi)始閃爍(1HZ)。閃爍5次后,1、3路口的紅燈亮,同時(shí)2、4路口的綠燈亮,2、4路口方向開(kāi)始通車(chē),2個(gè)路口的LED數(shù)碼管重新開(kāi)始倒計(jì)時(shí)25秒。延遲20秒時(shí)間后,2、4路口的綠燈熄滅,而黃燈開(kāi)始閃爍。閃爍5次后,再切換到1、3路口方向。之后,重復(fù)上述過(guò)程。當(dāng)有緊急情況時(shí),2個(gè)方向都紅燈亮,倒計(jì)時(shí)停止,車(chē)輛禁止通行,當(dāng)緊急情況結(jié)束后,控制器恢復(fù)以前的狀態(tài)繼續(xù)工作。 在設(shè)計(jì)中采用6個(gè)發(fā)光二極管來(lái)模擬2個(gè)路口的黃紅綠燈,每個(gè)路口用2個(gè)數(shù)碼管來(lái)顯示通行或禁止剩余的時(shí)間。緊急情況用一個(gè)單脈沖發(fā)生單元申請(qǐng)中斷來(lái)模擬,緊急情況結(jié)束后,再發(fā)一個(gè)中斷來(lái)恢復(fù)以前的狀態(tài)。 根據(jù)前面的介紹,本設(shè)計(jì)硬件由定時(shí)模塊、發(fā)光二極管模塊、數(shù)碼管顯示模塊和緊急中斷模塊組成。定時(shí)模塊采用硬件定時(shí)和軟件定時(shí)相結(jié)合的方法,用8253定時(shí)/計(jì)數(shù)器定時(shí)100ms,再用軟件計(jì)時(shí)實(shí)現(xiàn)所需的定時(shí)。發(fā)光二極管模塊由8255控制發(fā)光二極管來(lái)實(shí)現(xiàn)。數(shù)碼管顯示模塊由實(shí)驗(yàn)平臺(tái)上的LED顯示模塊實(shí)現(xiàn)。緊急中斷模塊是由單脈沖發(fā)生單元和8279中斷控制器組成。 程序主要是由定時(shí)子程序、發(fā)光二極管顯示子程序、數(shù)碼管顯示子程序和中斷服務(wù)程序組成。包括對(duì)8253、8255以及8259等可編程器件的編程。 五、硬件設(shè)計(jì) 本課題的設(shè)計(jì)可通過(guò)實(shí)驗(yàn)平臺(tái)上的一些功能模塊電路組成,由于各模塊電路內(nèi)部已經(jīng)連接,用戶在使用時(shí)只要設(shè)計(jì)模塊間電路的連接,因此,硬件電路的設(shè)計(jì)及實(shí)現(xiàn)相對(duì)簡(jiǎn)單。完整系統(tǒng)的硬件連接如圖1所示。硬件電路由定時(shí)模塊、發(fā)光二極管模塊、數(shù)碼管顯示模塊和緊急中斷模塊組成。 定時(shí)模塊是由8253的計(jì)數(shù)器0來(lái)實(shí)現(xiàn)定時(shí)100ms。Clk0接實(shí)驗(yàn)平臺(tái)分頻電路輸出Q6,f=46875hz。GATE0接8255的PA0,由8255輸出來(lái)控制計(jì)數(shù)器的起停。OUT0接8259的IRQ2,定時(shí)完成申請(qǐng)中斷,進(jìn)入中斷服務(wù)程序。 發(fā)光二極管顯示模塊由8255輸出來(lái)控制發(fā)光二極管的亮滅。8255輸出為低電平時(shí),對(duì)應(yīng)的發(fā)光二極管就點(diǎn)亮,否則就熄滅。8255的接口電路如圖2所示。交通燈的對(duì)應(yīng)關(guān)系如下:L7 L6 L5 L2 L1 L0PC7 PC6 PC5 PC2 PC1 PC013紅燈 13黃燈 13綠燈 24紅燈 24黃燈 24綠燈 實(shí)驗(yàn)平臺(tái)上提供一組六個(gè)LED數(shù)碼管。插孔CS1用于數(shù)碼管段選的輸出選通,插孔CS2用于數(shù)碼管位選信號(hào)的輸出選通。本設(shè)計(jì)用4個(gè)數(shù)碼管來(lái)倒計(jì)時(shí)。 緊急中斷模塊是由單脈沖發(fā)生單元和8259中斷控制器,單脈沖發(fā)生單元主要用來(lái)請(qǐng)求中斷,然后做出緊急情況處理。
標(biāo)簽: 交通燈控制器
上傳時(shí)間: 2013-10-07
上傳用戶:小小小熊
數(shù)據(jù)傳送的控制 數(shù)據(jù)傳送涉及的3個(gè)問(wèn)題1)數(shù)據(jù)的來(lái)源;2)數(shù)據(jù)的去處;3)數(shù)據(jù)本身以及如何控制數(shù)據(jù)的傳送。 DMA方式控制的數(shù)據(jù)傳送 DMA傳送方式通常用來(lái)高速傳送大批量的數(shù)據(jù)塊。如: 硬盤(pán)和軟盤(pán)I/O; 快速通信通道I/O; 多處理機(jī)和多程序數(shù)據(jù)塊傳送; 在圖像處理中,對(duì)CRT屏幕送數(shù)據(jù); 快速數(shù)據(jù)采集; DRAM的刷新操作。 DMA傳送包括:(1)存儲(chǔ)單元傳送:存儲(chǔ)器→存儲(chǔ)器。(2)DMA讀傳送:存儲(chǔ)器→I/O設(shè)備。(3)DMA寫(xiě)傳送:I/O設(shè)備→存儲(chǔ)器。4.1.2 DMA傳送的工作過(guò)程 1)I/O設(shè)備向DMAC發(fā)出DMA請(qǐng)求;2) DMAC向CPU發(fā)出總線請(qǐng)求;3)CPU在執(zhí)行完當(dāng)前指令的當(dāng)前的總線周期后,向DMAC發(fā)出總線響應(yīng)信號(hào);4)CPU脫離對(duì)系統(tǒng)總線的控制,由DMAC接管對(duì)系統(tǒng)總線的控制; 為什么DMA傳送方式能實(shí)現(xiàn)高速傳送?DMA傳送的過(guò)程是什么樣的?畫(huà)出流程。DMA有哪些操作方式?各有什么特點(diǎn)。簡(jiǎn)述DMA控制器的兩個(gè)工作狀態(tài)的特點(diǎn)。試設(shè)計(jì)一種在8088大模式下與8237連接的基本電路圖。并說(shuō)明你的設(shè)計(jì)中8237各個(gè)端口的實(shí)際地址。DMA控制器的時(shí)序包括哪幾個(gè)狀態(tài)周期?試畫(huà)出正常讀傳輸?shù)臅r(shí)序。DMAC的內(nèi)部地址寄存器是16位的,如何擴(kuò)展地址來(lái)訪問(wèn)16MB的地址空間?
標(biāo)簽: DMA
上傳時(shí)間: 2013-11-18
上傳用戶:leixinzhuo
掌握先進(jìn)微處理器芯片結(jié)構(gòu)、微型計(jì)算機(jī)實(shí)現(xiàn)技術(shù)、計(jì)算機(jī)主板構(gòu)成、各種接口技術(shù)原理及其應(yīng)用編程方法;掌握匯編語(yǔ)言程序的編寫(xiě)方法,尤其掌握接口訪問(wèn)的方法。了解微機(jī)技術(shù)新的發(fā)展趨勢(shì),系統(tǒng)科學(xué)地獲得分析問(wèn)題和解決問(wèn)題的訓(xùn)練;提高分析和設(shè)計(jì)接口的能力。不僅要學(xué)習(xí)微機(jī)各種接口電路的原理與作用,熟悉PC系列機(jī)接口電路,而且還要掌握常用接口的設(shè)計(jì)與分析方法,學(xué)會(huì)使用匯編語(yǔ)言和C語(yǔ)言對(duì)接口進(jìn)行編程,并具有一定的動(dòng)手實(shí)驗(yàn)?zāi)芰徒涌趹?yīng)用程序的編寫(xiě)能力,為微機(jī)的深入應(yīng)用和嵌入式系統(tǒng)SOC設(shè)計(jì)等的學(xué)習(xí)與實(shí)踐打下良好基礎(chǔ)。同時(shí)有興趣的同學(xué)自學(xué)Windows 2000/XP驅(qū)動(dòng)程序的編寫(xiě)方法。一定要下載和打印或復(fù)印電子講義,課堂上注意聽(tīng)講并及時(shí)記錄教師課堂上補(bǔ)充的內(nèi)容,認(rèn)真獨(dú)立完成作業(yè),做好課程實(shí)驗(yàn)和自修實(shí)驗(yàn)、做好課前預(yù)習(xí)和課后復(fù)習(xí)。1)抓住IBM PC/XT機(jī)基本結(jié)構(gòu)這條主線,分析其基本結(jié)構(gòu),掌握各接口電路及可編程接口芯片的應(yīng)用。2)進(jìn)一步擴(kuò)展和延伸CPU—從8086~Core 2 Duo,從實(shí)模式~保護(hù)模式;匯編語(yǔ)言-CPU及接口直接控制,16位~32位匯編;總線—PCI,USB等; 中斷—從實(shí)模式下的中斷向量~保護(hù)模式下的中斷描述符;從傳統(tǒng)中斷~PCI中斷~串行中斷 芯片組—從中大規(guī)模集成電路(8237、8254、8255、8259等)~ 超大規(guī)模集成電路(82815EP、82801BA)。第1章—CPU與整機(jī):CPU的信號(hào)與工作模式、PC結(jié)構(gòu)第11章--軟件如何控制CPU和接口:指令系統(tǒng)和匯編編程(在教師講授重點(diǎn)的基礎(chǔ)上,通過(guò)預(yù)習(xí)、實(shí)驗(yàn)與練習(xí)自學(xué)) 第2章--CPU如何與MEM或I/O設(shè)備通信:I/O接口與譯碼 第3章--總線如何工作:總線標(biāo)準(zhǔn)(PCI、USB) 第4章--I/O接口直接和MEM通信:DMA(8237,全自學(xué)) 第5章--I/O接口如何主動(dòng)與CPU通信:中斷技術(shù)(8259) 第6章--I/O接口的定時(shí)與計(jì)數(shù)功能:(8254) 第7章--I/O接口的并行通信:8255與打印機(jī)接口標(biāo)準(zhǔn) 第8章--I/O接口的串行通信:串行通信協(xié)議與8250 第10章--I/O軟接口技術(shù):保護(hù)模式存儲(chǔ),WDM驅(qū)動(dòng)程序編寫(xiě)(全自學(xué))
標(biāo)簽: 現(xiàn)代微機(jī)原理 接口技術(shù)
上傳時(shí)間: 2014-01-21
上傳用戶:徐孺
19-1. 單片機(jī)典型應(yīng)用系統(tǒng)組成19-2.單片機(jī)應(yīng)用系統(tǒng)實(shí)例19-3.單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程單片機(jī)系統(tǒng)組成A/D接口:實(shí)現(xiàn)模擬信號(hào)的采集并行A/D串行A/DD/A接口:輸出模擬量的控制信號(hào)并行D/A串行D/A開(kāi)關(guān)量輸入輸出:實(shí)現(xiàn)開(kāi)關(guān)信號(hào)的檢測(cè)和控制步進(jìn)電機(jī)、PWM控制的直流電機(jī)開(kāi)關(guān)量輸出的傳感器(如光電、霍爾傳感器等)通信接口:實(shí)現(xiàn)系統(tǒng)和外界(單片機(jī)或PC)的數(shù)據(jù)交換RS-232CRS-485人機(jī)界面:溝通用戶和系統(tǒng)的渠道鍵盤(pán)、顯示打印機(jī)
標(biāo)簽: 單片機(jī)應(yīng)用 系統(tǒng)設(shè)計(jì)
上傳時(shí)間: 2013-11-08
上傳用戶:skfreeman
15-1.實(shí)現(xiàn)定時(shí)的方法15-2.定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)和工作原理 15-3.定時(shí)器/計(jì)數(shù)器的控制15-4.定時(shí)器/計(jì)數(shù)器的工作方式 15-5.定時(shí)器/計(jì)數(shù)器應(yīng)用 軟件定時(shí)軟件延時(shí)不占用硬件資源,但占用了CPU時(shí)間,降低了CPU的利用率。例如延時(shí)程序。采用時(shí)基電路定時(shí)例如采用555電路,外接必要的元器件(電阻和電容),即可構(gòu)成硬件定時(shí)電路。但在硬件連接好以后,定時(shí)值與定時(shí)范圍不能由軟件進(jìn)行控制和修改,即不可編程,且定時(shí)時(shí)間容易漂移??删幊潭〞r(shí)器定時(shí)最方便的辦法是利用單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器。結(jié)合了軟件定時(shí)精確和硬件定時(shí)電路獨(dú)立的特點(diǎn)。定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu) 定時(shí)器/計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(16位),由高8位和低8位兩個(gè)寄存器組成。TMOD是定時(shí)器/計(jì)數(shù)器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動(dòng)和停止及設(shè)置溢出標(biāo)志。
標(biāo)簽: 定時(shí)器 計(jì)數(shù)器
上傳時(shí)間: 2014-12-28
上傳用戶:rnsfing
有兩種方式可以讓設(shè)備和應(yīng)用程序之間聯(lián)系:1. 通過(guò)為設(shè)備創(chuàng)建的一個(gè)符號(hào)鏈;2. 通過(guò)輸出到一個(gè)接口WDM驅(qū)動(dòng)程序建議使用輸出到一個(gè)接口而不推薦使用創(chuàng)建符號(hào)鏈的方法。這個(gè)接口保證PDO的安全,也保證安全地創(chuàng)建一個(gè)惟一的、獨(dú)立于語(yǔ)言的訪問(wèn)設(shè)備的方法。一個(gè)應(yīng)用程序使用Win32APIs來(lái)調(diào)用設(shè)備。在某個(gè)Win32 APIs和設(shè)備對(duì)象的分發(fā)函數(shù)之間存在一個(gè)映射關(guān)系。獲得對(duì)設(shè)備對(duì)象訪問(wèn)的第一步就是打開(kāi)一個(gè)設(shè)備對(duì)象的句柄。 用符號(hào)鏈打開(kāi)一個(gè)設(shè)備的句柄為了打開(kāi)一個(gè)設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個(gè)符號(hào)鏈出口,應(yīng)用程序可以用下面這個(gè)例子的形式打開(kāi)句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開(kāi)一個(gè)設(shè)備。這個(gè)設(shè)備必須有一個(gè)符號(hào)鏈,以便應(yīng)用程序能夠打開(kāi)它。有關(guān)細(xì)節(jié)查看有關(guān)Kdevice和CreateLink的內(nèi)容。在上述調(diào)用中第一個(gè)參數(shù)中前綴后的部分就是這個(gè)符號(hào)鏈的名字。注意:CreatFile中的第一個(gè)參數(shù)不是Windows 98/2000中驅(qū)動(dòng)程序(.sys文件)的路徑。是到設(shè)備對(duì)象的符號(hào)鏈。如果使用DriverWizard產(chǎn)生驅(qū)動(dòng)程序,它通常使用類KunitizedName來(lái)構(gòu)成設(shè)備的符號(hào)鏈。這意味著符號(hào)鏈名有一個(gè)附加的數(shù)字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應(yīng)用程序需要被覆蓋的I/O,第六個(gè)參數(shù)(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個(gè)輸出接口打開(kāi)句柄用這種方式打開(kāi)一個(gè)句柄會(huì)稍微麻煩一些。DriverWorks庫(kù)提供兩個(gè)助手類來(lái)使獲得對(duì)該接口的訪問(wèn)容易一些,這兩個(gè)類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個(gè)設(shè)備信息集,該信息集包含了特殊類中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類的一個(gè)實(shí)例來(lái)獲得一個(gè)或更多的CdeviceInterface類的實(shí)例。CdeviceInterface類是一個(gè)單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個(gè)路徑名的指針,該指針可以在CreateFile中使用來(lái)打開(kāi)設(shè)備。下面用一個(gè)小例子來(lái)顯示這些類最基本的使用方法: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)用程序獲得一個(gè)有效的設(shè)備句柄,它就能使用Win32 APIs來(lái)產(chǎn)生到設(shè)備對(duì)象的IRPs。下面的表顯示了這種對(duì)應(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)建一個(gè)新的文件對(duì)象。這使得多個(gè)句柄可以映射同一個(gè)文件對(duì)象。當(dāng)這個(gè)文件對(duì)象的最后一個(gè)用戶級(jí)句柄被撤銷(xiāo)后,I/O管理器調(diào)用CleanUp。當(dāng)沒(méi)有任何用戶級(jí)和核心級(jí)的對(duì)文件對(duì)象的訪問(wèn)的時(shí)候,I/O管理器調(diào)用Close。如果被打開(kāi)的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯(cuò)誤(無(wú)效功能)。以前為Windows95編寫(xiě)的VxD的應(yīng)用程序代碼中可能會(huì)在打開(kāi)設(shè)備的時(shí)候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個(gè)屬性,因?yàn)樗鼘?dǎo)致沒(méi)有特權(quán)的用戶企圖打開(kāi)這個(gè)設(shè)備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數(shù)轉(zhuǎn)換成IRP域的方法依賴于設(shè)備對(duì)象的屬性。當(dāng)設(shè)備設(shè)置DO_DIRECT_IO標(biāo)志,I/O管理器將buff鎖住在存儲(chǔ)器中,并且創(chuàng)建了一個(gè)存儲(chǔ)在IRP中的MDL域。一個(gè)設(shè)備可以通過(guò)調(diào)用Kirp::Mdl來(lái)存取MDL。當(dāng)設(shè)備設(shè)置DO_BUFFERED_IO標(biāo)志,設(shè)備對(duì)象分別通過(guò)KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或?qū)懖僮鳙@得buff地址。當(dāng)設(shè)備不設(shè)置DO_BUFFERED_IO標(biāo)志也不設(shè)置DO_DIRECT_IO,內(nèi)核設(shè)置IRP 的UserBuffer域來(lái)對(duì)應(yīng)ReadFile或WriteFile中的buff參數(shù)。然而,存儲(chǔ)區(qū)并沒(méi)有被鎖住而且地址只對(duì)調(diào)用進(jìn)程有效。驅(qū)動(dòng)程序可以使用KIrp::UserBuffer來(lái)存取IRP域。對(duì)于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴于特殊的I/O控制代碼,它不在設(shè)備對(duì)象的特性中。宏CTL_CODE(在winioctl.h中定義)用來(lái)構(gòu)造控制代碼。這個(gè)宏的其中一個(gè)參數(shù)指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對(duì)應(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)分配一個(gè)單一的緩沖來(lái)作為輸入與輸出。驅(qū)動(dòng)程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動(dòng)程序通過(guò)調(diào)用KIrp::IoctlBuffer獲得緩沖地址。在完成時(shí),I/O管理器從系統(tǒng)緩沖拷貝數(shù)據(jù)到提供給Ring 3級(jí)調(diào)用者使用的緩沖中。驅(qū)動(dòng)程序必須在結(jié)束前存儲(chǔ)拷貝到IRP的Information成員中的數(shù)據(jù)個(gè)數(shù)。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數(shù)呈現(xiàn)不同的含義。參數(shù)InputBuffer被拷貝到一個(gè)系統(tǒng)緩沖,這個(gè)緩沖驅(qū)動(dòng)程序可以通過(guò)調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對(duì)象,驅(qū)動(dòng)程序?qū)@個(gè)對(duì)象的訪問(wèn)通過(guò)調(diào)用KIrp::Mdl來(lái)實(shí)現(xiàn)。對(duì)于METHOD_OUT_DIRECT,調(diào)用者必須有對(duì)緩沖的寫(xiě)訪問(wèn)權(quán)限。注意,對(duì)METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會(huì)做映射來(lái)配置緩沖。虛擬地址只對(duì)調(diào)用進(jìn)程有效。這里是一個(gè)用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來(lái)定義一個(gè)IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現(xiàn)在使用一個(gè)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ū)動(dòng)程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設(shè)備拷貝串到里面并將拷貝的資結(jié)束設(shè)置到FirmwareRevSize中。在驅(qū)動(dòng)程序中,代碼看起來(lái)如下所示: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ū)動(dòng)程序 應(yīng)用程序 接口
上傳時(shí)間: 2013-10-17
上傳用戶:gai928943
LTC1732 是LINEAR TECHNOLOGY 公司推出的鋰離子電池充電控制集成電路芯片。它具有電池插入檢測(cè)和自動(dòng)低壓電池充電功能。文章介紹了該芯片的結(jié)構(gòu)、特點(diǎn)、工作原理及應(yīng)用信息,給出了典型的應(yīng)用電路。 LTC1732 是LINEAR TECHNOLOGY 公司生產(chǎn)的鋰-離子(Li-離子)電池恒流/恒壓線性充電控制器。它也可以對(duì)鎳-鎘(NiCd)和鎳-氫(NiMH)電池恒流充電。其充電電流可通過(guò)外部傳感電阻器編程到7%(最大值)的精度。最終的浮動(dòng)電壓精度為1%。利用LTC1732 的SEL 端可為4.1V 或4.2V 電池充電。當(dāng)輸入電源撤消后,LTC1732 可自動(dòng)進(jìn)入低電流睡眠狀態(tài),以使消耗電流下降到7μA。LTC1732 的內(nèi)部比較器用于檢測(cè)充電結(jié)束條件(C/10),而總的充電時(shí)間則是通過(guò)可編程計(jì)時(shí)器的外部電容來(lái)設(shè)置的。在電池完全放電后,控制器將自動(dòng)以規(guī)定電流的10%對(duì)被充電電池進(jìn)行慢速充電直到電池電壓超過(guò)2.457V。當(dāng)放電后的電池插入充電器或當(dāng)輸入電源接通時(shí),LTC1732 將開(kāi)始重新充電。另外,如果電池一直插入在充電器且在電池電壓降到3.8V(LTC1732-4)或4.05V(LTC1732-4.2)以下時(shí),充電器也將開(kāi)始重新充電。LTC1732 的其它主特點(diǎn)如下:●具有1%的預(yù)置充電電壓精度;●輸入電壓范圍4.5V~12V;●充電電流可編程控制;●具有C/10 充電電流檢測(cè)輸出;●可編程控制充電終端計(jì)時(shí);●帶有低電壓電池自動(dòng)小電流充電模式;●可編程控制恒定電流接通模式;●具有電池插入檢測(cè)和自動(dòng)低壓電流充電功能;●帶有輸入電源(隔離適配器)檢測(cè)輸出;●LTC1732-4.2 型器件的再充電閾值電壓為4.05V;●LTC1732-4 型器件的再充電閾值電壓為3.8V。
上傳時(shí)間: 2013-11-12
上傳用戶:semi1981
MCS51單片機(jī)內(nèi)部有4個(gè)并行口,當(dāng)內(nèi)部并行口不夠用時(shí)可以外擴(kuò)并行口芯片??赏鈹U(kuò)的并行口芯片很多,分成2類:不可編程的并行口芯片(74LS3734和74LS245)和可編程的并行口芯片(8255)。7.1 不可編程并行口芯片的擴(kuò)展7.1.1 74LS373的擴(kuò)展1、 74LS245的結(jié)構(gòu)2、 74LS245的引腳3、 74LS245與89C51的連接 7.1.2 74LS245的擴(kuò)展 7.2 可編程并行口芯片的擴(kuò)展 7.2.1 8255的結(jié)構(gòu)7.2.2 8255的引腳7.2.3 8255的工作方式7.2.4 8255的控制字7.2.5 8255的應(yīng)用
上傳時(shí)間: 2013-11-13
上傳用戶:lnnn30
單片機(jī)原理與應(yīng)用教程采用教、學(xué)、做相結(jié)合的模,以理論為基礎(chǔ)、著眼應(yīng)用,系統(tǒng)詳盡地介紹了單片機(jī)應(yīng)用技術(shù)所需的基本知識(shí)和技能。全書(shū)共分9章,包括MCS-51系列單片機(jī)的硬件結(jié)構(gòu)、工作原理、指令系統(tǒng)、接口技術(shù)、串行通信、中斷系統(tǒng)、語(yǔ)言程序設(shè)計(jì)及各功能部件的組成和應(yīng)用等。通過(guò)學(xué)習(xí)這些內(nèi)容,可對(duì)MCS-51系列單片機(jī)有一個(gè)總體的概念和認(rèn)識(shí),并在掌握基本硬件的基礎(chǔ)上用軟件實(shí)現(xiàn)其功能。 第1章 MCS-51單片機(jī)系統(tǒng)結(jié)構(gòu)1.1 單片機(jī)概述1.2 MCS-51單片機(jī)結(jié)構(gòu)簡(jiǎn)介1.3 并行I/O接口1.4 單片機(jī)的復(fù)位電路與時(shí)鐘電路1.5 單片機(jī)的工作方式1.6 構(gòu)建MCS-51型單片機(jī)的最小系統(tǒng)本章小結(jié)習(xí)題第2章 MCS-51指令系統(tǒng)與程序設(shè)計(jì)2.1 概述2.2 尋址方式2.3 指令系統(tǒng)2.4 匯編程序設(shè)計(jì)本章小結(jié) 習(xí)題第3章 單片機(jī)的定時(shí)與中斷系統(tǒng)3.1 定時(shí)器/計(jì)數(shù)器3.2 中斷系統(tǒng)3.3 單片機(jī)中斷與定時(shí)器/計(jì)數(shù)器的應(yīng)用訓(xùn)練本章小結(jié)習(xí)題第4章 串行通信技術(shù)4.1 串行通信概念4.2 MCS-51串行通信接口4.3 串行口的擴(kuò)展應(yīng)用4.4 串行通信的應(yīng)用本章小結(jié)習(xí)題第5章 單片機(jī)的系統(tǒng)擴(kuò)展技術(shù)5.1 程序存儲(chǔ)器的擴(kuò)展5.2 數(shù)據(jù)存儲(chǔ)器的擴(kuò)展5.3 TTL芯片擴(kuò)展I/O并行接口的應(yīng)用訓(xùn)練5.4 Intel系列可編程序接口芯片5.5 8155/8156可編程I/O接口應(yīng)用訓(xùn)練5.6 8253/8254可編程定時(shí)器/計(jì)數(shù)器的應(yīng)用訓(xùn)練……第6章 單片機(jī)接口實(shí)用技術(shù)及應(yīng)用第7章 單片機(jī)開(kāi)發(fā)系統(tǒng)第8章 單片機(jī)應(yīng)和系統(tǒng)的設(shè)計(jì)方法第9章 單片機(jī)高級(jí)語(yǔ)言C51的應(yīng)用
標(biāo)簽: 單片機(jī)原理 應(yīng)用教程
上傳時(shí)間: 2013-10-28
上傳用戶:tzrdcaabb
蟲(chóng)蟲(chóng)下載站版權(quán)所有 京ICP備2021023401號(hào)-1