微機原理復習整理


第一章 微型計算機系統概述

1. 微型計算機系統組成

  1. 微處理器:運算器、控制器、寄存器
  2. 微型計算機:輸入輸出接口、總線、內存
  3. 微型計算機系統:由硬件和軟件共同組成的完整的計算機系統

2. 系統總線

  • 地址總線AB
    • 輸出將要訪問的內存單元或I/O端口的地址
    • 地址線的多少決定了系統直接尋址存儲器的范圍
  • 數據總線DB
    • CPU讀操作時,外部數據通過數據總線送往CPU
    • CPU寫操作時,CPU數據通過數據總線送往外部
    • 數據線的多少決定了一次能夠傳送數據的位數
  • 控制總線CB
  • 協調系統中各部件的操作,有輸出控制、輸入狀態等信號
  • 控制總線決定了系統總線的特點,例如功能、適應性等

3. 基於8088CPU的PC微機系統結構

4. 微處理器(CPU)內部結構

  • 指令處理單元(控制器):對機器指令譯碼,產生指令執行所需的控制信號,並按照指令規定的時序將控制信號傳送到CPU內部各器件或傳送到總線。

  • 算術邏輯單元(運算器):接收到控制器發出的各種運算控制信號后,執行相應運算,並影響相應標志位。

  • 寄存器組:CPU內用於暫時存放數據、地址的存儲單元,CPU從內存讀取指令、在內存中讀寫數據,均需要這些寄存器完成尋址、暫存的功能。其中標志寄存器能夠間接影響程序執行流程

  • 8088的內部結構從功能分成兩個單元

  1. 總線接口單元BIU——管理8088與系統總線的接口,負責CPU對存儲器和外設進行訪問
  2. 執行單元EU——負責指令的譯碼、執行和數據的運算
  3. 兩個單元相互獨立,分別完成各自操作
    兩個單元可以並行執行,實現指令取指和執行的流水線操作

8088 CPU 外部特性與 IBM PC總線結構

image

1. 8088的兩種組態模式

  • MN/MX*接高電平為最小組態模式
  • MN/MX*接低電平為最大組態模式

2. 8088最小組態的引腳信號

1. 數據和地址引腳
  1. AD7~AD0
  • 地址/數據分時復用引腳,雙向、三態
  • 在訪問存儲器或外設的總線操作周期中,這些引腳在第一個時鍾周期輸出存儲器或I/O端口的低8位地址A7~A0
  • 其他時間用於傳送8位數據D7~D0
  1. A15~A8(Address)
    中間8位地址引腳,輸出、三態
    這些引腳在訪問存儲器或外設時,提供全部20位地址中的中間8位地址A15~A8
  2. A19/S6~A16/S3(Address/Status)
  • 地址/狀態分時復用引腳,輸出、三態
  • 這些引腳在訪問存儲器的第一個時鍾周期輸出高4位地址A19~A16
  • 在訪問外設的第一個時鍾周期全部輸出低電平無效
  • 其他時間輸出狀態信號S6~S3
  • S6始終為低;
  • S5為標志寄存器的中斷允許標志的狀態位,它在每一個時鍾周期開始時被修改;
  • S4和S3用以指示是哪一個段寄存器正在被使用,00為ES,01為SS,10為CS,11為DS。
  • 在DMA方式時這4條線處於高阻狀態
2. 讀寫控制引腳
  1. ALE(Address Latch Enable)
  • 地址鎖存允許,輸出、三態、高電平有效

  • ALE引腳高有效時,表示復用引腳:AD7~AD0和A19/S6~A16/S3正在傳送地址信息

  • 由於地址信息在這些復用引腳上出現的時間很短暫,所以系統可以利用ALE引腳將地址鎖存起來

  1. IO/M*(Input and Output/Memory)
  • I/O或存儲器訪問,輸出、三態

  • 該引腳輸出高電平時,表示CPU將訪問I/O端口,這時地址總線A15~A0提供16位I/O口地址

  • 該引腳輸出低電平時,表示CPU將訪問存儲器,這時地址總線A19~A0提供20位存儲器地址

  1. WR*(Write)
  • 寫控制,輸出、三態、低電平有效
  • 有效時,表示CPU正在寫出數據給存儲器或I/O端口
  1. RD*(Read)
  • 讀控制,輸出、三態、低電平有效
  • 有效時,表示CPU正在從存儲器或I/O端口讀入數據
  1. READY
  • 存儲器或I/O口就緒,輸入、高電平有效
  • 在總線操作周期中,8088CPU會在第3個時鍾周期的前沿(下降沿)測試該引腳
    如果測到高有效,CPU直接進入第4個時鍾周期
    如果測到無效,CPU將插入等待周期Tw
  • CPU在等待周期中仍然要監測READY信號,有效則進入第4個時鍾周期,否則繼續插入等待周期Tw
  1. DEN*(Data Enable)
  • 數據允許,輸出、三態、低電平有效
  • 有效時,表示當前數據總線上正在傳送數據,可利用他來控制對數據總線的驅動
  1. DT/R*(Data Transmit/Receive)
  • 數據發送/接收,輸出、三態
  • 該信號表明當前總線上數據的流向
    高電平時數據自CPU輸出(發送)
    低電平時數據輸入CPU(接收)
  1. SS0*(System Status 0)
    最小組態模式下的狀態輸出信號
  • 它與IO/M和DT/R一道,通過編碼指示CPU在最小組態下的8種工作狀態:
