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

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

固定電話

  • 基于中穎SH79F164單片機的電子血壓計應用

    基于中穎SH79F164單片機的電子血壓計應用:電子血壓計因具有無創性、操作簡單、攜帶方面等優點,目前得到廣泛的應用和推廣。無創檢測血壓的方法很多,如柯氏音法,測振法,超聲法、雙袖帶法、恒定袖帶法、逐拍跟蹤法、張力定測法和恒定容積法等。其中測振法就是我們常說的示波法,由于具有較好的抗干擾能力,能比較可靠地判斷血壓、實現血壓的自動檢測而成為無創血壓的主流。目前國內外大多數電子血壓計都采用示波法。示波法的原理同柯氏音法,也需要充氣袖套來阻斷動脈流,但在放氣過程中不是檢測柯氏音,而是檢測氣袖內氣體的振蕩波(測振法由此得名),這些振蕩波是袖帶與動脈耦合的結果,源于心血管周期內血管壁由于收縮舒張引起的壓力脈動。理論計算和實踐均證明此振蕩波的幅度有一定的規律,與動脈收縮壓、平均壓以及舒張壓有一定的函數關系。針對示波法,本文將詳細介紹基于中穎電子SH79F164 單片機的血壓計系統方案與軟硬件實現。 在硬件電路設計方面,筆者參考了大量的資料,最終選定SH79F164 單片機作為主控IC。其理由是SH79F164 內建資源豐富,既能節省大量外圍器件,又方便系統調試。SH79F164 內建資源主要有:可編程儀表放大器(PGA)、帶通濾波器、固定增益放大器、恒流源放大器、10 位A/D 轉換器、時基定時器(RTC)。硬件部分構成:壓力傳感器、SH79F164 單片機、LCD、袖套、充氣泵、放氣閥、按鍵等(見圖3)。

    標簽: F164 164 79F SH

    上傳時間: 2013-10-23

    上傳用戶:muhongqing

  • 單片機音樂中音調和節拍的確定方法

    單片機音樂中音調和節拍的確定方法:調號-音樂上指用以確定樂曲主音高度的符號。很明顯一個八度就有12個半音。A、B、C、D、E、F、G。經過聲學家的研究,全世界都用這些字母來表示固定的音高。比如,A這個音,標準的音高為每秒鐘振動440周。 升C調:1=#C,也就是降D調:1=BD;277(頻率)升D調:1=#D,也就是降E調:1=BE;311升F調:1=#F,也就是降G調:1=BG;369升G調:1=#G,也就是降A調:1=BA;415升A調:1=#A,也就是降B調:1=BB。466,C 262   #C277   D 294   #D(bE)311  E 330   F 349   #F369   G 392  #G415A 440.    #A466    B 494 所謂1=A,就是說,這首歌曲的“導”要唱得同A一樣高,人們也把這首歌曲叫做A調歌曲,或叫“唱A調”。1=C,就是說,這首歌曲的“導”要唱得同C一樣高,或者說“這歌曲唱C調”。同樣是“導”,不同的調唱起來的高低是不一樣的。各調的對應的標準頻率為: 單片機演奏音樂時音調和節拍的確定方法 經常看到一些剛學單片機的朋友對單片機演奏音樂比較有興趣,本人也曾是這樣。在此,本人將就這方面的知識做一些簡介,但愿能對單片機演奏音樂比較有興趣而又不知其解的朋友能有所啟迪。 一般說來,單片機演奏音樂基本都是單音頻率,它不包含相應幅度的諧波頻率,也就是說不能象電子琴那樣能奏出多種音色的聲音。因此單片機奏樂只需弄清楚兩個概念即可,也就是“音調”和“節拍”。音調表示一個音符唱多高的頻率,節拍表示一個音符唱多長的時間。 在音樂中所謂“音調”,其實就是我們常說的“音高”。在音樂中常把中央C上方的A音定為標準音高,其頻率f=440Hz。當兩個聲音信號的頻率相差一倍時,也即f2=2f1時,則稱f2比f1高一個倍頻程, 在音樂中1(do)與 ,2(來)與 ……正好相差一個倍頻程,在音樂學中稱它相差一個八度音。在一個八度音內,有12個半音。以1—i八音區為例, 12個半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。這12個音階的分度基本上是以對數關系來劃分的。如果我們只要知道了這十二個音符的音高,也就是其基本音調的頻率,我們就可根據倍頻程的關系得到其他音符基本音調的頻率。 知道了一個音符的頻率后,怎樣讓單片機發出相應頻率的聲音呢?一般說來,常采用的方法就是通過單片機的定時器定時中斷,將單片機上對應蜂鳴器的I/O口來回取反,或者說來回清零,置位,從而讓蜂鳴器發出聲音,為了讓單片機發出不同頻率的聲音,我們只需將定時器予置不同的定時值就可實現。那么怎樣確定一個頻率所對應的定時器的定時值呢?以標準音高A為例:   A的頻率f = 440 Hz,其對應的周期為:T = 1/ f = 1/440 =2272μs 由上圖可知,單片機上對應蜂鳴器的I/O口來回取反的時間應為:t = T/2 = 2272/2 = 1136μs這個時間t也就是單片機上定時器應有的中斷觸發時間。一般情況下,單片機奏樂時,其定時器為工作方式1,它以振蕩器的十二分頻信號為計數脈沖。設振蕩器頻率為f0,則定時器的予置初值由下式來確定:    t = 12 *(TALL – THL)/ f0 式中TALL = 216 = 65536,THL為定時器待確定的計數初值。因此定時器的高低計數器的初值為:     TH = THL / 256 = ( TALL – t* f0/12) / 256    TL = THL % 256 = ( TALL – t* f0/12) %256  將t=1136μs代入上面兩式(注意:計算時應將時間和頻率的單位換算一致),即可求出標準音高A在單片機晶振頻率f0=12Mhz,定時器在工作方式1下的定時器高低計數器的予置初值為 :    TH440Hz = (65536 – 1136 * 12/12) /256 = FBH    TL440Hz = (65536 – 1136 * 12/12)%256 = 90H根據上面的求解方法,我們就可求出其他音調相應的計數器的予置初值。 音符的節拍我們可以舉例來說明。在一張樂譜中,我們經常會看到這樣的表達式,如1=C  、1=G …… 等等,這里1=C,1=G表示樂譜的曲調,和我們前面所談的音調有很大的關聯, 、 就是用來表示節拍的。以 為例加以說明,它表示樂譜中以四分音符為節拍,每一小結有三拍。比如:      其中1 、2 為一拍,3、4、5為一拍,6為一拍共三拍。1 、2的時長為四分音符的一半,即為八分音符長,3、4的時長為八分音符的一半,即為十六分音符長,5的時長為四分音符的一半,即為八分音符長,6的時長為四分音符長。那么一拍到底該唱多長呢?一般說來,如果樂曲沒有特殊說明,一拍的時長大約為400—500ms 。我們以一拍的時長為400ms為例,則當以四分音符為節拍時,四分音符的時長就為400ms,八分音符的時長就為200ms,十六分音符的時長就為100ms。可見,在單片機上控制一個音符唱多長可采用循環延時的方法來實現。首先,我們確定一個基本時長的延時程序,比如說以十六分音符的時長為基本延時時間,那么,對于一個音符,如果它為十六分音符,則只需調用一次延時程序,如果它為八分音符,則只需調用二次延時程序,如果它為四分音符,則只需調用四次延時程序,依次類推。通過上面關于一個音符音調和節拍的確定方法,我們就可以在單片機上實現演奏音樂了。具體的實現方法為:將樂譜中的每個音符的音調及節拍變換成相應的音調參數和節拍參數,將他們做成數據表格,存放在存儲器中,通過程序取出一個音符的相關參數,播放該音符,該音符唱完后,接著取出下一個音符的相關參數……,如此直到播放完畢最后一個音符,根據需要也可循環不停地播放整個樂曲。另外,對于樂曲中的休止符,一般將其音調參數設為FFH,FFH,其節拍參數與其他音符的節拍參數確定方法一致,樂曲結束用節拍參數為00H來表示。下面給出部分音符(三個八度音)的頻率以及以單片機晶振頻率f0=12Mhz,定時器在工作方式1下的定時器高低計數器的予置初值 : C調音符  頻率Hz 262 277 293 311 329 349 370 392 415 440 466 494TH/TL F88B F8F2 F95B F9B7 FA14 FA66 FAB9 FB03 FB4A FB8F FBCF FC0BC調音符 1 1# 2 2# 3 4 4# 5 5# 6 6# 7頻率Hz 523 553 586 621 658 697 739 783 830 879 931 987TH/TL FC43 FC78 FCAB FCDB FD08 FD33 FD5B FD81 FDA5 FDC7 FDE7 FE05C調音符  頻率Hz 1045 1106 1171 1241 1316 1393 1476 1563 1658 1755 1860 1971TH/TL FB21 FE3C FE55 FE6D FE84 FE99 FEAD FEC0 FE02 FEE3 FEF3 FF02

    標簽: 單片機 音調

    上傳時間: 2013-10-20

    上傳用戶:哈哈haha

  • 新穎實用的單片機雙積分A/D轉換電路和軟件

    新穎實用的單片機雙積分A/D轉換電路和軟件:摘 要: 通過對雙積分A/ D 轉換過程及其原理的分析,結合8031 單片機定時計數器的特點,設計出一種新的A/ D 轉換電路. 詳細介紹了這種轉換電路的硬件原理及工作過程,給出了實用的硬件電路與軟件設計框圖. 通過比較分析,可以看出這種A/ D 轉換電路性能價格比較高,軟件編程簡單,并且轉換速度和精度優于一般的A/ D 轉換電路. 這種設計思路為數模轉換器(A/ D) 的升級提高指出一個明確的方向.關鍵詞:單片機; 定時/ 計數器; A/ D 轉換; 雙積分  雙積分A/ D 及定時計數器原理:我們先分析雙積分A/ D 轉換的工作原理. 如圖1 所示,積分器先以固定時間T 對待測的輸入模擬電壓Vi 進行正向積分,積分電容C 積累的電荷為

    標簽: 單片機 雙積分 轉換電路 軟件

    上傳時間: 2014-01-18

    上傳用戶:hewenzhi

  • 單片機復位標志位的設置與應用研究

    設置復位標志位便于區分不同原因引發的復位,作為一種新技術被越來越多的新型單片機所采納。例如Philips公司的P87LPC700和 P89LPC900系列、Freescale公司(原Motorola半導體部)的MC68HC05系列和MC68HC08系列、Sunplus公司的 SPMC65系列、Microchip公司的PIC系列等,內部都設計了專門用于記錄各種復位標志的狀態寄存器。MC68HC08系列有一個復位狀態寄存器,負責記錄6種復位標志位:上電復位、引腳復位、看門狗復位、非法指令復位、非法地址復位和欠壓復位。SPMC65系列有一個系統控制寄存器,負責記錄5種復位標志位:上電復位、外部復位、看門狗復位、非法地址復位和欠壓復位。51兼容的P89LPC900系列有一個復位源寄存器,負責記錄6種復位標志位:欠壓復位、上電復位、外部復位、看門狗復位、軟件復位和UART收到間隔字符復位(主要作為進入ISP監控程序的途徑之一)。就連初學者很常用的 AT89S51/52和P89C52X2,也在其電源控制寄存器PCON中增設了一個上電標志位POF。1、 復位標志位的設置方法傳統的80C51單片機沒有設計復位標志位的記錄功能,這應該說是一種遺憾,那么能否通過一定的技術手段來彌補這個缺憾呢?這里給廣大80C51單片機用戶提供一種啟示和引導。實現復位標志位的記錄肯定需要一定的硬件電路支持,而這種電路的設計不存在固定模式。筆者利用一片MAX813L設計了一種支撐電路,如圖1所示,僅供讀者參考。

    標簽: 單片機復位 標志位 應用研究

    上傳時間: 2013-10-21

    上傳用戶:lhw888

  • 并行接口

    7.1 并行接口概述并行接口和串行接口的結構示意圖并行接口傳輸速率高,一般不要求固定格式,但不適合長距離數據傳輸7.2 可編程并行接口芯片82C55     7.2.1  8255的基本功能 8255具有2個獨立的8位I/O口(A口和B口)和2個獨立的4位I/O(C口上半部和C口下半部),提供TTL兼容的并行接口。作為輸入時提供三態緩沖器功能,作為輸出時提供數據鎖存功能。其中,A口具有雙向傳輸功能。8255有3種工作方式,方式0、方式1和方式2,能使用無條件、查詢和中斷等多種數據傳送方式完成CPU與I/O設備之間的數據交換。B口和C口的引腳具有達林頓復合晶體管驅動能力,在1.5V時輸出1mA電流,適于作輸出端口。C口除用做數據口外,當8255工作在方式1和方式2時,C口的部分引腳作為固定的聯絡信號線。

    標簽: 并行接口

    上傳時間: 2013-10-25

    上傳用戶:oooool

  • 用單片機內置比較器設計高精度A/D變換器

    Σ-ΔA/D技術具有高分辨率、高線性度和低成本的特點。本文基于TI公司的MSP430F1121單片機,介紹了采用內置比較器和外圍電路構成類似于Σ-△的高精度A/D實現方案,適合用于對溫度、壓力和電壓等緩慢變化信號的采集應用。 在各種A/D轉換器中,最常用是逐次逼近法(SAR)A/D,該類器件具有轉換時間固定且快速的特點,但難以顯著提高分辨率;積分型A/D 有較強的抗干擾能力,但轉換時間較長;過采樣Σ-ΔA/D由于其高分辨率,高線性度及低成本的特點,正得到越來越多的應用。根據這些特點,本文以TI公司的MSP430F1121單片機實現了一種類似于Σ-ΔA/D技術的高精度轉換器方案。 MSP430F1121是16位RISC結構的FLASH型單片機,該芯片有14個雙向I/O口并兼有中斷功能,一個16位定時器兼有計數和定時功能。I/O口輸出高電平時電壓接近Vcc,低電平時接近Vss,因此,一個I/O口可以看作一位DAC,具有PWM功能。 該芯片具有一個內置模擬電壓比較器,只須外接一只電阻和電容即可構成一個類似于Σ-Δ技術的高精度單斜率A/D。一般而言,比較器在使用過程中會受到兩種因素的影響,一種是比較器輸入端的偏置電壓的積累;另一種是兩個輸入端電壓接近到一程度時,輸出端會產生振蕩。 MSP430F1121單片機在比較器兩輸入端對應的單片機端口與片外輸入信號的連接線路保持不變的情況下,可通過軟件將比較器兩輸入端與對應的單片機端口的連接線路交換,并同時將比較器的輸出極性變換,這樣抵消了比較器的輸入端累積的偏置電壓。通過在內部將輸出連接到低通濾波器后,即使在比較器輸入端兩比較電壓非常接近,經過濾波后也不會出現輸出端的振蕩現象,從而消除了輸出端震蕩的問題。利用內置比較器實現高精度A/D圖1是一個可直接使用的A/D轉換方案,該方案是一個高精度的積分型A/D轉換器。其基本原理是用單一的I/O端口,執行1位的數模轉換,以比較器的輸出作反饋,來維持Vout與Vin相等。圖1:利用MSP430F1121實現的實用A/D轉換器電路方案。

    標簽: 用單片機 內置 比較器 變換器

    上傳時間: 2013-11-10

    上傳用戶:lliuhhui

  • 存儲器接口

    6.1  存儲器概述1、存儲器定義      在微機系統中凡能存儲程序和數據的部件統稱為存儲器。2、存儲器分類             微機系統中的存儲器分為內存和外存兩類。3、內存儲器的組成      微機系統中的存儲器由半導體存儲器芯片組成。     單片機內部有存儲器,當單片機內部的存儲器不夠用時,可以外擴存儲器。外擴的存儲器就是由半導體存儲器芯片組成的。     當用半導體存儲器芯片組成內存時必須滿足個要求:①每個存儲單元一定要有8個位。②存儲單元的個數滿足系統要求。注意:內存的容量是指它所含存儲單元的個數(每個存儲單元一定要有8個位,可以存儲8位二進制信息)。6.2  半導體存儲器由于集成工藝水平的限制,一個半導體存儲器芯片上所集成的單元個數和每個單元的位數有限,用它構成內存時必須滿足:內存容量和一個存儲單元有8個位的要求,因此內存常常由多個半導體存儲器芯片構成。      半導體存儲器芯片的存儲容量是指其上所含的基本存儲電路的個數,用單元個數×位數表示。掌握:① 已知內存容量和半導體存儲器芯片的容量,求用半導體存儲器芯片構成內存時需要的芯片個數。② 內存的容量=末地址—首地址+1     半導體存儲器芯片分成ROM和RAM兩類。6.2.1    ROM芯片6.2.2    RAM芯片6.3 MCS-51單片機存儲器擴展 在微機系統中存儲器是必不可少。MCS51系列單片機內部的存儲器不夠用時需要外擴半導體存儲器芯片,外擴的半導體存儲器芯片與MCS51系列單片機通過三總線交換信息。二者連接時必須考慮如下問題:1.二者地址線、數據線、控制線的連接。2.工作速度的匹配。CPU在取指令和存儲器讀或寫操作時,是有固定時序的,用戶要根據這些來確定對存儲器存取速度的要求,或在存儲器已經確定的情況下,考慮是否需要Tw周期,以及如何實現。3.片選信號的產生。目前生產的存儲器芯片,單片的容量仍然是有限的,通常總是要由許多片才能組成一個存儲器,這里就有一個如何產生片選信號的問題。4.CPU的驅動能力 。在設計CPU芯片時,一般考慮其輸出線的直流負載能力,為帶一個TTL負載。現在的存儲器一般都為MOS電路,直流負載很小,主要的負載是電容負載,故在小型系統中,CPU是可以直接與存儲器相連的,而較大的系統中,若CPU的負載能力不能滿足要求,可以(就要考慮CPU能否帶得動,需要時就要加上緩沖器,)由緩沖器的輸出再帶負載。6.3.1    ROM芯片的擴展6.3.2    RAM芯片的擴展                  

    標簽: 存儲器接口

    上傳時間: 2013-11-22

    上傳用戶:moerwang

  • 分時操作系統思想在單片機編程中的實現

    作為嵌入式系統主控單元——單片機,其軟件往往是一個微觀的實時操作系統,且大部分是為某種應用而專門設計的。系統程序有實時過程控制或實時信息處理的能力,要求能夠及時響應隨機發生的外部事件并對該事件做出快速處理。而分時操作系統卻是把CPU的時間劃分成長短基本相同的時間區間,即“時間片”,通過操作系統的管理,把這些時間片依次輪流地分配給各個用戶使用。如果某個作業在時間片結束之前,整個任務還沒有完成,那么該作業就被暫停下來,放棄CPU,等待下一輪循環再繼續做。此時CPU又分配給另一個作業去使用。由于計算機的處理速度很快,只要時間片的間隔取得適當,那么一個用戶作業從用完分配給它的一個時間片到獲得下一個CPU時間片,中間有所“停頓”;但用戶察覺不出來,好像整個系統全由它“獨占”似的。分時操作系統主要具有以下3個特點:① 多路性。用戶通過各自的終端,可以同時使用一個系統。② 及時性。用戶提出的各種要求,能在較短或可容忍的時間內得到響應和處理。③ 獨占性。在分時系統中,雖然允許多個用戶同時使用一個CPU,但用戶之間操作獨立,互不干涉。分時操作系統主要是針對小型機以上的計算機提出的。一般而言,微處理器(MPU)驅動的通用計算機,系統設計人員對每一臺的最終具體應用都是不得而知的,因此,在價格允許的情況下,硬件設計務求CPU時鐘盡可能的快;計算及管理能力盡可能的強;程序和數據存儲器的容量盡可能的大;各種計算機外設的配接盡可能的詳盡等等,特別是采用分時操作系統的機器,因為是一機多用戶的管理系統,它的要求就更高了。相對而言,微控制器(MCU)俗稱單片機,是一個單片集成系統,它將這些或那些計算機所需的外設,諸如程序和數據存儲器、端口以及有關的子系統集成到一片芯片上。從硬件上,單片機系統與采用分時操作系統的計算機系統是無法比擬的。但是,在單片機系統的設計中,設計人員對其最終具體應用是一清二楚的,它的使用環境相對是單一固定的。所控制的過程的可預見性為分時系統思想的實現提供了可能性。具體一點就是:雖然單片機的CPU速度較低,但其任務是可預見的,這樣作業調度將變得簡單而無須占用很多的CPU時間,同時“時間片”的設計是具體而有針對性的,因此可變得很有效。一、單片機分時系統的設計單片機系統往往是一個嵌入式的控制系統,因此目前絕大部分的單片機系統還是一實時系統。能夠真正體現分時系統的設計思想的往往是那些多路重復檢測控制系統。即便是在這些多路重復檢測控制系統中,它的實時性也是非常重要的。也就是說,在單片機系統中應用了分時系統設計思想,但其及時性應首先進行考慮。

    標簽: 分時操作系統 中的實現 單片機編程

    上傳時間: 2013-12-23

    上傳用戶:佳期如夢

  • MCU復位電路和振蕩電路應用

    系統start-up 定時器• 為了讓振蕩器能夠穩定起振所需要的延時時間。• 其時間為1024 個振蕩器振蕩周期。制程和溫度漂移• 因RC 振蕩器的頻率與內建振蕩電容值有關,而此電容值與制程參數有關,所以不同的MCU 會表現出不一致性。在固定電壓和溫度下,振蕩頻率漂移范圍約±25%。• 對于同一顆MCU(與制程漂移無關),其振蕩頻率會對工作電壓和工作溫度產生漂移。其對工作電壓和工作溫度所產生的漂移,可參考HOLTEK 網站上提供的相關資料。EMI/EMS(EMC)注意事項• ROSC 位置應盡量接近OSC1 引腳,其至OSC1 的連線應最短。• CS 可以提高振蕩器的抗干擾能力,其與MCU OSC1 和GND 的連線應最短。• RPU 在確定系統頻率之后,量產時建議不要接,因為其fSYS/4 頻率輸出會干擾到OSC1

    標簽: MCU 復位電路 振蕩電路

    上傳時間: 2014-01-20

    上傳用戶:yyyyyyyyyy

  • 匯編+保護模式+教程

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

    標簽: 匯編 保護模式 教程

    上傳時間: 2013-12-11

    上傳用戶:nunnzhy

主站蜘蛛池模板: 岳西县| 阳春市| 桓台县| 镇巴县| 正镶白旗| 多伦县| 福贡县| 修武县| 固阳县| 榆社县| 利津县| 通道| 眉山市| 普安县| 峨边| 科技| 永定县| 永州市| 丰县| 泉州市| 衡阳县| 莎车县| 尚义县| 蓝田县| 阳城县| 北川| 财经| 垫江县| 东山县| 乌审旗| 永和县| 江孜县| 济源市| 墨江| 和田市| 耿马| 黔江区| 会泽县| 河东区| 禹州市| 宁强县|