交通燈控制器的設(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)有緊急情況(如消防車)時(shí),兩個(gè)方向均為紅燈亮,計(jì)時(shí)停止,當(dāng)特殊情況結(jié)束后,控制器恢復(fù)原來狀態(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)要說明 4.軟件設(shè)計(jì)框圖及程序清單 5.設(shè)計(jì)結(jié)果和體會(huì)(包括遇到的問題及解決的方法) 四、總體設(shè)計(jì)交通燈的工作過程如下:設(shè)十字路口的1、3為南,北方向,2、4為東西方向,初始態(tài)為4個(gè)路口的紅燈全亮。之后,1、3路口的綠燈亮,2、4路口的紅燈亮,1、3路口方向通車,2個(gè)路口的LED數(shù)碼管開始倒計(jì)時(shí)25秒。延遲20秒后,1、3路口的綠燈熄滅,而1,3路口的黃燈開始閃爍(1HZ)。閃爍5次后,1、3路口的紅燈亮,同時(shí)2、4路口的綠燈亮,2、4路口方向開始通車,2個(gè)路口的LED數(shù)碼管重新開始倒計(jì)時(shí)25秒。延遲20秒時(shí)間后,2、4路口的綠燈熄滅,而黃燈開始閃爍。閃爍5次后,再切換到1、3路口方向。之后,重復(fù)上述過程。當(dāng)有緊急情況時(shí),2個(gè)方向都紅燈亮,倒計(jì)時(shí)停止,車輛禁止通行,當(dāng)緊急情況結(jié)束后,控制器恢復(fù)以前的狀態(tài)繼續(xù)工作。 在設(shè)計(jì)中采用6個(gè)發(fā)光二極管來模擬2個(gè)路口的黃紅綠燈,每個(gè)路口用2個(gè)數(shù)碼管來顯示通行或禁止剩余的時(shí)間。緊急情況用一個(gè)單脈沖發(fā)生單元申請(qǐng)中斷來模擬,緊急情況結(jié)束后,再發(fā)一個(gè)中斷來恢復(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ā)光二極管來實(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ì)可通過實(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來實(shí)現(xiàn)定時(shí)100ms。Clk0接實(shí)驗(yàn)平臺(tái)分頻電路輸出Q6,f=46875hz。GATE0接8255的PA0,由8255輸出來控制計(jì)數(shù)器的起停。OUT0接8259的IRQ2,定時(shí)完成申請(qǐng)中斷,進(jìn)入中斷服務(wù)程序。 發(fā)光二極管顯示模塊由8255輸出來控制發(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ù)碼管來倒計(jì)時(shí)。 緊急中斷模塊是由單脈沖發(fā)生單元和8259中斷控制器,單脈沖發(fā)生單元主要用來請(qǐng)求中斷,然后做出緊急情況處理。
標(biāo)簽: 交通燈控制器
上傳時(shí)間: 2013-10-07
上傳用戶:小小小熊
基于單片機(jī)的紅外門進(jìn)控制系統(tǒng)設(shè)計(jì)與制作:我們所做的創(chuàng)新實(shí)驗(yàn)項(xiàng)目“基于單片機(jī)的紅外門控系統(tǒng)”已基本完成,現(xiàn)將其工作原理簡(jiǎn)要說明。該系統(tǒng)主要分為兩大部分:一是紅外傳感器部分。二是單片機(jī)計(jì)數(shù)顯示控制部分。基本電路圖如下:其中紅外傳感器部分我們采用紅外對(duì)管實(shí)現(xiàn),紅外對(duì)管平行放置,平常處于接收狀態(tài),經(jīng)比較器輸出低電平,當(dāng)有人經(jīng)過時(shí),紅外線被擋住,接收管接收不到紅外線,經(jīng)比較器輸出高電平。這樣,當(dāng)有人經(jīng)過時(shí)便會(huì)產(chǎn)生一個(gè)電平的跳變。單片機(jī)控制部分主要是通過外部?jī)蓚€(gè)中斷判斷是否有人經(jīng)過,如果有人經(jīng)過,由于電平跳變的產(chǎn)生,進(jìn)入中斷服務(wù)程序,這里我們采用了兩對(duì)紅外傳感器接到兩個(gè)外部中斷口,中斷0作為入口,實(shí)現(xiàn)加1操作,中斷1作為出口,實(shí)現(xiàn)減1操作。另外,我們通過P0口控制室內(nèi)燈的亮暗,當(dāng)寄存器計(jì)數(shù)值為0時(shí),熄燈,不為0時(shí),燈亮。顯示部分,采用兩位數(shù)碼管動(dòng)態(tài)顯示,如有必要,可以很方便的擴(kuò)展為四位計(jì)數(shù)。精益求精!在實(shí)驗(yàn)過程中,我們走了非常多的彎路,做出來的東西根本不是自己想要的,我們本想做成室內(nèi)只有一個(gè)門的進(jìn)出計(jì)數(shù),原理已清楚,即在門的兩邊放置兩對(duì)紅外對(duì)管,進(jìn)出時(shí),擋住兩對(duì)對(duì)管的順序不同,因此,可判斷是進(jìn)入還是出去,從而實(shí)現(xiàn)加減計(jì)數(shù),編程時(shí),可分別在兩個(gè)中斷服務(wù)程序的入口置標(biāo)志位,根據(jù)標(biāo)志位判斷進(jìn)出,詳細(xì)內(nèi)容在程序部分。理論如此,但在實(shí)際過程中,還是發(fā)現(xiàn)實(shí)現(xiàn)不了上述功能,我們初步判定認(rèn)為是程序掌握得不夠好,相信隨著自己對(duì)單片機(jī)了解的深入,應(yīng)該會(huì)做出更好的 (因?yàn)槲覀兪桥R時(shí)學(xué)的單片機(jī)),程序的具體內(nèi)容如下: $MOD52 ORG 0000H LJMP MAIN ORG 0003H LJMP 0100H ORG 0013H LJMP 0150H ORG 0050HMAIN: CLR A MOV 30H , A ;初始化緩存區(qū) MOV 31H , A MOV 32H , A MOV 33H , A MOV R6 , A MOV R7 , A SETB EA SETB EX0 SETB EX1 SETB IT0 SETB IT1 SETB PX1NEXT1: ACALL HEXTOBCDD ;調(diào)用數(shù)制轉(zhuǎn)換子程序 ACALL DISPLAY ;調(diào)用顯示子程序 LJMP NEXT1 ORG 0100H ;中斷0服務(wù)程序 LCALL DELY mov 70h,#2 djnz 70h,next JBC F0,NEXT SETB F0 CLR P0.0 LCALL DELY0 SETB P0.0 MOV A , R7 ADD A , #1 MOV R7, A MOV A , R6 ADDC A , #0 MOV R6 , A CJNE R6 , #07H , NEXT CLR A MOV R6 , A MOV R7 , ANEXT: RETI ORG 0150H ;中斷1服務(wù)程序 LCALL DELY mov 70h,#2 djnz 70h,next2 JBC F0,NEXT2 SETB F0 CLR P0.0 LCALL DELY0 SETB P0.0 CLR C MOV A , R7 SUBB A , #1 MOV R7, A MOV A , R6 SUBB A , #0 MOV R6 , A CJNE R6 , #07H , NEXT2 CLR A MOV R6 , A MOV R7 , ANEXT2: RETI ORG 0200HHEXTOBCDD:MOV A , R6 ;由十六進(jìn)制轉(zhuǎn)化為十進(jìn)制 PUSH ACC MOV A , R7 PUSH ACC MOV A , R2 PUSH ACC CLR A MOV R3 , A MOV R4 , A MOV R5 , A MOV R2 , #10HHB3: MOV A , R7 ;將十六進(jìn)制中最高位移入進(jìn)位位中 RLC A MOV R7 , A MOV A , R6 RLC A MOV R6 , A MOV A , R5 ;每位數(shù)加上本身相當(dāng)于將這個(gè)數(shù)乘以2 ADDC A , R5 DA A MOV R5 , A MOV A , R4 ADDC A , R4 DA A ;十進(jìn)制調(diào)整 MOV R4 , A MOV A , R3 ADDC A , R3 DJNZ R2 , HB3 POP ACC MOV R2 , A POP ACC MOV R7 , A POP ACC MOV R6 , A RET ORG 0250HDISPLAY: MOV R0 , #30H MOV A , R5 ANL A , #0FH MOV @R0 , A MOV A , R5 SWAP A ANL A , #0FH INC R0 MOV @R0 , A MOV A , R4 ANL A , #0FH INC R0 MOV @R0 , A MOV A , R4 SWAP A ANL A , #0FH INC R0 MOV @R0 , A MOV R0 , #30H MOV R2 , #11111110BAGAIN: MOV A , R2 MOV P2 , A MOV A , @R0 MOV DPTR , #TAB MOVC A , @A+DPTR MOV P1 , A ACALL DELAY INC R0 MOV A , R2 RL A MOV R2 , A JB ACC.4 , AGAIN RETTAB: DB 03FH , 06H , 5BH , 4FH , 66H , 6DH , 7DH , 07H , 7FH , 6FH ;七段碼表DELY: MOV R1,#80D1: MOV R2,#100 DJNZ R2,$ DJNZ R1,D1 RET DELAY: MOV TMOD , #01H ;延時(shí)子程序 MOV TL0 , #0FEH MOV TH0 , #0FEH SETB TR0WAIT: JNB TF0 , WAIT CLR TF0 CLR TR0 RETDELY0: MOV R1, #200D3: MOV R2,#250 DJNZ R2,$ DJNZ R1,D3 RET END 該系統(tǒng)實(shí)際應(yīng)用廣泛。可用在生產(chǎn)線上產(chǎn)品數(shù)量統(tǒng)計(jì)、公交車智能計(jì)數(shù)問候(需添加語音芯片)、超市內(nèi)人數(shù)統(tǒng)計(jì)等公共場(chǎng)合。另外,添加串口通信部分便可實(shí)現(xiàn)與PC數(shù)據(jù)交換的功能。 由于,實(shí)驗(yàn)簡(jiǎn)化了,剩下不少零件和資金,所以我們又做了兩項(xiàng)其他的實(shí)驗(yàn)。
標(biāo)簽: 單片機(jī) 紅外 控制系統(tǒng)設(shè)計(jì) 原理圖
上傳時(shí)間: 2013-12-22
上傳用戶:tangsiyun
鋰離子電池Li+ 是適合電子產(chǎn)品輕薄小需求的高能量密度高性能電池,被廣泛應(yīng)用于手機(jī),PDA ,筆記本電腦等高端產(chǎn)品中.圖一所示電路提供了一種結(jié)構(gòu)簡(jiǎn)單緊湊的單節(jié)Li+電池充電方案圖中墻上適配器為9VDC 800mA 限流型電壓源Anam Friwo 等公司均有相應(yīng)產(chǎn)品MAX1679內(nèi)置充電終止檢測(cè)電路和充電過程控制.器插入電池或充電器上電都將啟動(dòng)一次充電過程一次完整的充電過程包括初始化充電以較小的充電電流為電池充電使電池電壓大于2.5V溫度范圍如果超出2.5 到47.5 則處于等待狀態(tài).快充過程快充開始后MAX1679打開外接的P 溝道場(chǎng)效應(yīng)管快充電流由外部限流型充電電源決定.一旦檢測(cè)到電池電壓達(dá)到Li+電池充電終止門限電壓時(shí)快充結(jié)束.充電終止門限電壓由電阻RADJ確定,可參考以下公式:
上傳時(shí)間: 2013-11-14
上傳用戶:yuanwenjiao
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í)間容易漂移。可編程定時(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. 通過為設(shè)備創(chuàng)建的一個(gè)符號(hào)鏈;2. 通過輸出到一個(gè)接口WDM驅(qū)動(dòng)程序建議使用輸出到一個(gè)接口而不推薦使用創(chuàng)建符號(hào)鏈的方法。這個(gè)接口保證PDO的安全,也保證安全地創(chuàng)建一個(gè)惟一的、獨(dú)立于語言的訪問設(shè)備的方法。一個(gè)應(yīng)用程序使用Win32APIs來調(diào)用設(shè)備。在某個(gè)Win32 APIs和設(shè)備對(duì)象的分發(fā)函數(shù)之間存在一個(gè)映射關(guān)系。獲得對(duì)設(shè)備對(duì)象訪問的第一步就是打開一個(gè)設(shè)備對(duì)象的句柄。 用符號(hào)鏈打開一個(gè)設(shè)備的句柄為了打開一個(gè)設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個(gè)符號(hào)鏈出口,應(yīng)用程序可以用下面這個(gè)例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開一個(gè)設(shè)備。這個(gè)設(shè)備必須有一個(gè)符號(hào)鏈,以便應(yīng)用程序能夠打開它。有關(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來構(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è)輸出接口打開句柄用這種方式打開一個(gè)句柄會(huì)稍微麻煩一些。DriverWorks庫提供兩個(gè)助手類來使獲得對(duì)該接口的訪問容易一些,這兩個(gè)類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個(gè)設(shè)備信息集,該信息集包含了特殊類中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類的一個(gè)實(shí)例來獲得一個(gè)或更多的CdeviceInterface類的實(shí)例。CdeviceInterface類是一個(gè)單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個(gè)路徑名的指針,該指針可以在CreateFile中使用來打開設(shè)備。下面用一個(gè)小例子來顯示這些類最基本的使用方法: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來產(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í)句柄被撤銷后,I/O管理器調(diào)用CleanUp。當(dāng)沒有任何用戶級(jí)和核心級(jí)的對(duì)文件對(duì)象的訪問的時(shí)候,I/O管理器調(diào)用Close。如果被打開的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯(cuò)誤(無效功能)。以前為Windows95編寫的VxD的應(yīng)用程序代碼中可能會(huì)在打開設(shè)備的時(shí)候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個(gè)屬性,因?yàn)樗鼘?dǎo)致沒有特權(quán)的用戶企圖打開這個(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è)備可以通過調(diào)用Kirp::Mdl來存取MDL。當(dāng)設(shè)備設(shè)置DO_BUFFERED_IO標(biāo)志,設(shè)備對(duì)象分別通過KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或?qū)懖僮鳙@得buff地址。當(dāng)設(shè)備不設(shè)置DO_BUFFERED_IO標(biāo)志也不設(shè)置DO_DIRECT_IO,內(nèi)核設(shè)置IRP 的UserBuffer域來對(duì)應(yīng)ReadFile或WriteFile中的buff參數(shù)。然而,存儲(chǔ)區(qū)并沒有被鎖住而且地址只對(duì)調(diào)用進(jìn)程有效。驅(qū)動(dòng)程序可以使用KIrp::UserBuffer來存取IRP域。對(duì)于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴于特殊的I/O控制代碼,它不在設(shè)備對(duì)象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構(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è)單一的緩沖來作為輸入與輸出。驅(qū)動(dòng)程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動(dòng)程序通過調(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)程序可以通過調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對(duì)象,驅(qū)動(dòng)程序?qū)@個(gè)對(duì)象的訪問通過調(diào)用KIrp::Mdl來實(shí)現(xiàn)。對(duì)于METHOD_OUT_DIRECT,調(diào)用者必須有對(duì)緩沖的寫訪問權(quán)限。注意,對(duì)METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會(huì)做映射來配置緩沖。虛擬地址只對(duì)調(diào)用進(jìn)程有效。這里是一個(gè)用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個(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)程序中,代碼看起來如下所示: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
自制一臺(tái)ATMEL 89系列FLASH單片機(jī)編程器學(xué)習(xí)單片機(jī)最有用的恐怕是編程器和仿真機(jī),一臺(tái)商品化的編程器至少要幾百元,仿真機(jī)價(jià)格更高,往往讓初學(xué)者難以選擇。這里介紹的一款國外電子網(wǎng)站推出的廉價(jià)51編程器,能夠讀寫最常用的12種51單片機(jī),自己動(dòng)手裝配一臺(tái),既能鍛煉自己的動(dòng)手能力,又能廉價(jià)地裝備一臺(tái)多用編程器,無論是學(xué)習(xí)單片機(jī)或業(yè)余時(shí)間搞開發(fā),都是一個(gè)非常好的選擇。筆者按照資料自制了一臺(tái),十分好用,不敢獨(dú)享。特編譯了全部制作資料介紹給大家。這個(gè)編程器硬件使用標(biāo)準(zhǔn)的TTL系列器件而沒有使用特殊元件。它連接在計(jì)算機(jī)的并行端口,對(duì)PC的并口沒有特殊要求,所以配置很低的計(jì)算機(jī)也能用這個(gè)編程器。Atmel Flash 系列單片機(jī)是當(dāng)前最流行的單片機(jī),易于擦寫,不象OTP芯片容易造成浪費(fèi)。特別是89系列單片機(jī)與大家熟悉的INTEL51系列單片機(jī)完全兼容,這個(gè)編程器支持的單片機(jī)主要是Atmel flash系列。支持的器件: 這個(gè)編程器支持以下ATMEL單片機(jī)AT89C51,AT89C52,AT89C55,AT89S51,AT89S52,AT89S53,AT89C51RC,AT89C55WD,AT89S8252,AT89C1051U,AT89C2051,AT89C4051注意:20腳的單片機(jī)需要一個(gè)簡(jiǎn)單的適配器。(圖 2 ) 硬件: 圖1顯示了這個(gè)FLASH 編程器的電路圖,編程器和標(biāo)準(zhǔn)的計(jì)算機(jī)并口連接。電路圖中的U2是用于控制計(jì)算機(jī)和控制器之間的數(shù)據(jù)流,U4 鎖存低位地址字節(jié) ,U5 鎖存高位地址字節(jié) ,U3用于產(chǎn)生控制信號(hào)給被編程的單片機(jī)。IC U1用于產(chǎn)生編程脈沖給單片機(jī).當(dāng)U7提供編程電壓給控制器時(shí),電源部分用U8產(chǎn)生邏輯5v供給。IC U6用于產(chǎn)生5V或6.5V VDD 電源電壓給單片機(jī)。
標(biāo)簽: ATMEL FLASH 單片機(jī)編程器
上傳時(shí)間: 2013-10-18
上傳用戶:bakdesec
微型51/AVR 編程器套件裝配說明書 請(qǐng)您在動(dòng)手裝配這個(gè)編程器之前,務(wù)必先看完本說明書,避免走彎路。 1.收到套件后請(qǐng)對(duì)照元器件列表檢查一下,元件、配件是否齊全? Used Part Type Designator ==== ================ ========== 1 1k R6 1 1uf 50V C11 5 2k2 R2 R3 R4 R5 R11 1 10K*8 RN1 2 11.0592MHZ Q1 Q2 1 12V,0.5W D2 2 15k R7 R8 2 21k R9 R10 4 33p C6 C7 C8 C9 1 47uf 25V C10 1 74HC164 IC6 2 78L05 IC4 IC5 1 100uf 25V C12 1 220R R1 1 AT89C51 IC2 1 B40C800(W02) D1 2 BS170 T1 T2 1 BS250 T3 1 DB9/F J2 1 J1X2 J1 1 LED GN5 D3 1 LM317L IC1 1 TLC2272 IC7 1 ZIF40 IC3 5 1uf C1 C2 C3 C4 C5 另外,套件配有1.5米串行電纜一根和配套的PCB一塊,不含電源。編程器使用的15V交流電源或12V直流電源需要自己配套。2.裝配要點(diǎn):先焊接阻容元件,3個(gè)集成電路插座(IC2,IC7,IC6)其次是晶振, 全橋,穩(wěn)壓IC 等,然后焊接J2,最后焊接T1,T2,T3三只場(chǎng)效應(yīng)管。焊接場(chǎng)效應(yīng)管時(shí)務(wù)必按照以下方法:拔去電烙鐵的電源,使用電烙鐵余溫去焊接三只場(chǎng)效應(yīng)管,否則靜電很容易損壞管子。這是裝配成功的關(guān)鍵。這三只管子有問題,最典型的現(xiàn)象是不能聯(lián)機(jī)。由于電源插座封裝比較特殊,國內(nèi)無法配套上,已改用電源線接線柱,可直接焊接在PCB板焊盤上,如下圖1所示(在下圖中兩個(gè)紅色圓圈內(nèi)指示的焊盤),然后在連接到套件中配套的電源插座上。最近有朋友反映用15V交流比較麻煩,還要另外配變壓器。如果要使用12V的直流電,無需將全橋焊上,將兩個(gè)接線柱分別焊接在全橋的正負(fù)輸出位置的焊盤上即可,如下圖2所示,藍(lán)色圓圈內(nèi)指示的焊盤,連接電源的時(shí)候要注意正負(fù)極,不要接錯(cuò)了。方形焊盤是正極。40腳ZIF插座焊接前,應(yīng)該將BR1飛線焊接好。注意:由于焊盤比較小,注意焊接溫度,不要高溫長(zhǎng)時(shí)間反復(fù)焊接,會(huì)導(dǎo)致焊盤脫落。
上傳時(shí)間: 2013-12-31
上傳用戶:caiguoqing
串行編程器源程序(Keil C語言)//FID=01:AT89C2051系列編程器//實(shí)現(xiàn)編程的讀,寫,擦等細(xì)節(jié)//AT89C2051的特殊處:給XTAL一個(gè)脈沖,地址計(jì)數(shù)加1;P1的引腳排列與AT89C51相反,需要用函數(shù)轉(zhuǎn)換#include <e51pro.h> #define C2051_P3_7 P1_0#define C2051_P1 P0//注意引腳排列相反#define C2051_P3_0 P1_1#define C2051_P3_1 P1_2#define C2051_XTAL P1_4#define C2051_P3_2 P1_5#define C2051_P3_3 P1_6#define C2051_P3_4 P1_7#define C2051_P3_5 P3_5 void InitPro01()//編程前的準(zhǔn)備工作{ SetVpp0V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=0; Delay_ms(20); nAddress=0x0000; SetVpp5V();} void ProOver01()//編程結(jié)束后的工作,設(shè)置合適的引腳電平{ SetVpp5V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=1;} BYTE GetData()//從P0口獲得數(shù)據(jù){ B_0=P0_7; B_1=P0_6; B_2=P0_5; B_3=P0_4; B_4=P0_3; B_5=P0_2; B_6=P0_1; B_7=P0_0; return B;} void SetData(BYTE DataByte)//轉(zhuǎn)換并設(shè)置P0口的數(shù)據(jù){ B=DataByte; P0_0=B_7; P0_1=B_6; P0_2=B_5; P0_3=B_4; P0_4=B_3; P0_5=B_2; P0_6=B_1; P0_7=B_0;} void ReadSign01()//讀特征字{ InitPro01(); Delay_ms(1);//----------------------------------------------------------------------------- //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號(hào) C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(20); ComBuf[2]=GetData(); C2051_XTAL=1; C2051_XTAL=0; Delay_us(20); ComBuf[3]=GetData(); ComBuf[4]=0xff;//----------------------------------------------------------------------------- ProOver01();} void Erase01()//擦除器件{ InitPro01();//----------------------------------------------------------------------------- //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號(hào) C2051_P3_3=1; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(1); SetVpp12V(); Delay_ms(1); C2051_P3_2=0; Delay_ms(10); C2051_P3_2=1; Delay_ms(1);//----------------------------------------------------------------------------- ProOver01();} BOOL Write01(BYTE Data)//寫器件{//----------------------------------------------------------------------------- //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號(hào) //寫一個(gè)單元 C2051_P3_3=0; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; SetData(Data); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); Delay_us(20); C2051_P3_4=0; Delay_ms(2); nTimeOut=0; P0=0xff; nTimeOut=0; while(!GetData()==Data)//效驗(yàn):循環(huán)讀,直到讀出與寫入的數(shù)相同 { nTimeOut++; if(nTimeOut>1000)//超時(shí)了 { return 0; } } C2051_XTAL=1; C2051_XTAL=0;//一個(gè)脈沖指向下一個(gè)單元//----------------------------------------------------------------------------- return 1;} BYTE Read01()//讀器件{ BYTE Data;//----------------------------------------------------------------------------- //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號(hào) //讀一個(gè)單元 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=1; C2051_P3_7=1; Data=GetData(); C2051_XTAL=1; C2051_XTAL=0;//一個(gè)脈沖指向下一個(gè)單元//----------------------------------------------------------------------------- return Data;} void Lock01()//寫鎖定位{ InitPro01();//先設(shè)置成編程狀態(tài)//----------------------------------------------------------------------------- //根據(jù)器件的DataSheet,設(shè)置相應(yīng)的編程控制信號(hào) if(ComBuf[2]>=1)//ComBuf[2]為鎖定位 { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); } if(ComBuf[2]>=2) { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=0; C2051_P3_7=0; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); }//----------------------------------------------------------------------------- ProOver01();} void PreparePro01()//設(shè)置pw中的函數(shù)指針,讓主程序可以調(diào)用上面的函數(shù){ pw.fpInitPro=InitPro01; pw.fpReadSign=ReadSign01; pw.fpErase=Erase01; pw.fpWrite=Write01; pw.fpRead=Read01; pw.fpLock=Lock01; pw.fpProOver=ProOver01;}
上傳時(shí)間: 2013-11-12
上傳用戶:gut1234567
單片機(jī)模糊模糊控制是目前在控制領(lǐng)域所采用的三種智能控制方法中最具實(shí)際意義的方法。模糊控制的采用解決了大量過去人們無法解決的問題,并且在工業(yè)控制、家用電器和各個(gè)領(lǐng)域已取得了令人觸目的成效。本書是一本系統(tǒng)地介紹模糊控制的理論、技術(shù)、方法和應(yīng)用的著作;內(nèi)容包括模糊控制基礎(chǔ)、模糊控制器、模糊控制系統(tǒng)、模糊控制系統(tǒng)的穩(wěn)定性、模糊控制系統(tǒng)的開發(fā)軟件,用單片微型機(jī)實(shí)現(xiàn)模糊控制的技術(shù)和方法,模糊控制在家用電器和工業(yè)上應(yīng)用的實(shí)際例子;反映了模糊控制目前的水平。 單片機(jī)模糊模糊控制目錄 : 第一章 模糊邏輯、神經(jīng)網(wǎng)絡(luò)集成電路的發(fā)展 1.1 模糊邏輯及其集成電路的發(fā)展1.1.1 模糊邏輯的誕生和發(fā)展1.1.2 模糊集成電路的發(fā)展進(jìn)程1.2 神經(jīng)網(wǎng)絡(luò)及其集成電路的發(fā)展1.2.1 神經(jīng)網(wǎng)絡(luò)的形成歷史1.2.2 神經(jīng)網(wǎng)絡(luò)集成電路的發(fā)展1.3 模糊邏輯和神經(jīng)網(wǎng)絡(luò)的結(jié)合1.3.1 模糊邏輯和神經(jīng)網(wǎng)絡(luò)結(jié)合的意義1.3.2 模糊邏輯和神經(jīng)網(wǎng)絡(luò)結(jié)合的前景第二章 模糊邏輯及其理論基礎(chǔ) 2.1 模糊集合與隸屬函數(shù)2.1.1 模糊集合概念2.1.2 隸屬函數(shù)2.1.3 分解定理與擴(kuò)張定理2.1.4 模糊數(shù)2.2 模糊關(guān)系、模糊矩陣與模糊變換2.2.1 模糊關(guān)系2.2.2 模糊矩陣2.2.3 模糊變換2.3模糊邏輯和函數(shù)2.3.1模糊命題2.3.2模糊邏輯2.3.3模糊邏輯函數(shù)2.4模糊語言2.4.1 語言及語言的模糊性2.4.2 模糊語言2.4.3 語法規(guī)則和算子2.4.4 模糊條件語句2.5 模糊推理2.5.1 模糊推理的CRI法2.5.2 模糊推理的TVR法2.5.3 模糊推理的直接法2.5.4 模糊推理的精確值法2.5.5 模糊推理的強(qiáng)度轉(zhuǎn)移法第三章 模糊控制基礎(chǔ) 3.1 模糊控制的系統(tǒng)結(jié)構(gòu)3.2 精確量的模糊化3.2.1 語言變量的分檔3.2.2 語言變量值的表示方法3.2.3 精確量轉(zhuǎn)換成模糊量3.3 模糊量的精確化3.3.1 最大隸屬度法3.3.2 中位數(shù)法3.3.3 重心法3.4 模糊控制規(guī)則及控制算法3.4.1 模糊控制規(guī)則的格式3.4.2 模糊控制規(guī)則的生成3.4.3 模糊控制規(guī)則的優(yōu)化3.4.4 模糊控制算法3.5 模糊控制的神經(jīng)網(wǎng)絡(luò)方法3.5.1 神經(jīng)元和神經(jīng)網(wǎng)絡(luò)3.5.2 神經(jīng)網(wǎng)絡(luò)的分布存儲(chǔ)和容錯(cuò)性3.5.3 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)算法3.5.4 神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)的模糊控制3.5.5 神經(jīng)網(wǎng)絡(luò)構(gòu)造隸屬函數(shù)3.5.6 神經(jīng)網(wǎng)絡(luò)存儲(chǔ)控制規(guī)則3.5.7 神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)模糊化、反模糊化第四章 模糊控制器 4.1 模糊控制器結(jié)構(gòu)4.2 模糊控制器設(shè)計(jì)4.2.1 常規(guī)模糊控制器設(shè)計(jì)4.2.2 變結(jié)構(gòu)模糊控制器設(shè)計(jì)4.2.3 自組織模糊控制器設(shè)計(jì)4.2.4 自適應(yīng)模糊控制器設(shè)計(jì)4.3 模糊控制器的數(shù)學(xué)模型4.3.1 常規(guī)模糊控制器的數(shù)學(xué)模型4.3.2 模糊控制器數(shù)學(xué)模型的建立第五章 模糊控制系統(tǒng) 5.1 模糊系統(tǒng)的辨識(shí)和建模5.1.1 模糊系統(tǒng)辨識(shí)的數(shù)學(xué)基礎(chǔ)5.1.2 基于模糊關(guān)系方程的模糊模型辨識(shí)5.1.3 基于語言控制規(guī)則的模糊模型辨識(shí)5.2 模糊控制系統(tǒng)的設(shè)計(jì)5.2.1 模糊控制系統(tǒng)的一般設(shè)計(jì)過程5.2.2 模糊控制系統(tǒng)的典型設(shè)計(jì)5.3 模糊控制系統(tǒng)的穩(wěn)定性5.3.1 穩(wěn)定性分析的Lyapunov直接法5.3.2 語言規(guī)則描述的模糊控制系統(tǒng)的穩(wěn)定性5.3.3 關(guān)系方程描述的模糊控制系統(tǒng)的穩(wěn)定性第六章 數(shù)字單片機(jī)與模糊控制6.1 數(shù)字單片機(jī)MC68HC705P96.1.1 MC68HC705P9單片機(jī)性能概論6.1.2 MC68HC705P9單片機(jī)基本結(jié)構(gòu)6.1.3 MC68HC705P9指令系統(tǒng)6.2 數(shù)字單片機(jī)模糊控制方式6.2.1 數(shù)字單片機(jī)與模糊控制關(guān)系6.2.2 數(shù)字單片機(jī)模糊控制方式第七章 模糊單片機(jī)與模糊控制7.1 模糊單片機(jī)NLX2307.1.1 模糊單片機(jī)NLX230性能概況7.1.2 NLX230的結(jié)構(gòu)及引腳7.1.3 NLX230的模糊推理方式7.1.4 NLX230的內(nèi)部寄存器7.1.5 NLX230的操作及接口技術(shù)7.2 NLX230開發(fā)系統(tǒng)7.3 NLX230應(yīng)用例子第八章 模糊控制的開發(fā)軟件8.1 模糊推理機(jī)原理8.2 模糊推理機(jī)的算法8.3 模糊推理機(jī)結(jié)構(gòu)和清單8.4 模糊邏輯知識(shí)基發(fā)生器8.5 模糊推理開發(fā)環(huán)境8.5.1 FIDE的工作條件8.5.2 FIDE的結(jié)構(gòu)8.5.3 FIDE的工作過程第九章 模糊控制在家用電器中的應(yīng)用9.1 模糊控制的電冰箱9.1.1 電冰箱模糊控制系統(tǒng)結(jié)構(gòu)9.1.2 模糊控制規(guī)則和模糊量9.1.3 控制系統(tǒng)的電路結(jié)構(gòu)9.1.4 控制規(guī)則的自調(diào)整9.2 模糊控制的電飯鍋9.2.1 煮飯的工藝過程曲線9.2.2 模糊控制的邏輯結(jié)構(gòu)9.2.3 模糊量和模糊推理9.2.4 控制軟件框圖9.3 模糊控制的微波爐9.3.1 控制電路的結(jié)構(gòu)框圖9.3.2 微波爐的模糊量與推理9.3.3 微波爐控制電路結(jié)構(gòu)原理9.3.4 控制軟件原理及框圖9.4 模糊控制的洗衣機(jī)9.4.1 模糊洗衣機(jī)控制系統(tǒng)邏輯結(jié)構(gòu)9.4.2 模糊洗衣機(jī)的模糊推理9.4.3 洗衣機(jī)物理量檢測(cè)方法9.4.4 布質(zhì)和布量的模糊推理第十章 模糊控制在工程上的應(yīng)用10.1 模糊參數(shù)自適應(yīng)PID控制器10.1.1 自校正PID控制器10.1.2 模糊參數(shù)自適應(yīng)PID控制系統(tǒng)結(jié)構(gòu)10.1.3 模糊控制規(guī)則的產(chǎn)生10.1.4 模糊推理機(jī)理及運(yùn)行結(jié)果10.2 恒溫爐模糊控制10.2.1 恒溫爐模糊控制的系統(tǒng)結(jié)構(gòu)10.2.2 模糊控制器及控制規(guī)則的形成10.2.3 模糊控制器的校正10.3 感應(yīng)電機(jī)模糊矢量控制10.3.1 模糊矢量控制系統(tǒng)結(jié)構(gòu)10.3.2 矢量控制的基本原理10.3.3 模糊電阻觀測(cè)器10.3.4 模糊控制器及運(yùn)行
上傳時(shí)間: 2014-12-28
上傳用戶:semi1981
C51單片機(jī)是我們生活中最常用的系列,MCS-51系列單片機(jī)有4個(gè)并行口(P0,P1,P2,P3口),但對(duì)一個(gè)稍微復(fù)雜的應(yīng)用系統(tǒng)來說,真正可供用戶使用的并行口,只有P1口可用,況且常常因擴(kuò)展I2C和SPI的器件需占用某些P1口,迫使用戶不得不擴(kuò)展并行口以滿足實(shí)際的需要。習(xí)慣上,常用的并行口接口芯片有8255、8155,這兩種芯片功能比較齊全,可以使用在相對(duì)比較復(fù)雜的系統(tǒng)中,但如是對(duì)一般的系統(tǒng)而言,這些功能往往閑置不用。那么就可以選用一些本來閑置不用的口線作為選通信號(hào)來進(jìn)行并行口的擴(kuò)展,這樣就能充分利用單片機(jī)有限的I/O資源,在本設(shè)計(jì)中是將P1口擴(kuò)展成一個(gè)或幾個(gè)8位并行口,在每一個(gè)八位口上接入8個(gè)發(fā)光二極管做為輸出,二極管是做開關(guān)量來使用的,在這里設(shè)計(jì)了跑馬燈和流水燈程序,做到對(duì)開關(guān)量的開斷控制;配合開關(guān)量的控制筆者設(shè)計(jì)了一個(gè)共陽LED數(shù)碼管,用來顯示當(dāng)前發(fā)光二極管發(fā)亮的序號(hào),做到更加直觀的雙重控制效果,然后再將P0口通過D/A轉(zhuǎn)換器和一放大器輸出一個(gè)模擬信號(hào),其結(jié)果可以通過示波器看出。這樣整個(gè)系統(tǒng)即有了數(shù)字信號(hào)輸出和模擬信號(hào)輸出,也有數(shù)碼管顯示功能,實(shí)用性能大提高了。2、 基于89C51的系統(tǒng)硬件設(shè)計(jì)2.1 并行口的擴(kuò)展的電路設(shè)計(jì) 眾所周知,C51系列的單片機(jī)都有四個(gè)I/O口(P0、P1、P2、P3),那么AT89C51也不例外,但我們通常僅僅使用P1口作為并行口,而令其余口(P2、P3)處于閑置狀態(tài),所以這次設(shè)計(jì),我們就是使用閑置不用的P3口做為選能信號(hào)線來將P1口進(jìn)行并行口擴(kuò)展。 (1) 種方式的并行口擴(kuò)展優(yōu)點(diǎn) 連線簡(jiǎn)單; 不占用存儲(chǔ)器空間; (2) 編程也方便靈活。但也有很大的缺點(diǎn) 并行口擴(kuò)展能力有限,(如使用74LS573(74LS373)且不進(jìn)行驅(qū)動(dòng)處理,則最多可擴(kuò)展4個(gè)同樣類型的并行輸出端口,當(dāng)然還需要與之對(duì)應(yīng)的四個(gè)選通信號(hào)。) 如擴(kuò)展較多,選通信號(hào)占用并行口位數(shù)太多,例如欲擴(kuò)展8個(gè)并行輸出端口,則需要8個(gè)選能信號(hào),此時(shí),僅選能信號(hào)就占用了一個(gè)8位并行口,這對(duì)在I/O端口線有限的單片機(jī)系統(tǒng)中,如此浪費(fèi)資源的現(xiàn)象是不能容忍的。在本次的設(shè)計(jì)中,采用芯片74HC573(帶三態(tài)輸出的八進(jìn)制透明D型鎖存器)對(duì)P1口進(jìn)行了一個(gè)8位并行口的擴(kuò)展,選通信號(hào)選用P3口的P3.3引腳。原理圖如圖1所示:
標(biāo)簽: C51 單片機(jī) 并行口 擴(kuò)展設(shè)計(jì)
上傳時(shí)間: 2013-11-18
上傳用戶:dbs012280
蟲蟲下載站版權(quán)所有 京ICP備2021023401號(hào)-1