3. 中斷請求和響應引腳
  1. INTR(Interrupt Request)
  • 可屏蔽中斷請求,輸入、高電平有效
  • 有效時,表示請求設備向CPU申請可屏蔽中斷
  • 該請求的優先級別較低,並可通過關中斷指令CLI清除標志寄存器中的IF標志、從而對中斷請求進行屏蔽
  1. INTA*(Interrupt Acknowledge)
  • 可屏蔽中斷響應,輸出、低電平有效
  • 有效時,表示來自INTR引腳的中斷請求已被CPU響應,CPU進入中斷響應周期
  • 中斷響應周期是連續的兩個,每個都發出有效響應信號,以便通知外設他們的中斷請求已被響應、並令有關設備將中斷向量號送到數據總線
  1. NMI(Non-Maskable Interrupt)
  • 不可屏蔽中斷請求,輸入、上升沿有效
  • 有效時,表示外界向CPU申請不可屏蔽中斷
  • 該請求的優先級別高於INTR,並且不能在CPU內被屏蔽
  • 當系統發生緊急情況時,可通過他向CPU申請不可屏蔽中斷服務
4. 總線請求和響應引腳
  1. HOLD
  • 總線保持(即總線請求),輸入、高電平有效
  • 有效時,表示總線請求設備向CPU申請占有總線
  1. HLDA(HOLD Acknowledge)
  • 總線保持響應(即總線響應),輸出、高電平有效
  • 有效時,表示CPU已響應總線請求並已將總線釋放
  • 此時CPU的地址總線、數據總線及具有三態輸出能力的控制總線將全面呈現高阻,使總線請求設備可以順利接管總線
  • 待到總線請求信號HOLD無效,總線響應信號HLDA也轉為無效,CPU重新獲得總線控制權
  1. RESET
  • 復位請求,輸入、高電平有效
  • 該信號有效,將使CPU回到其初始狀態;當它再度返回無效時,CPU將重新開始工作
    8088/86復位后
    CS=FFFFH、IP=0000H,
    所以程序入口在物理地址FFFF0H
  1. CLK(Clock)
    時鍾輸入
5. 其它引腳
  1. MN/MX*(Minimum/Maximum)
    組態選擇,輸入
  2. TEST*
    測試,輸入、低電平有效
6. 8088的基本總線時序
  1. 總線時序描述CPU引腳如何實現總線操作
  • 描述總線操作的微處理器時序有三級:
    指令周期 → 總線周期 → 時鍾周期
  • 指令周期是指一條指令經取指、譯碼、讀寫操作數到執行完成的過程。若干總線周期組成一個指令周期
  • 總線周期是指CPU通過總線操作與外部(存儲器或I/O端口)進行一次數據交換的過程
  • 8088的基本總線周期需要4個時鍾周期
  • 總線操作中如何實現CPU與內存、接口芯片間的時序同步是關鍵
  • 同步時序:
    各部件都以系統時鍾信號為基准
    當相互不能配合時,快速部件(CPU)插入等待狀態等待慢速部件(I/O和存儲器)
  • 異步時序:
    CPU與外設接口通過應答聯絡信號實現同步操作
7. 8088最小組態的總線時序
  • 存儲器讀總線周期
  • 存儲器寫總線周期
  • I/O讀總線周期
  • I/O寫總線周期
8. 8088最大組態中的引腳定義
  • 有些控制信號不相同,主要是用於輸出操作編碼信號,由總線控制器8288譯碼產生系統控制信號:
  • LOCK*——總線封鎖信號
  • S2、S1、S0*——3個狀態信號
  • QS1、QS0——指令隊列狀態信號
  • RQ/GT0、RQ/GT1——2個總線請求/同意信號
9. 8088最大組態的總線形成

