亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲(chóng)蟲(chóng)首頁(yè)| 資源下載| 資源專(zhuān)輯| 精品軟件
登錄| 注冊(cè)

更少腳位

  • 基于單片機(jī)的紅外門(mén)進(jìn)控制系統(tǒng)設(shè)計(jì)與制作(含源程序和原理圖)

    基于單片機(jī)的紅外門(mén)進(jìn)控制系統(tǒng)設(shè)計(jì)與制作:我們所做的創(chuàng)新實(shí)驗(yàn)項(xiàng)目“基于單片機(jī)的紅外門(mén)控系統(tǒng)”已基本完成,現(xiàn)將其工作原理簡(jiǎn)要說(shuō)明。該系統(tǒng)主要分為兩大部分:一是紅外傳感器部分。二是單片機(jī)計(jì)數(shù)顯示控制部分。基本電路圖如下:其中紅外傳感器部分我們采用紅外對(duì)管實(shí)現(xiàn),紅外對(duì)管平行放置,平常處于接收狀態(tài),經(jīng)比較器輸出低電平,當(dāng)有人經(jīng)過(guò)時(shí),紅外線(xiàn)被擋住,接收管接收不到紅外線(xiàn),經(jīng)比較器輸出高電平。這樣,當(dāng)有人經(jīng)過(guò)時(shí)便會(huì)產(chǎn)生一個(gè)電平的跳變。單片機(jī)控制部分主要是通過(guò)外部?jī)蓚€(gè)中斷判斷是否有人經(jīng)過(guò),如果有人經(jīng)過(guò),由于電平跳變的產(chǎn)生,進(jìn)入中斷服務(wù)程序,這里我們采用了兩對(duì)紅外傳感器接到兩個(gè)外部中斷口,中斷0作為入口,實(shí)現(xiàn)加1操作,中斷1作為出口,實(shí)現(xiàn)減1操作。另外,我們通過(guò)P0口控制室內(nèi)燈的亮暗,當(dāng)寄存器計(jì)數(shù)值為0時(shí),熄燈,不為0時(shí),燈亮。顯示部分,采用兩位數(shù)碼管動(dòng)態(tài)顯示,如有必要,可以很方便的擴(kuò)展為四位計(jì)數(shù)。精益求精!在實(shí)驗(yàn)過(guò)程中,我們走了非常多的彎路,做出來(lái)的東西根本不是自己想要的,我們本想做成室內(nèi)只有一個(gè)門(mén)的進(jìn)出計(jì)數(shù),原理已清楚,即在門(mén)的兩邊放置兩對(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í)際過(guò)程中,還是發(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)線(xiàn)上產(chǎn)品數(shù)量統(tǒng)計(jì)、公交車(chē)智能計(jì)數(shù)問(wèn)候(需添加語(yǔ)音芯片)、超市內(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

    上傳用戶(hù):tangsiyun

  • 萬(wàn)年歷算法

    公歷是全世界通用的歷法以地球繞太陽(yáng)的一周為一年一年365 天,分為12 個(gè)月1 3 5 7 8 10 12 月為31 天2 月為28 天其余月份為30 天事實(shí)上地球繞太陽(yáng)一周共365 天5 小時(shí)48 分46 秒比公歷一年多出5 小時(shí)48分46 秒為使年誤差不累積公歷年用閏年法來(lái)消除年誤差 由于每年多出5 小時(shí)48 分46 秒每4 年累計(jì)多出23小時(shí)15 分4 秒接近1 天天文學(xué)家就規(guī)定每4 年有一個(gè)閏年把2 月由28 天改為29 天凡是公歷年代能被4 整除的那一年就是閏年但是這樣一來(lái)每4 年又少了44 分56 秒為了更準(zhǔn)確地計(jì)時(shí)天文學(xué)家又規(guī)定凡能被100 整除的年份只有能被400 整除才是閏年即每400 年要減掉3 個(gè)閏年經(jīng)過(guò)這樣處理后實(shí)際上每400 年的誤差只有2 小時(shí)53 分20 秒已相當(dāng)準(zhǔn)確了。

    標(biāo)簽: 萬(wàn)年歷 算法

    上傳時(shí)間: 2014-12-28

    上傳用戶(hù):liufei

  • keil入門(mén)實(shí)例教程

    單片機(jī)開(kāi)發(fā)中除必要的硬件外,同樣離不開(kāi)軟件,我們寫(xiě)的匯編語(yǔ)言源程序要變?yōu)镃PU可以執(zhí)行的機(jī)器碼有兩種方法,一種是手工匯編,另一種是機(jī)器匯編,目前已極少使用手工匯編的方法了。機(jī)器匯編是通過(guò)匯編軟件將源程序變?yōu)闄C(jī)器碼,用于MCS-51 單片機(jī)的匯編軟件有早期的A51,隨著單片機(jī)開(kāi)發(fā)技術(shù)的不斷發(fā)展,從普遍使用匯編語(yǔ)言到逐漸使用高級(jí)語(yǔ)言開(kāi)發(fā),單片機(jī)的開(kāi)發(fā)軟件也在不斷發(fā)展,Keil 軟件是目前最流行開(kāi)發(fā)MCS-51 系列單片機(jī)的軟件,這從近年來(lái)各仿真機(jī)廠(chǎng)商紛紛宣布全面支持Keil 即可看出。Keil 提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(uVision)將這些部份組合在一起。運(yùn)行Keil 軟件需要Pentium 或以上的CPU,16MB或更多RAM、20M 以上空閑的硬盤(pán)空間、WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。掌握這一軟件的使用對(duì)于使用51 系列單片機(jī)的愛(ài)好者來(lái)說(shuō)是十分必要的,如果你使用C 語(yǔ)言編程,那么Keil 幾乎就是你的不二之選(目前在國(guó)內(nèi)你只能買(mǎi)到該軟件、而你買(mǎi)的仿真機(jī)也很可能只支持該軟件),即使不使用C 語(yǔ)言而僅用匯編語(yǔ)言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會(huì)令你事半功倍。我們將通過(guò)一些實(shí)例來(lái)學(xué)習(xí)Keil 軟件的使用,在這一部份我們將學(xué)習(xí)如何輸入源程序,建立工程、對(duì)工程進(jìn)行詳細(xì)的設(shè)置,以及如何將源程序變?yōu)槟繕?biāo)代碼。圖1 所示電路圖使用89C51 單片機(jī)作為主芯片,這種單片機(jī)性屬于MCS-51 系列,其內(nèi)部有4K 的FLASH ROM,可以反復(fù)擦寫(xiě),非常適于做實(shí)驗(yàn)。89C51 的P1 引腳上接8 個(gè)發(fā)光二極管,P3.2~P3.4 引腳上接4 個(gè)按鈕開(kāi)關(guān),我們的第一個(gè)任務(wù)是讓接在P1 引腳上的發(fā)光二極管依次循環(huán)點(diǎn)亮。 一、Keil 工程的建立首先啟動(dòng)Keil 軟件的集成開(kāi)發(fā)環(huán)境,這里假設(shè)讀者已正確安裝了該軟件,可以從桌面上直接雙擊uVision 的圖標(biāo)以啟動(dòng)該軟件。UVison啟動(dòng)后,程序窗口的左邊有一個(gè)工程管理窗口,該窗口有3 個(gè)標(biāo)簽,分別是Files、Regs、和Books,這三個(gè)標(biāo)簽頁(yè)分別顯示當(dāng)前項(xiàng)目的文件結(jié)構(gòu)、CPU 的寄存器及部份特殊功能寄存器的值(調(diào)試時(shí)才出現(xiàn))和所選CPU 的附加說(shuō)明文件,如果是第一次啟動(dòng)Keil,那么這三個(gè)標(biāo)簽頁(yè)全是空的。

    標(biāo)簽: keil 教程

    上傳時(shí)間: 2013-12-26

    上傳用戶(hù):liulinshan2010

  • 工程師單片機(jī)學(xué)習(xí)經(jīng)驗(yàn)技巧

    很多單片機(jī)初學(xué)者與我交流時(shí)總說(shuō)的一句話(huà)是我現(xiàn)在是單片機(jī)初學(xué)者,我怎樣才能更快的學(xué)好單片機(jī),我該從哪方便入手。對(duì)于這個(gè)問(wèn)題,現(xiàn)在就我自己如何學(xué)單片機(jī),如何入門(mén),如何熟練談?wù)勏敕ā? 先說(shuō)單片機(jī),現(xiàn)在用的比較多的以51為內(nèi)核的8位單片機(jī)(考慮到成本及引腳資源在實(shí)際開(kāi)發(fā)中用的51單片機(jī)型號(hào)不一),它的學(xué)習(xí)資料非常多,且學(xué)習(xí)成本非常低,可能有些初學(xué)者會(huì)說(shuō)企業(yè)里用的不是51單片機(jī),更多的是松翰、義隆什么,但是我想說(shuō)的是那些單片機(jī)的輔助開(kāi)發(fā)工具你有嗎。51單片機(jī)對(duì)于智能電子技術(shù)的入門(mén)學(xué)習(xí)是非常有優(yōu)勢(shì),成本低,開(kāi)發(fā)簡(jiǎn)單,一線(xiàn)下載程序,ARM太神秘,PLC太高貴,想來(lái)想去還是51,曾經(jīng)有過(guò)AVR和PIC,但是現(xiàn)在51也不賴(lài)。 那怎樣才能更快更好的學(xué)好單片機(jī)呢? 單片機(jī)作為集電子技術(shù)與計(jì)算機(jī)編程技術(shù)為一體是一項(xiàng)非常重視動(dòng)手實(shí)踐的科目,如果你是單片機(jī)高手,那么說(shuō)明你也是計(jì)算機(jī)編程和電子技術(shù)高手。

    標(biāo)簽: 工程師 單片機(jī)學(xué)習(xí) 經(jīng)驗(yàn)

    上傳時(shí)間: 2014-03-24

    上傳用戶(hù):丶灬夏天

  • 微型計(jì)算機(jī)總線(xiàn)知識(shí)

    計(jì)算機(jī)部件要具有通用性,適應(yīng)不同系統(tǒng)與不同用戶(hù)的需求,設(shè)計(jì)必須模塊化。計(jì)算機(jī)部件產(chǎn)品(模塊)供應(yīng)出現(xiàn)多元化。模塊之間的聯(lián)接關(guān)系要標(biāo)準(zhǔn)化,使模塊具有通用性。模塊設(shè)計(jì)必須基于一種大多數(shù)廠(chǎng)商認(rèn)可的模塊聯(lián)接關(guān)系,即一種總線(xiàn)標(biāo)準(zhǔn)。總線(xiàn)的標(biāo)準(zhǔn)總線(xiàn)是一類(lèi)信號(hào)線(xiàn)的集合是模塊間傳輸信息的公共通道,通過(guò)它,計(jì)算機(jī)各部件間可進(jìn)行各種數(shù)據(jù)和命令的傳送。為使不同供應(yīng)商的產(chǎn)品間能夠互換,給用戶(hù)更多的選擇,總線(xiàn)的技術(shù)規(guī)范要標(biāo)準(zhǔn)化。總線(xiàn)的標(biāo)準(zhǔn)制定要經(jīng)周密考慮,要有嚴(yán)格的規(guī)定。總線(xiàn)標(biāo)準(zhǔn)(技術(shù)規(guī)范)包括以下幾部分:機(jī)械結(jié)構(gòu)規(guī)范:模塊尺寸、總線(xiàn)插頭、總線(xiàn)接插件以及按裝尺寸均有統(tǒng)一規(guī)定。功能規(guī)范:總線(xiàn)每條信號(hào)線(xiàn)(引腳的名稱(chēng))、功能以及工作過(guò)程要有統(tǒng)一規(guī)定。電氣規(guī)范:總線(xiàn)每條信號(hào)線(xiàn)的有效電平、動(dòng)態(tài)轉(zhuǎn)換時(shí)間、負(fù)載能力等。總線(xiàn)的發(fā)展情況S-100總線(xiàn):產(chǎn)生于1975年,第一個(gè)標(biāo)準(zhǔn)化總線(xiàn),為微計(jì)算機(jī)技術(shù)發(fā)展起到了推動(dòng)作用。IBM-PC個(gè)人計(jì)算機(jī)采用總線(xiàn)結(jié)構(gòu)(Industry Standard Architecture, ISA)并成為工業(yè)化的標(biāo)準(zhǔn)。先后出現(xiàn)8位ISA總線(xiàn)、16位ISA總線(xiàn)以及后來(lái)兼容廠(chǎng)商推出的EISA(Extended ISA)32位ISA總線(xiàn)。為了適應(yīng)微處理器性能的提高及I/O模塊更高吞吐率的要求,出現(xiàn)了VL-Bus(VESA Local Bus)和PCI(Peripheral Component Interconnect,PCI)總線(xiàn)。適合小型化要求的PCMCIA(Personal Computer Memory Card International Association)總線(xiàn),用于筆記本計(jì)算機(jī)的功能擴(kuò)展。總線(xiàn)的指標(biāo)計(jì)算機(jī)主機(jī)性能迅速提高,各功能模塊性能也要相應(yīng)提高,這對(duì)總線(xiàn)性能提出更高的要求。總線(xiàn)主要技術(shù)指標(biāo)有幾方面:總線(xiàn)寬度:一次操作可以傳輸?shù)臄?shù)據(jù)位數(shù),如S100為8位,ISA為16位,EISA為32位,PCI-2可達(dá)64位。總線(xiàn)寬度不會(huì)超過(guò)微處理器外部數(shù)據(jù)總線(xiàn)的寬度。總數(shù)工作頻率:總線(xiàn)信號(hào)中有一個(gè)CLK時(shí)鐘,CLK越高每秒鐘傳輸?shù)臄?shù)據(jù)量越大。ISA、EISA為8MHz,PCI為33.3MHz, PCI-2可達(dá)達(dá)66.6MHz。單個(gè)數(shù)據(jù)傳輸周期:不同的傳輸方式,每個(gè)數(shù)據(jù)傳輸所用CLK周期數(shù)不同。ISA要2個(gè),PCI用1個(gè)CLK周期。這決定總線(xiàn)最高數(shù)據(jù)傳輸率。5. 總線(xiàn)的分類(lèi)與層次系統(tǒng)總線(xiàn):是微處理器芯片對(duì)外引線(xiàn)信號(hào)的延伸或映射,是微處理器與片外存儲(chǔ)器及I/0接口傳輸信息的通路。系統(tǒng)總線(xiàn)信號(hào)按功能可分為三類(lèi):地址總線(xiàn)(Where):指出數(shù)據(jù)的來(lái)源與去向。地址總線(xiàn)的位數(shù)決定了存儲(chǔ)空間的大小。系統(tǒng)總線(xiàn):數(shù)據(jù)總線(xiàn)(What)提供模塊間傳輸數(shù)據(jù)的路徑,數(shù)據(jù)總線(xiàn)的位數(shù)決定微處理器結(jié)構(gòu)的復(fù)雜度及總體性能。控制總線(xiàn)(When):提供系統(tǒng)操作所必需的控制信號(hào),對(duì)操作過(guò)程進(jìn)行控制與定時(shí)。擴(kuò)充總線(xiàn):亦稱(chēng)設(shè)備總線(xiàn),用于系統(tǒng)I/O擴(kuò)充。與系統(tǒng)總線(xiàn)工作頻率不同,經(jīng)接口電路對(duì)系統(tǒng)總統(tǒng)信號(hào)緩沖、變換、隔離,進(jìn)行不同層次的操作(ISA、EISA、MCA)局部總線(xiàn):擴(kuò)充總線(xiàn)不能滿(mǎn)足高性能設(shè)備(圖形、視頻、網(wǎng)絡(luò))接口的要求,在系統(tǒng)總線(xiàn)與擴(kuò)充總線(xiàn)之間插入一層總線(xiàn)。由于它經(jīng)橋接器與系統(tǒng)總線(xiàn)直接相連,因此稱(chēng)之為局部總線(xiàn)(PCI)。

    標(biāo)簽: 微型計(jì)算機(jī) 總線(xiàn)

    上傳時(shí)間: 2013-11-09

    上傳用戶(hù):nshark

  • AVR Studio 幫助文件中文翻譯

    AVR Studio 幫助文件中文翻譯,網(wǎng)友翻譯的AVR Studio軟件里面的幫助文件。轉(zhuǎn)自“我們的AVR”網(wǎng)站,在此表示感謝。 圖元文件(metafile) 以.emf為擴(kuò)展名的文件。是下面各種結(jié)構(gòu)的基本組成部分,可以用來(lái)讓AVR LCD編輯器設(shè)計(jì)軟件模擬顯示器。它可以是一個(gè)段或者一個(gè)圖像。您不能直接用AVR LCD編輯器生成一個(gè)這樣的圖元文件。但是可以使用第三方軟件。Companion Software的Metafile Companion和Microsoft Visio 就是兩個(gè)讓用戶(hù)自己定義圖元文件的軟件。在市場(chǎng)上有好多更簡(jiǎn)單,更便宜的轉(zhuǎn)換軟件支持gif,jpeg,bmp等的文件轉(zhuǎn)換成.emf文件。 (例如:www.harmware.com 網(wǎng)站上的Batch Thumb 、和www.irfanview.com網(wǎng)站上的IrfanView). 段(segment)這是軟件模擬顯示器的一部分。用LCD編輯器您可以分配所有的段對(duì)應(yīng)到實(shí)際的LCD寄存器的位上。段被存成.emf文件。圖像(image)被用作背景圖像和外圍圖像的圖元文件。充當(dāng)所有段的布景。這些對(duì)象是“靜態(tài)”的,不對(duì)任何LCD寄存器值有反映。圖像也被存成.emf文件。 模擬顯示器(display)多層的元文件和圖像的組合。它包含LCD 寄存器的分配信息。用XML格式保存成.dis文件。組(group)為了簡(jiǎn)化設(shè)計(jì),需要頻繁的保存使用段。組就是同一層中一些段(圖元文件)的集合。它的設(shè)計(jì)沒(méi)有實(shí)際的限制,但是不能包括靜態(tài)圖像(背景/前景)。最典型的組就是7段碼數(shù)字字型。組只是理論的設(shè)計(jì)工具,在最終的模擬顯示器文件中是沒(méi)有組存在的。組用擴(kuò)展名為.pri 的文件保存。 對(duì)象(object)對(duì)包括以上各個(gè)元件的各種事物的稱(chēng)謂的術(shù)語(yǔ)。模擬顯示器文件(display file)以.dis為擴(kuò)展名的XML類(lèi)型的文件。包含了所有的關(guān)于顯示器的信息。

    標(biāo)簽: Studio AVR 翻譯

    上傳時(shí)間: 2013-10-31

    上傳用戶(hù):paladin

  • 匯編+保護(hù)模式+教程

    九.輸入/輸出保護(hù)為了支持多任務(wù),80386不僅要有效地實(shí)現(xiàn)任務(wù)隔離,而且還要有效地控制各任務(wù)的輸入/輸出,避免輸入/輸出沖突。本文將介紹輸入輸出保護(hù)。 這里下載本文源代碼。 <一>輸入/輸出保護(hù)80386采用I/O特權(quán)級(jí)IPOL和I/O許可位圖的方法來(lái)控制輸入/輸出,實(shí)現(xiàn)輸入/輸出保護(hù)。 1.I/O敏感指令輸入輸出特權(quán)級(jí)(I/O Privilege Level)規(guī)定了可以執(zhí)行所有與I/O相關(guān)的指令和訪(fǎng)問(wèn)I/O空間中所有地址的最外層特權(quán)級(jí)。IOPL的值在如下圖所示的標(biāo)志寄存器中。 標(biāo)  志寄存器 BIT31—BIT18 BIT17 BIT16 BIT15 BIT14 BIT13—BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 00000000000000 VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF I/O許可位圖規(guī)定了I/O空間中的哪些地址可以由在任何特權(quán)級(jí)執(zhí)行的程序所訪(fǎng)問(wèn)。I/O許可位圖在任務(wù)狀態(tài)段TSS中。 I/O敏感指令 指令 功能 保護(hù)方式下的執(zhí)行條件 CLI 清除EFLAGS中的IF位 CPL<=IOPL STI 設(shè)置EFLAGS中的IF位 CPL<=IOPL IN 從I/O地址讀出數(shù)據(jù) CPL<=IOPL或I/O位圖許可 INS 從I/O地址讀出字符串 CPL<=IOPL或I/O位圖許可 OUT 向I/O地址寫(xiě)數(shù)據(jù) CPL<=IOPL或I/O位圖許可 OUTS 向I/O地址寫(xiě)字符串 CPL<=IOPL或I/O位圖許可 上表所列指令稱(chēng)為I/O敏感指令,由于這些指令與I/O有關(guān),并且只有在滿(mǎn)足所列條件時(shí)才可以執(zhí)行,所以把它們稱(chēng)為I/O敏感指令。從表中可見(jiàn),當(dāng)前特權(quán)級(jí)不在I/O特權(quán)級(jí)外層時(shí),可以正常執(zhí)行所列的全部I/O敏感指令;當(dāng)特權(quán)級(jí)在I/O特權(quán)級(jí)外層時(shí),執(zhí)行CLI和STI指令將引起通用保護(hù)異常,而其它四條指令是否能夠被執(zhí)行要根據(jù)訪(fǎng)問(wèn)的I/O地址及I/O許可位圖情況而定(在下面論述),如果條件不滿(mǎn)足而執(zhí)行,那么將引起出錯(cuò)碼為0的通用保護(hù)異常。 由于每個(gè)任務(wù)使用各自的EFLAGS值和擁有自己的TSS,所以每個(gè)任務(wù)可以有不同的IOPL,并且可以定義不同的I/O許可位圖。注意,這些I/O敏感指令在實(shí)模式下總是可執(zhí)行的。 2.I/O許可位圖如果只用IOPL限制I/O指令的執(zhí)行是很不方便的,不能滿(mǎn)足實(shí)際要求需要。因?yàn)檫@樣做會(huì)使得在特權(quán)級(jí)3執(zhí)行的應(yīng)用程序要么可訪(fǎng)問(wèn)所有I/O地址,要么不可訪(fǎng)問(wèn)所有I/O地址。實(shí)際需要與此剛好相反,只允許任務(wù)甲的應(yīng)用程序訪(fǎng)問(wèn)部分I/O地址,只允許任務(wù)乙的應(yīng)用程序訪(fǎng)問(wèn)另一部分I/O地址,以避免任務(wù)甲和任務(wù)乙在訪(fǎng)問(wèn)I/O地址時(shí)發(fā)生沖突,從而避免任務(wù)甲和任務(wù)乙使用使用獨(dú)享設(shè)備時(shí)發(fā)生沖突。 因此,在IOPL的基礎(chǔ)上又采用了I/O許可位圖。I/O許可位圖由二進(jìn)制位串組成。位串中的每一位依次對(duì)應(yīng)一個(gè)I/O地址,位串的第0位對(duì)應(yīng)I/O地址0,位串的第n位對(duì)應(yīng)I/O地址n。如果位串中的第位為0,那么對(duì)應(yīng)的I/O地址m可以由在任何特權(quán)級(jí)執(zhí)行的程序訪(fǎng)問(wèn);否則對(duì)應(yīng)的I/O地址m只能由在IOPL特權(quán)級(jí)或更內(nèi)層特權(quán)級(jí)執(zhí)行的程序訪(fǎng)問(wèn)。如果在I/O外層特權(quán)級(jí)執(zhí)行的程序訪(fǎng)問(wèn)位串中位值為1的位所對(duì)應(yīng)的I/O地址,那么將引起通用保護(hù)異常。 I/O地址空間按字節(jié)進(jìn)行編址。一條I/O指令最多可涉及四個(gè)I/O地址。在需要根據(jù)I/O位圖決定是否可訪(fǎng)問(wèn)I/O地址的情況下,當(dāng)一條I/O指令涉及多個(gè)I/O地址時(shí),只有這多個(gè)I/O地址所對(duì)應(yīng)的I/O許可位圖中的位都為0時(shí),該I/O指令才能被正常執(zhí)行,如果對(duì)應(yīng)位中任一位為1,就會(huì)引起通用保護(hù)異常。 80386支持的I/O地址空間大小是64K,所以構(gòu)成I/O許可位圖的二進(jìn)制位串最大長(zhǎng)度是64K個(gè)位,即位圖的有效部分最大為8K字節(jié)。一個(gè)任務(wù)實(shí)際需要使用的I/O許可位圖大小通常要遠(yuǎn)小于這個(gè)數(shù)目。 當(dāng)前任務(wù)使用的I/O許可位圖存儲(chǔ)在當(dāng)前任務(wù)TSS中低端的64K字節(jié)內(nèi)。I/O許可位圖總以字節(jié)為單位存儲(chǔ),所以位串所含的位數(shù)總被認(rèn)為是8的倍數(shù)。從前文中所述的TSS格式可見(jiàn),TSS內(nèi)偏移66H的字確定I/O許可位圖的開(kāi)始偏移。由于I/O許可位圖最長(zhǎng)可達(dá)8K字節(jié),所以開(kāi)始偏移應(yīng)小于56K,但必須大于等于104,因?yàn)門(mén)SS中前104字節(jié)為T(mén)SS的固定格式,用于保存任務(wù)的狀態(tài)。 1.I/O訪(fǎng)問(wèn)許可檢查細(xì)節(jié)保護(hù)模式下處理器在執(zhí)行I/O指令時(shí)進(jìn)行許可檢查的細(xì)節(jié)如下所示。 (1)若CPL<=IOPL,則直接轉(zhuǎn)步驟(8);(2)取得I/O位圖開(kāi)始偏移;(3)計(jì)算I/O地址對(duì)應(yīng)位所在字節(jié)在I/O許可位圖內(nèi)的偏移;(4)計(jì)算位偏移以形成屏蔽碼值,即計(jì)算I/O地址對(duì)應(yīng)位在字節(jié)中的第幾位;(5)把字節(jié)偏移加上位圖開(kāi)始偏移,再加1,所得值與TSS界限比較,若越界,則產(chǎn)生出錯(cuò)碼為0的通用保護(hù)故障;(6)若不越界,則從位圖中讀對(duì)應(yīng)字節(jié)及下一個(gè)字節(jié);(7)把讀出的兩個(gè)字節(jié)與屏蔽碼進(jìn)行與運(yùn)算,若結(jié)果不為0表示檢查未通過(guò),則產(chǎn)生出錯(cuò)碼為0的通用保護(hù)故障;(8)進(jìn)行I/O訪(fǎng)問(wèn)。設(shè)某一任務(wù)的TSS段如下: TSSSEG                  SEGMENT PARA USE16                        TSS     <>             ;TSS低端固定格式部分                        DB      8 DUP(0)       ;對(duì)應(yīng)I/O端口00H—3FH                        DB      10000000B      ;對(duì)應(yīng)I/O端口40H—47H                        DB      01100000B      ;對(duì)用I/O端口48H—4FH                        DB      8182 DUP(0ffH) ;對(duì)應(yīng)I/O端口50H—0FFFFH                        DB      0FFH           ;位圖結(jié)束字節(jié)TSSLen                  =       $TSSSEG                  ENDS 再假設(shè)IOPL=1,CPL=3。那么如下I/O指令有些能正常執(zhí)行,有些會(huì)引起通用保護(hù)異常:                         in      al,21h  ;(1)正常執(zhí)行                        in      al,47h  ;(2)引起異常                        out     20h,al  ;(3)正常實(shí)行                        out     4eh,al  ;(4)引起異常                        in      al,20h  ;(5)正常執(zhí)行                        out     20h,eax ;(6)正常執(zhí)行                        out     4ch,ax  ;(7)引起異常                        in      ax,46h  ;(8)引起異常                        in      eax,42h ;(9)正常執(zhí)行 由上述I/O許可檢查的細(xì)節(jié)可見(jiàn),不論是否必要,當(dāng)進(jìn)行許可位檢查時(shí),80386總是從I/O許可位圖中讀取兩個(gè)字節(jié)。目的是為了盡快地執(zhí)行I/O許可檢查。一方面,常常要讀取I/O許可位圖的兩個(gè)字節(jié)。例如,上面的第(8)條指令要對(duì)I/O位圖中的兩個(gè)位進(jìn)行檢查,其低位是某個(gè)字節(jié)的最高位,高位是下一個(gè)字節(jié)的最低位。可見(jiàn)即使只要檢查兩個(gè)位,也可能需要讀取兩個(gè)字節(jié)。另一方面,最多檢查四個(gè)連續(xù)的位,即最多也只需讀取兩個(gè)字節(jié)。所以每次要讀取兩個(gè)字節(jié)。這也是在判別是否越界時(shí)再加1的原因。為此,為了避免在讀取I/O許可位圖的最高字節(jié)時(shí)產(chǎn)生越界,必須在I/O許可位圖的最后填加一個(gè)全1的字節(jié),即0FFH。此全1的字節(jié)應(yīng)填加在最后一個(gè)位圖字節(jié)之后,TSS界限范圍之前,即讓填加的全1字節(jié)在TSS界限之內(nèi)。 I/O許可位圖開(kāi)始偏移加8K所得的值與TSS界限值二者中較小的值決定I/O許可位圖的末端。當(dāng)TSS的界限大于I/O許可位圖開(kāi)始偏移加8K時(shí),I/O許可位圖的有效部分就有8K字節(jié),I/O許可檢查全部根據(jù)全部根據(jù)該位圖進(jìn)行。當(dāng)TSS的界限不大于I/O許可位圖開(kāi)始偏移加8K時(shí),I/O許可位圖有效部分就不到8K字節(jié),于是對(duì)較小I/O地址訪(fǎng)問(wèn)的許可檢查根據(jù)位圖進(jìn)行,而對(duì)較大I/O地址訪(fǎng)問(wèn)的許可檢查總被認(rèn)為不可訪(fǎng)問(wèn)而引起通用保護(hù)故障。因?yàn)檫@時(shí)會(huì)發(fā)生字節(jié)越界而引起通用保護(hù)異常,所以在這種情況下,可認(rèn)為不足的I/O許可位圖的高端部分全為1。利用這個(gè)特點(diǎn),可大大節(jié)約TSS中I/O許可位圖占用的存儲(chǔ)單元,也就大大減小了TSS段的長(zhǎng)度。 <二>重要標(biāo)志保護(hù)輸入輸出的保護(hù)與存儲(chǔ)在標(biāo)志寄存器EFLAGS中的IOPL密切相關(guān),顯然不能允許隨便地改變IOPL,否則就不能有效地實(shí)現(xiàn)輸入輸出保護(hù)。類(lèi)似地,對(duì)EFLAGS中的IF位也必須加以保護(hù),否則CLI和STI作為敏感指令對(duì)待是無(wú)意義的。此外,EFLAGS中的VM位決定著處理器是否按虛擬8086方式工作。 80386對(duì)EFLAGS中的這三個(gè)字段的處理比較特殊,只有在較高特權(quán)級(jí)執(zhí)行的程序才能執(zhí)行IRET、POPF、CLI和STI等指令改變它們。下表列出了不同特權(quán)級(jí)下對(duì)這三個(gè)字段的處理情況。 不同特權(quán)級(jí)對(duì)標(biāo)志寄存器特殊字段的處理 特權(quán)級(jí) VM標(biāo)志字段 IOPL標(biāo)志字段 IF標(biāo)志字段 CPL=0 可變(初POPF指令外) 可變 可變 0  不變 不變 可變 CPL>IOPL 不變 不變 不變 從表中可見(jiàn),只有在特權(quán)級(jí)0執(zhí)行的程序才可以修改IOPL位及VM位;只能由相對(duì)于IOPL同級(jí)或更內(nèi)層特權(quán)級(jí)執(zhí)行的程序才可以修改IF位。與CLI和STI指令不同,在特權(quán)級(jí)不滿(mǎn)足上述條件的情況下,當(dāng)執(zhí)行POPF指令和IRET指令時(shí),如果試圖修改這些字段中的任何一個(gè)字段,并不引起異常,但試圖要修改的字段也未被修改,也不給出任何特別的信息。此外,指令POPF總不能改變VM位,而PUSHF指令所壓入的標(biāo)志中的VM位總為0。 <三>演示輸入輸出保護(hù)的實(shí)例(實(shí)例九)下面給出一個(gè)用于演示輸入輸出保護(hù)的實(shí)例。演示內(nèi)容包括:I/O許可位圖的作用、I/O敏感指令引起的異常和特權(quán)指令引起的異常;使用段間調(diào)用指令CALL通過(guò)任務(wù)門(mén)調(diào)用任務(wù),實(shí)現(xiàn)任務(wù)嵌套。 1.演示步驟實(shí)例演示的內(nèi)容比較豐富,具體演示步驟如下:(1)在實(shí)模式下做必要準(zhǔn)備后,切換到保護(hù)模式;(2)進(jìn)入保護(hù)模式的臨時(shí)代碼段后,把演示任務(wù)的TSS段描述符裝入TR,并設(shè)置演示任務(wù)的堆棧;(3)進(jìn)入演示代碼段,演示代碼段的特權(quán)級(jí)是0;(4)通過(guò)任務(wù)門(mén)調(diào)用測(cè)試任務(wù)1。測(cè)試任務(wù)1能夠順利進(jìn)行;(5)通過(guò)任務(wù)門(mén)調(diào)用測(cè)試任務(wù)2。測(cè)試任務(wù)2演示由于違反I/O許可位圖規(guī)定而導(dǎo)致通用保護(hù)異常;(6)通過(guò)任務(wù)門(mén)調(diào)用測(cè)試任務(wù)3。測(cè)試任務(wù)3演示I/O敏感指令如何引起通用保護(hù)異常;(7)通過(guò)任務(wù)門(mén)調(diào)用測(cè)試任務(wù)4。測(cè)試任務(wù)4演示特權(quán)指令如何引起通用保護(hù)異常;(8)從演示代碼轉(zhuǎn)臨時(shí)代碼,準(zhǔn)備返回實(shí)模式;(9)返回實(shí)模式,并作結(jié)束處理。

    標(biāo)簽: 匯編 保護(hù)模式 教程

    上傳時(shí)間: 2013-12-11

    上傳用戶(hù):nunnzhy

  • 6位8段數(shù)碼管驅(qū)動(dòng)電路及C語(yǔ)言驅(qū)動(dòng)程序

    6位LED顯示接口說(shuō)明:P0.0---P0.7  通過(guò)7406 驅(qū)動(dòng)LED的8個(gè)段;P2.0---P2.5  通過(guò)UN2003驅(qū)動(dòng)6個(gè)LED 的公共端

    標(biāo)簽: 8段數(shù)碼管 驅(qū)動(dòng)電路 C語(yǔ)言 驅(qū)動(dòng)程序

    上傳時(shí)間: 2013-10-26

    上傳用戶(hù):VRMMO

  • 基于CAN總線(xiàn)的智能尋位制造系統(tǒng)

    基于CAN總線(xiàn)的智能尋位制造系統(tǒng) 智能尋位制造系統(tǒng)的組成網(wǎng)絡(luò)化智能尋位制造系統(tǒng)的概念是將智能尋位,工藝規(guī)劃# 加工信息生成# 加工設(shè)備控制等分布于制造系統(tǒng)中不同物理位置的獨(dú)立單元! 借助實(shí)時(shí)控制網(wǎng)絡(luò)集成為一有機(jī)整體! 從而實(shí)現(xiàn)單元間的高速信息交換! 并通過(guò)管理計(jì)算機(jī)中的動(dòng)態(tài)調(diào)度軟件! 協(xié)調(diào)整個(gè)系統(tǒng)的高效運(yùn)行" 據(jù)此思路構(gòu)成的網(wǎng)絡(luò)化智能尋位制造系統(tǒng)的總體結(jié)構(gòu)如圖所示.

    標(biāo)簽: CAN 總線(xiàn) 制造系統(tǒng)

    上傳時(shí)間: 2013-11-13

    上傳用戶(hù):wdq1111

  • cx51編譯器用戶(hù)手冊(cè)

    本手冊(cè)講述對(duì)8051 的目標(biāo)環(huán)境,如何使用Cx51優(yōu)化C 編譯器編譯C 程序。Cx51 編譯器包可以用在所有的8051 系列處理器上,可以在WINDOWS 32 位命令行中執(zhí)行本手冊(cè)。假定你熟悉WINDOWS 操作系統(tǒng),知道如何編程8051 處理器并會(huì)用C 語(yǔ)言編程。注意本手冊(cè)用條件窗口來(lái)指明32 位WINDOWS 版本是WINDOWS95, WINDOWS98 ,WINDOWS ME ,INDOWS NT,WINDOWS 2000 或WINDWOS XP。如果你對(duì)C 編程有問(wèn)題,或者你想知道C 語(yǔ)言編程的更多信息。可參考16 頁(yè)的關(guān)于C語(yǔ)言的書(shū),手冊(cè)中討論的許多例子和描述是從WINDOWS 命令提示符下調(diào)用的。這對(duì)在一個(gè)集成環(huán)境如μVision2 中運(yùn)行Cx51 的情況是不適用的本手冊(cè)中的例子是通用的,以應(yīng)用到所有編程環(huán)境。

    標(biāo)簽: cx 51 編譯器 用戶(hù)手冊(cè)

    上傳時(shí)間: 2013-10-19

    上傳用戶(hù):zhanditian

主站蜘蛛池模板: 西和县| 永新县| 天镇县| 朝阳县| 五原县| 石门县| 涟源市| 康保县| 会泽县| 镇康县| 沅陵县| 廊坊市| 土默特左旗| 惠水县| 新疆| 封丘县| 武清区| 芜湖市| 山丹县| 屏边| 日喀则市| 同江市| 花垣县| 蒙阴县| 上高县| 右玉县| 潜江市| 苗栗县| 新宾| 黑河市| 闵行区| 宁波市| 柘荣县| 兴化市| 婺源县| 崇仁县| 灵武市| 中西区| 定安县| 鄂伦春自治旗| 海伦市|