系統地址總線

  1. 采用三態透明鎖存器74LS373和三態單向緩沖器74LS244
  2. 系統數據總線
    通過三態雙向緩沖器74LS245形成和驅動
  3. 系統控制總線
    主要由總線控制器8288形成
    MEMR、MEMW、IOR、IOW、INTA*

第五章 半導體存儲器及接口

1. 半導體存儲器的分類
  1. 讀寫存儲器RAM:SRAM.DRAM,NVRAM
  2. 只讀存儲器ROM
  • 掩膜ROM:信息制作在芯片中,不可更改
  • PROM:允許一次編程,此后不可更改
  • EPROM:用紫外光擦除,擦除后可編程;並允許用戶多次擦除和編程
  • EEPROM(E2PROM):采用加電方法在線進行擦除和編程,也可多次擦寫
  • Flash Memory(閃存):能夠快速擦寫的EEPROM,但只能按塊(Block)擦除
2. 半導體存儲器芯片的內部結構
  1. 每個存儲單元具有一個唯一的地址,可存儲1位(位片結構)或多位(字片結構)二進制數據
  • 存儲容量(bits)與地址、數據線個數有關:
    芯片的存儲容量=2^M×N
    =存儲單元數×存儲單元的位數
  1. 地址譯碼電路結構
    單譯碼,雙譯碼
  2. 片選和讀寫控制邏輯
    片選端CS或CE
    有效時,可以對該芯片進行讀寫操作
    輸出OE*
    控制讀操作。有效時,芯片內數據輸出
    該控制端對應系統的讀控制線
    寫WE*
    控制寫操作。有效時,數據進入芯片中
    該控制端對應系統的寫控制線
4. 隨機存取存儲器
  1. 靜態RAM(SRAM)
    image
  • SRAM的基本存儲單元是觸發器電路
  • SRAM一般采用“字結構”存儲矩陣
  • SRAM芯片2114外部特性:
    10根地址線A9~A0
    4根數據線I/O4~I/O1
    片選CS*
    讀寫WE*
  • SRAM芯片6264外部特性
    28個引腳:
    13根地址線A12~A0
    8根數據線D7~D0
    片選CS1、CS2
    讀寫WE
    、OE*
  1. 動態RAM
  • 每個存儲單元存放一位,芯片內每個位單元具有獨立地址
  • 需要8個存儲芯片構成一個字節單元,每個
  • DRAM芯片4116外部特性
    • 7根地址線A6~A0,
    • 1根數據輸入線DIN,
    • 1根數據輸出線DOUT,
    • 行地址選通RAS*,
    • 列地址選通CAS*,
    • 讀寫控制WE*.
  • DRAM 4116的刷新:采用“僅行地址有效”方法刷新
  • DRAM芯片2164外部特性
    • 8根地址線A7~A0
      1根數據輸入線DIN
      1根數據輸出線DOUT
      行地址選通RAS*
      列地址選通CAS*
      讀寫控制WE*
5. 只讀存儲器
  1. EPROM 2716
  • 11根地址線A10~A0
    8根數據線DO7~DO0
    片選/編程CE/PGM
    讀寫OE

    編程電壓VPP
  1. EPROM 2764
  • 13根地址線A12~A0
    8根數據線D7~D0
    片選CE*
    編程PGM*
    讀寫OE*
    編程電壓VPP
  1. EEPROM
    用加電方法,進行在線(無需拔下,直接在電路中)擦寫(擦除和編程一次完成)
  2. EEPROM 2717A
  • 11根地址線A10~A0
    8根數據線I/O7~I/O0
    片選CE*
    讀寫OE、WE
    狀態輸出RDY/BUSY*
  1. EEPROM 2864A
  • 13根地址線A12~A0
    8根數據線I/O7~I/O0
    片選CE*
    讀寫OE、WE
6. 半導體存儲器與CPU的連接
  1. 存儲芯片的數據線
  • 若芯片的數據線正好8根:
    一次可從芯片中訪問到8位數據,全部數據線與系統的8位數據總線相連
  • 若芯片的數據線不足8根:一次不能從一個芯片中訪問到8位數據,“位擴充”
    image
  1. 存儲芯片的地址線
  • 芯片的地址線通常應全部與系統的低位地址總線相連
  • 尋址時,這部分地址的譯碼是在存儲芯片內完成的,我們稱為“片內譯碼
  1. 存儲芯片的片選端
  • 存儲系統常需利用多個存儲芯片擴充容量,也就是擴充了存儲器地址范圍
  • 進行“地址擴充”,需要利用存儲芯片的片選端對多個存儲芯片(組)進行尋址
  • 這個尋址方法,主要通過將存儲芯片的片選端與系統的高位地址線相關聯來實現
  • 這種擴充簡稱為“地址擴充”或“字擴充”

譯碼和譯碼器

全譯碼

  1. 所有的系統地址線均參與對存儲單元的譯碼尋址
  2. 包括低位地址線對芯片內各存儲單元的譯碼尋址(片內譯碼),高位地址線對存儲芯片的譯碼尋址(片選譯碼)
  3. 采用全譯碼,每個存儲單元的地址都是唯一的,不存在地址重復
  4. 譯碼電路可能比較復雜、連線也較多

部分譯碼

  1. 只有部分(高位)地址線參與對存儲芯片的譯碼
  2. 每個存儲單元將對應多個地址(地址重復),需要選取一個可用地址
  3. 可簡化譯碼電路的設計
  4. 但系統的部分地址空間將被浪費

線選譯碼

  • 只用少數幾根高位地址線進行芯片的譯碼,且每根負責選中一個芯片(組)
  • 雖構成簡單,但地址空間嚴重浪費,必然會出現地址重復
  • 一個存儲地址會對應多個存儲單元
  • 多個存儲單元共用的存儲地址不應使用
  1. 存儲芯片的讀寫控制線
  • 芯片OE*與系統的讀命令線相連
    當芯片被選中、且讀命令有效時,存儲芯片將開放並驅動數據到總線
  • 芯片WE*與系統的寫命令線相連
    當芯片被選中、且寫命令有效時,允許總線數據寫入存儲芯片
7. 存儲芯片與CPU的配合
  1. 總線驅動
  • CPU的總線驅動能力有限
  • 單向傳送的地址和控制總線,可采用三態鎖存器和三態單向驅動器等來加以鎖存和驅動
  • 雙向傳送的數據總線,可以采用三態雙向驅動器來加以驅動
  1. 時序配合
  • 分析存儲器的存取速度是否滿足CPU總線時序的要求
    如果不能滿足:考慮更換芯片,總線周期中插入等待狀態TW
8. 8086存儲器組織
  1. 尋址空間(20位地址線)
    220=1M bytes的存儲器尋址空間
    分段的概念
  2. 分段組織
    段寄存器的16位值左移4位,得到的20位值加上16位的偏移量。
  3. 字與字節訪問
    AD0 信號和BHE信號組合,選擇奇偶字節或字。

第6章 基本輸入輸出接口

I/O接口概述

  • I/O接口是位於系統與外設間、用來協助完成數據傳送和控制任務的邏輯電路
  • PC機系統板的可編程接口芯片、I/O總線槽的電路板(適配器)都是接口電路
  1. 信號轉換
    對信號的形式和數據的格式進行變換
    微機直接處理:數字量、開關量、脈沖量
  2. 數據緩沖
    對輸入輸出數據進行緩沖和鎖存
    輸出鎖存緩沖環節,輸入鎖存緩沖環節
  3. 對I/O端口進行尋址
  4. 與CPU和I/O設備進行聯絡

I/O接口的典型結構

1. 接口電路的內部結構
  • 數據寄存器
    保存外設給CPU和CPU發往外設的數據
  • 狀態寄存器
    保存外設或接口電路的狀態
  • 控制寄存器
    保存CPU給外設或接口電路的命令
2. 接口電路的外部特性
  • 面向CPU一側的信號:用於與CPU連接、主要是數據、地址和控制信號
  • 面向外設一側的信號:用於與外設連接、提供的信號種類繁多、功能定義、時序及有效電平等差異較大
3. 接口電路芯片的分類
  • 通用接口芯片
    支持通用的數據輸入輸出和控制的接口芯片
  • 面向外設的專用接口芯片
    針對某種外設設計、與該種外設接口
  • 面向微機系統的專用接口芯片
    與CPU和系統配套使用,以增強其總體功能
4. 接口電路的可編程性

3. I/O端口的編址

  1. 數據寄存器、狀態寄存器和控制寄存器占有的I/O地址常依次被稱為數據端口、狀態端口和控制端口,用於保存數據、狀態和控制信息
  2. 兩類編排形式
  • I/O端口獨立編址

優點

    • I/O端口的地址空間獨立
    • 控制和地址譯碼電路相對簡單
    • 專門的I/O指令使程序清晰易讀

缺點

    • I/O指令沒有存儲器指令豐富
  • I/O端口與存儲器統一編址

優點:

    • 不需要專門的I/O指令
    • I/O數據存取與存儲器數據存取一樣靈活

缺點:

    • I/O端口要占去部分存儲器地址空間
    • 程序不易閱讀(不易分清訪存和訪問外設)

4. 8088/8086的輸入輸出指令

輸入指令
IN AL,i8	;字節輸入,直接尋址
IN AL,DX	;字節輸入,間接尋址
IN AX,i8	;字輸入,直接尋址
IN AX,DX	;字輸入,間接尋址
輸出指令
OUT i8,AL	;字節輸出,直接尋址
OUT DX,AL	;字節輸出,間接尋址
OUT i8,AX	;字輸出,直接尋址
OUT DX,AX	;字輸出,間接尋址

1. 8088/8086的I/O端口
  • 8086用於尋址外設端口的地址線為16條,端口最多為216=65536(64K)個,端口號(端口地址)為0000H ~ FFFFH
  • 每個端口地址對應一個字節空間
  1. 尋址方式
  • 直接尋址:只用於尋址00H ~ FFH前256個端口,操作數i8表示端口號
  • 間接尋址:可用於尋址全部64K個端口,DX寄存器的值就是端口號,對端口號大於FFH的端口只能采用間接尋址方式
  1. 數據交換
  • 如果輸入輸出一個字節,使用AL寄存器
  • 如果輸入輸出一個字,使用AX寄存器

5. I/O地址的譯碼

6. 數據傳送方式

  • 程序控制下的數據傳送:通過CPU執行程序中的I/O指令來完成傳送,又分為:無條件傳送、查詢傳送、中斷傳送
  • 直接存儲器存取(DMA)——傳送請求由外設向DMA控制器(DMAC)提出,后者向CPU申請總線,最后DMAC利用系統總線來完成外設和存儲器間的數據傳送
  • I/O處理機——CPU委托專門的I/O處理機來管理外設,完成傳送和相應的數據處理

1. 無條件傳送方式及其接口

  • 在CPU與慢速變化的設備(或簡單設備)交換數據時,可以認為它們總是處於“就緒”狀態,隨時可以進行數據傳送
  • 適合於簡單設備,如LED數碼管、開關等
next:	mov dx,8000h	;DX指向數據端口
		in al,dx	;從輸入端口讀開關狀態
		not al	;反相
		out dx,al	;送輸出端口顯示
		call delay	;調子程序延時
		jmp next	;重復

2. 查詢傳送方式及其接口
  • CPU需要先了解(查詢)外設的工作狀態,然后在外設可以交換信息的情況下(就緒)實現數據輸入或輸出
  • 對多個外設的情況,則CPU按一定順序依次查詢(輪詢
  • 查詢傳送的特點是:工作可靠,適用面寬,但傳送效率低
//查詢輸入接口程序示例
	mov dx,8000h	;DX指向狀態端口
    status:	in al,dx	;讀狀態端口
	test al,01h	;測試標志位D0
	jz status	;D0=0,未就緒,繼續查詢
	inc dx	;D0=1,就緒,DX指向數據端口
	in al,dx	;從數據端口輸入數據

//查詢輸出接口程序示例
  mov dx,8000h	;DX指向狀態端口
  status:	in al,dx	;讀取狀態端口的狀態數據
	test al,80h	;測試標志位D7
	jnz status	;D7=1,未就緒,繼續查詢
	inc dx	;D7=0,就緒,DX指向數據端口
	mov al,buf	;變量buf送AL
	out dx,al	;將數據輸出給數據端口

//查詢方式的EEPROM編程
next:	mov al,55h	;寫入內容=55H
		mov [bx],al	;寫入存儲單元
		nop	;空操作指令,起延時作用
		nop
next1:	in al,dx	;查詢狀態口
		test al,01h	;測試D0
		jz next1	;D0=0,芯片還在寫入
		inc bx	;D0=1,寫畢,指針移動
		loop next	;循環至全部字節寫完

3. 中斷傳送方式
  • 中斷請求 =>中斷響應=>關中斷=>斷點保護=>中斷識別=>現場保護=>中斷服務=>恢復現場=>開中斷=>中斷返回
  • 中斷傳送是一種效率更高的程序傳送方式
  • 進行傳送的中斷服務程序是預先設計好的
  • 中斷請求是外設隨機向CPU提出的
4. DMA傳送方式
  • CPU對DMA控制器進行初始化設置
  • 外設、DMAC和CPU三者通過應答信號建立聯系:CPU將總線交給DMAC控制
  1. DMA傳送
    DMA讀存儲器:存儲器 → 外設
    DMA寫存儲器:存儲器 ← 外設
  2. 自動增減地址和計數,判斷傳送完成否

傳送方式的比較

  • 無條件傳送:慢速外設需與CPU保持同步
  • 查詢傳送: 簡單實用,效率較低
  • 中斷傳送:外設主動,可與CPU並行工作,但每次傳送需要大量額外時間開銷
  • DMA傳送:DMAC控制,外設直接和存儲器進行數據傳送,適合大量、快速數據傳送

第7章 中斷控制接口

1. 8088中斷系統

  • 8088的中斷系統采用向量中斷機制
  • 能夠處理256個中斷
  • 用中斷向量號0~255區別
  • 可屏蔽中斷還需要借助專用中斷控制器Intel 8259A實現優先權管理
1. 8088的中斷類型
  • 內部中斷:除法錯中斷、指令中斷、溢出中斷、單步中斷
  • 外部中斷:非屏蔽中斷、可屏蔽中斷
2. 8088的中斷響應過程

image

  • 8088各種中斷源的優先權,實際上是指被識別出來的先后
  • 多種中斷同時請求時,最先響應的則可能是單步中斷或NMI中斷
    image
3. 8088的中斷向量表
  • 中斷向量:中斷服務程序的入口地址(首地址)
  • 邏輯地址含有段地址CS和偏移地址IP(32位)
  • 每個中斷向量的低字是偏移地址、高字是段地址,需占用4個字節
  • 8088微處理器從物理地址00000H開始,依次安排各個中斷向量,向量號也從0開始
  • 256個中斷占用1KB區域,就形成中斷向量表
  • 向量號為N的中斷向量的物理地址=N×4

2. 內部中斷服務程序

1. 內部中斷服務程序

編寫80H號中斷服務程序
功能:顯示以“0”結尾字符串的功能
,利用顯示器功能調用INT 10H,
字符串緩沖區首地址為入口參數,
DS:DX(段地址:偏移地址)傳遞參數

    intoff	dw ?//偏移
	intseg	dw ?//段基址
	intmsg	db ‘A Instruction Interrupt !’//字符串
	db 0dh,0ah,0
	//保存中斷向量
    mov ax,3580h//AH=35H,AL=中斷向量號
	int 21h //DOS功能調用INT 21H
	mov intoff,bx	;保存偏移地址
	mov intseg,es	;保存段基地址
    //設置中斷向量
    //設置中斷向量(DOS功能調用INT 21H)
    push ds
    mov dx,offset new80h
    mov ax,seg new80h
    mov ds,ax
    mov ax,2580h//AH=25,AL=中斷向量號
    int 21h
    pop ds
    //調用中斷服務程序,設置入口參數:	//DS=段地址(已設置)
//;	DX=偏移地址
    mov dx,offset intmsg
	int 80h 	;調用80H中斷服務程序
//主程序結束
    mov dx,intoff
	mov ax,intseg
	mov ds,ax
	mov ax,2580h
	int 21h
	mov ax,4c00h
	int 21h
//進入中斷服務程序
new80h	proc
	sti	;開中斷
	push ax	;保護寄存器
	push bx
	push si
	mov si,dx
	//顯示字符串
new1:mov al,[si]
	cmp al,0
	jz new2
	mov bx,0
	mov ah,0eh
	int 10h
	inc si
	jmp new1
	//退出中斷服務程序
	new2:	pop si	;恢復寄存器
		pop bx
		pop ax
		iret	;中斷返回
	new80h	endp

3. 8259A中斷控制器

1. 8259A的內部結構和引腳
  1. 中斷控制
  • 中斷請求寄存器IRR
    保存8條外界中斷請求信號IR0~IR7的請求狀態
    Di位為1表示IRi引腳有中斷請求;為0表示無請求
  • 中斷服務寄存器ISR
    保存正在被8259A服務着的中斷狀態
    Di位為1表示IRi中斷正在服務中;為0表示沒有被服務
  • 中斷屏蔽寄存器IMR
    保存對中斷請求信號IR的屏蔽狀態
    Di位為1表示IRi中斷被屏蔽(禁止);為0表示允許
  1. 與處理器接口
    image
  2. 中斷級連
  • 一個系統中,8259A可以級連,有一個主8259A,若干個(最多8個)從8259A
  • 級連時,主8259A的三條級連線CAS0~CAS2作為輸出線,連至每個從8259A的CAS0~CAS2
  • SP/EN在非緩沖方式下,規定該8259A是主片(SP=1)還是從片(SP=0)
3. 8259A的工作方式
  1. 設置優先權方式
  • 普通全嵌套方式
  • 特殊全嵌套方式
  • 優先權自動循環方式
  1. 結束中斷處理方式
  • 8259A利用中斷服務寄存器ISR判斷:
    某位為1,表示正在進行中斷服務;
    該位為0,就是該中斷結束服務。
  • 自動中斷結束方式
  • 普通中斷結束方式,配合全嵌套優先權方式使用
  • 特殊中斷結束方式,配合循環優先權方式使用
  1. 屏蔽中斷源方式
  • 普通屏蔽方式
    將IMR的Di位置1,則對應的中斷IRi被屏蔽
  • 特殊屏蔽方式
    將IMR的Di位置1,對應的中斷IRi被屏蔽的同時,使ISR的Di位置0
  1. 中斷觸發方式
  • 邊沿觸發方式
  • 電平觸發方式
  1. 數據線連接方式
  • 緩沖方式
    8259A的數據線需加緩沖器予以驅動
    8259A把SP/EN引腳作為輸出端,輸出允許信號,用以鎖存或開啟緩沖器
  • 非緩沖方式
    SP/EN引腳為輸入端
    若8259A級連,由其確定是主片或從片
4. 8259A的編程
  1. 初始化命令字ICW
  • 初始化命令字ICW最多有4個
  • 8259A在開始工作前必須寫入
  • 必須按照ICW1~ICW4順序寫入
  • ICW1和ICW2是必須送的
  • ICW3和ICW4由工作方式決定
中斷控制器的初始化程序段
//初始化主片8259A
		mov al,11h	;寫入ICW1
		out 20h,al
		jmp intr1
intr1:	mov al,08h	;寫入ICW2
		out 21h,al
		jmp intr2
intr2:	mov al,04h	;寫入ICW3
		out 21h,al
		jmp intr3
intr3:	mov al,1h	;寫入ICW4
		out 21h,al
//初始化從片8259A
		mov al,11h	;寫入ICW1
		out 0a0h,al
		jmp intr5
intr5:	mov al,70h	;寫入ICW2
		out 0a1h,al
		jmp intr6
intr6:	mov al,02h	;寫入ICW3
		out 0a1h,al
		jmp intr7
intr7:	mov al, 01h	;寫入ICW4
		out 0a1h,al

  1. 操作命令字OCW
  • OCW共有3個:OCW1~OCW3
  • 寫入時沒有順序要求,需要哪個OCW就寫入那個OCW

應用注意事項

  • 利用上升沿做為中斷請求IRQ的有效信號
  • IRQ0~IRQ7的中斷向量號依次為08H~0FH,IRQ8~IRQ15依次為70H~77H
  • 采用普通全嵌套優先權方式,中斷優先權從高到低順序為IRQ0~IRQ2、IRQ8~IRQ15、IRQ3~IRQ7,且不能改變

5. 外部中斷服務程序

/*8259A的IRQ0(向量號為08H)中斷請求來自定時器8253,每隔55ms產生一次

本程序的08H號中斷服務程序,每次中斷顯示一串信息,顯示10次
*/
	intmsg	db ‘A 8259A Interrupt !’
		         db 0dh,0ah,0
	counter	db 0
	mov ax,3508h
	int 21h
	push bx	;保存偏移地址
	push es	;保存段基地址
	//設置中斷向量
		cli
		push ds
		mov dx,offset new08h
		mov ax,seg new08h
		mov ds,ax
		mov ax,2508h
		int 21h
		pop ds
		//設置中斷寄存器
		in al,21h
		push ax
		and al,0feh	         ;允許IRQ0
		out 21h,al
		mov counter,0	;設置中斷次數初值
		sti		         ;開中斷
		//循環等待中斷
start1:	cmp counter,10
		 jb start1	          ;中斷10次退出
		 //子程序結束
		 		cli
		pop ax
		out 21h,al
		pop dx
		pop ds
		mov ax,2508h
		int 21h
		sti
		mov ax,4c00h
		int 21h
        //進入中斷服務程序
new08h	proc
		  sti	         ;開中斷
		  push ax	;保護寄存器
		  push bx
		  push ds
		  mov ax,data
		  mov ds,ax	;設置數據段DS
//中斷處理
		inc counter
		mov si,offset intmsg	;顯示信息
		call dpstri
//
		     mov al,20h
		     out 20h,al
		     pop ds	       ;恢復寄存器
		     pop bx
		     pop ax
		     iret	       ;中斷返回
new08h endp
//顯示字符串
dpstri proc	        ;顯示字符串子程序
		 push ax
		 push bx
dps1:	 lodsb
		 cmp al,0
		 jz dps2
//顯示字符串
		 mov bx,0
		 mov ah,0eh
		 int 10h
		 jmp dps1
dps2:	 pop bx
		 pop ax
		 ret
dpstri endp





第8章 定時計數控制接口

8253/8254定時計數器

  • 3個獨立的16位計數器通道
  • 每個計數器有6種工作方式
  • 按二進制或十進制(BCD碼)計數
  1. 計數器結構分析
  • 計數初值存於預置寄存器;
  • 在計數過程中,減法計數器的值不斷遞減,而預置寄存器中的預置不變。
  • 輸出鎖存器用於寫入鎖存命令時,鎖定當前計數值
  1. 計數器的3個引腳
  • CLK時鍾輸入信號——在計數過程中,此引腳上每輸入一個時鍾信號(下降沿),計數器的計數值減1
  • GATE門控輸入信號——控制計數器工作,可分成電平控制和上升沿控制兩種類型
  • OUT計數器輸出信號——當一次計數過程結束(計數值減為0),OUT引腳上將產生一個輸出信號

8253/8254的工作方式

  • 方式0 計數結束中斷
  • 方式1 可編程單穩脈沖
  • 方式2 頻率發生器(分頻器)
  • 方式3 方波發生器
  • 方式4 軟件觸發選通信號
  • 方式5 硬件觸發選通信號
  1. 注意
  • 處理器寫入8253的計數初值只是寫入了預置寄存器,之后到來的第一個CLK輸入脈沖(需先由低電平變高,再由高變低)才將預置寄存器的初值送到減1計數器。
  • 從第二個CLK信號的下降沿,計數器才真正開始減1計數。

8253/8254的編程


第9章 DMA控制接口

DMA控制器8237A

  • 每個8237A芯片有4個DMA通道,就是有4個DMA控制器
  • 每個DMA通道具有不同的優先權
  • 每個DMA通道可以分別允許和禁止
  • 每個DMA通道有4種工作方式
  • 一次傳送的最大長度可達64KB
  • 多個8237A芯片可以級連,擴展通道數
1. 8237A的內部結構和引腳
  1. 請求與響應信號
  • DREQ0~DREQ3:DMA通道請求
  • HRQ:總線請求
  • HLDA:總線響應
  • DACK0~DACK3:DMA通道響應
  1. DMA傳送控制信號
  • A0~A7:地址線。輸出低8位存儲器地址。
    DB0~DB7:數據線。輸出高8位存儲器地址
  • ADSTB:地址選通
  • AEN:地址允許。
  • MEMR*:存儲器讀
  • MEMW*:存儲器寫
  • IOR*:I/O讀
  • IOW*:I/O寫
  • READY:准備好
  • EOP*:過程結束。DMA傳送過程結束,輸出一個低有效脈沖。
  1. 處理器接口信號
  • DB0~DB7:數據線。
  • A0~A3:地址線。
  • CS*:片選
  • IOR*:I/O讀。讀取8237A內部寄存器。
  • IOW*:I/O寫。寫入8237A內部寄存器。
  • CLK:時鍾。控制芯片內部操作和數據傳輸。
  • RESET:復位。使8237A處於初始狀態。

8237A的兩種工作狀態

  • 空閑周期:
    作為接口電路,受CPU控制的工作狀態
  • 有效周期:
    作為DMAC控制DMA傳送的工作狀態
    image
2. 8237A的工作時序·空閑周期

DMA傳送時序

  • S1狀態——輸出16位存儲器地址
    AEN輸出高電平,表示DMA傳送
  • S2狀態——輸出DMA響應信號和控制信號
    DMA讀:MEMR和IOW有效
    DMA寫:IOR和MEMW有效
  • S3和Sw狀態——檢測數據傳送是否能夠完成,決定是否插入等待狀態Sw
  • S4狀態——完成數據傳送
3. 8237A的工作方式
  1. DMA傳送方式
  • 單字節傳送方式:一次傳送一個字節,效率略低,
    DMA傳送之間CPU有機會重新獲取總線控制權
  • 數據塊傳送方式:一次請求傳送一個數據塊,效率高,
    整個DMA傳送期間CPU長時間無法控制總線
  • 請求傳送方式
    DREQ信號有效就連續傳送數據
    DREQ信號無效,DMA傳送被暫時中止,8237A釋放總線,CPU可繼續操作
  • 級連方式
  1. DMA傳送類型
    · DMA讀 · DMA寫 · DMA檢驗
  2. DMA通道的優先權方式
  • 固定優先權方式——優先權固定:0,1,2.。。
  • 循環優先權方式——優先權循環變化
  1. 自動初始化方式
4. 8237A的寄存器
  1. 通道寄存器(4個通道分別具有):基地址寄存器、基字節數寄存器、現行地址寄存器、現行字節數寄存器。

  2. 狀態、命令寄存器:命令寄存器、狀態寄存器、請求寄存器、方式寄存器、屏蔽寄存器、臨時寄存器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM