第一章 微型計算機系統概述
1. 微型計算機系統組成
- 微處理器:運算器、控制器、寄存器
- 微型計算機:輸入輸出接口、總線、內存
- 微型計算機系統:由硬件和軟件共同組成的完整的計算機系統
2. 系統總線
- 地址總線AB
-
- 輸出將要訪問的內存單元或I/O端口的地址
-
- 地址線的多少決定了系統直接尋址存儲器的范圍
- 數據總線DB
-
- CPU讀操作時,外部數據通過數據總線送往CPU
-
- CPU寫操作時,CPU數據通過數據總線送往外部
-
- 數據線的多少決定了一次能夠傳送數據的位數
- 控制總線CB
- 協調系統中各部件的操作,有輸出控制、輸入狀態等信號
- 控制總線決定了系統總線的特點,例如功能、適應性等
3. 基於8088CPU的PC微機系統結構
4. 微處理器(CPU)內部結構
-
指令處理單元(控制器):對機器指令譯碼,產生指令執行所需的控制信號,並按照指令規定的時序將控制信號傳送到CPU內部各器件或傳送到總線。
-
算術邏輯單元(運算器):接收到控制器發出的各種運算控制信號后,執行相應運算,並影響相應標志位。
-
寄存器組:CPU內用於暫時存放數據、地址的存儲單元,CPU從內存讀取指令、在內存中讀寫數據,均需要這些寄存器完成尋址、暫存的功能。其中標志寄存器能夠間接影響程序執行流程
-
8088的內部結構從功能分成兩個單元
- 總線接口單元BIU——管理8088與系統總線的接口,負責CPU對存儲器和外設進行訪問
- 執行單元EU——負責指令的譯碼、執行和數據的運算
- 兩個單元相互獨立,分別完成各自操作
兩個單元可以並行執行,實現指令取指和執行的流水線操作
8088 CPU 外部特性與IBM PC總線結構

1. 8088的兩種組態模式
- MN/MX*接高電平為最小組態模式
- MN/MX*接低電平為最大組態模式
2. 8088最小組態的引腳信號
1. 數據和地址引腳
- AD7~AD0
- 地址/數據分時復用引腳,雙向、三態
- 在訪問存儲器或外設的總線操作周期中,這些引腳在第一個時鍾周期輸出存儲器或I/O端口的低8位地址A7~A0
- 其他時間用於傳送8位數據D7~D0
- A15~A8(Address)
中間8位地址引腳,輸出、三態
這些引腳在訪問存儲器或外設時,提供全部20位地址中的中間8位地址A15~A8 - 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. 讀寫控制引腳
- ALE(Address Latch Enable)
-
地址鎖存允許,輸出、三態、高電平有效
-
ALE引腳高有效時,表示復用引腳:AD7~AD0和A19/S6~A16/S3正在傳送地址信息
-
由於地址信息在這些復用引腳上出現的時間很短暫,所以系統可以利用ALE引腳將地址鎖存起來
- IO/M*(Input and Output/Memory)
-
I/O或存儲器訪問,輸出、三態
-
該引腳輸出高電平時,表示CPU將訪問I/O端口,這時地址總線A15~A0提供16位I/O口地址
-
該引腳輸出低電平時,表示CPU將訪問存儲器,這時地址總線A19~A0提供20位存儲器地址
- WR*(Write)
- 寫控制,輸出、三態、低電平有效
- 有效時,表示CPU正在寫出數據給存儲器或I/O端口
- RD*(Read)
- 讀控制,輸出、三態、低電平有效
- 有效時,表示CPU正在從存儲器或I/O端口讀入數據
- READY
- 存儲器或I/O口就緒,輸入、高電平有效
- 在總線操作周期中,8088CPU會在第3個時鍾周期的前沿(下降沿)測試該引腳
如果測到高有效,CPU直接進入第4個時鍾周期
如果測到無效,CPU將插入等待周期Tw - CPU在等待周期中仍然要監測READY信號,有效則進入第4個時鍾周期,否則繼續插入等待周期Tw
- DEN*(Data Enable)
- 數據允許,輸出、三態、低電平有效
- 有效時,表示當前數據總線上正在傳送數據,可利用他來控制對數據總線的驅動
- DT/R*(Data Transmit/Receive)
- 數據發送/接收,輸出、三態
- 該信號表明當前總線上數據的流向
高電平時數據自CPU輸出(發送)
低電平時數據輸入CPU(接收)
- SS0*(System Status 0)
最小組態模式下的狀態輸出信號
- 它與IO/M和DT/R一道,通過編碼指示CPU在最小組態下的8種工作狀態:
3. 中斷請求和響應引腳
- INTR(Interrupt Request)
- 可屏蔽中斷請求,輸入、高電平有效
- 有效時,表示請求設備向CPU申請可屏蔽中斷
- 該請求的優先級別較低,並可通過關中斷指令CLI清除標志寄存器中的IF標志、從而對中斷請求進行屏蔽
- INTA*(Interrupt Acknowledge)
- 可屏蔽中斷響應,輸出、低電平有效
- 有效時,表示來自INTR引腳的中斷請求已被CPU響應,CPU進入中斷響應周期
- 中斷響應周期是連續的兩個,每個都發出有效響應信號,以便通知外設他們的中斷請求已被響應、並令有關設備將中斷向量號送到數據總線
- NMI(Non-Maskable Interrupt)
- 不可屏蔽中斷請求,輸入、上升沿有效
- 有效時,表示外界向CPU申請不可屏蔽中斷
- 該請求的優先級別高於INTR,並且不能在CPU內被屏蔽
- 當系統發生緊急情況時,可通過他向CPU申請不可屏蔽中斷服務
4. 總線請求和響應引腳
- HOLD
- 總線保持(即總線請求),輸入、高電平有效
- 有效時,表示總線請求設備向CPU申請占有總線
- HLDA(HOLD Acknowledge)
- 總線保持響應(即總線響應),輸出、高電平有效
- 有效時,表示CPU已響應總線請求並已將總線釋放
- 此時CPU的地址總線、數據總線及具有三態輸出能力的控制總線將全面呈現高阻,使總線請求設備可以順利接管總線
- 待到總線請求信號HOLD無效,總線響應信號HLDA也轉為無效,CPU重新獲得總線控制權
- RESET
- 復位請求,輸入、高電平有效
- 該信號有效,將使CPU回到其初始狀態;當它再度返回無效時,CPU將重新開始工作
8088/86復位后
CS=FFFFH、IP=0000H,
所以程序入口在物理地址FFFF0H
- CLK(Clock)
時鍾輸入
5. 其它引腳
- MN/MX*(Minimum/Maximum)
組態選擇,輸入 - TEST*
測試,輸入、低電平有效
6. 8088的基本總線時序
- 總線時序描述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最大組態的總線形成
系統地址總線
- 采用三態透明鎖存器74LS373和三態單向緩沖器74LS244
- 系統數據總線
通過三態雙向緩沖器74LS245形成和驅動 - 系統控制總線
主要由總線控制器8288形成
MEMR、MEMW、IOR、IOW、INTA*
第五章 半導體存儲器及接口
1. 半導體存儲器的分類
- 讀寫存儲器RAM:SRAM.DRAM,NVRAM
- 只讀存儲器ROM
- 掩膜ROM:信息制作在芯片中,不可更改
- PROM:允許一次編程,此后不可更改
- EPROM:用紫外光擦除,擦除后可編程;並允許用戶多次擦除和編程
- EEPROM(E2PROM):采用加電方法在線進行擦除和編程,也可多次擦寫
- Flash Memory(閃存):能夠快速擦寫的EEPROM,但只能按塊(Block)擦除
2. 半導體存儲器芯片的內部結構
- 每個存儲單元具有一個唯一的地址,可存儲1位(位片結構)或多位(字片結構)二進制數據
- 存儲容量(bits)與地址、數據線個數有關:
芯片的存儲容量=2^M×N
=存儲單元數×存儲單元的位數
- 地址譯碼電路結構
單譯碼,雙譯碼 - 片選和讀寫控制邏輯
片選端CS或CE
有效時,可以對該芯片進行讀寫操作
輸出OE*
控制讀操作。有效時,芯片內數據輸出
該控制端對應系統的讀控制線
寫WE*
控制寫操作。有效時,數據進入芯片中
該控制端對應系統的寫控制線
4. 隨機存取存儲器
- 靜態RAM(SRAM)

- 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*
- 動態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*
- 8根地址線A7~A0
5. 只讀存儲器
- EPROM 2716
- 11根地址線A10~A0
8根數據線DO7~DO0
片選/編程CE/PGM
讀寫OE
編程電壓VPP
- EPROM 2764
- 13根地址線A12~A0
8根數據線D7~D0
片選CE*
編程PGM*
讀寫OE*
編程電壓VPP
- EEPROM
用加電方法,進行在線(無需拔下,直接在電路中)擦寫(擦除和編程一次完成) - EEPROM 2717A
- 11根地址線A10~A0
8根數據線I/O7~I/O0
片選CE*
讀寫OE、WE
狀態輸出RDY/BUSY*
- EEPROM 2864A
- 13根地址線A12~A0
8根數據線I/O7~I/O0
片選CE*
讀寫OE、WE
6. 半導體存儲器與CPU的連接
- 存儲芯片的數據線
- 若芯片的數據線正好8根:
一次可從芯片中訪問到8位數據,全部數據線與系統的8位數據總線相連 - 若芯片的數據線不足8根:一次不能從一個芯片中訪問到8位數據,“位擴充”

- 存儲芯片的地址線
- 芯片的地址線通常應全部與系統的低位地址總線相連
- 尋址時,這部分地址的譯碼是在存儲芯片內完成的,我們稱為“片內譯碼”
- 存儲芯片的片選端
- 存儲系統常需利用多個存儲芯片擴充容量,也就是擴充了存儲器地址范圍
- 進行“地址擴充”,需要利用存儲芯片的片選端對多個存儲芯片(組)進行尋址
- 這個尋址方法,主要通過將存儲芯片的片選端與系統的高位地址線相關聯來實現
- 這種擴充簡稱為“地址擴充”或“字擴充”
譯碼和譯碼器
全譯碼
- 所有的系統地址線均參與對存儲單元的譯碼尋址
- 包括低位地址線對芯片內各存儲單元的譯碼尋址(片內譯碼),高位地址線對存儲芯片的譯碼尋址(片選譯碼)
- 采用全譯碼,每個存儲單元的地址都是唯一的,不存在地址重復
- 譯碼電路可能比較復雜、連線也較多
部分譯碼
- 只有部分(高位)地址線參與對存儲芯片的譯碼
- 每個存儲單元將對應多個地址(地址重復),需要選取一個可用地址
- 可簡化譯碼電路的設計
- 但系統的部分地址空間將被浪費
線選譯碼
- 只用少數幾根高位地址線進行芯片的譯碼,且每根負責選中一個芯片(組)
- 雖構成簡單,但地址空間嚴重浪費,必然會出現地址重復
- 一個存儲地址會對應多個存儲單元
- 多個存儲單元共用的存儲地址不應使用
- 存儲芯片的讀寫控制線
- 芯片OE*與系統的讀命令線相連
當芯片被選中、且讀命令有效時,存儲芯片將開放並驅動數據到總線 - 芯片WE*與系統的寫命令線相連
當芯片被選中、且寫命令有效時,允許總線數據寫入存儲芯片
7. 存儲芯片與CPU的配合
- 總線驅動
- CPU的總線驅動能力有限
- 單向傳送的地址和控制總線,可采用三態鎖存器和三態單向驅動器等來加以鎖存和驅動
- 雙向傳送的數據總線,可以采用三態雙向驅動器來加以驅動
- 時序配合
- 分析存儲器的存取速度是否滿足CPU總線時序的要求
如果不能滿足:考慮更換芯片,總線周期中插入等待狀態TW
8. 8086存儲器組織
- 尋址空間(20位地址線)
220=1M bytes的存儲器尋址空間
分段的概念 - 分段組織
段寄存器的16位值左移4位,得到的20位值加上16位的偏移量。 - 字與字節訪問
AD0 信號和BHE信號組合,選擇奇偶字節或字。
第6章 基本輸入輸出接口
I/O接口概述
- I/O接口是位於系統與外設間、用來協助完成數據傳送和控制任務的邏輯電路
- PC機系統板的可編程接口芯片、I/O總線槽的電路板(適配器)都是接口電路
- 信號轉換
對信號的形式和數據的格式進行變換
微機直接處理:數字量、開關量、脈沖量 - 數據緩沖
對輸入輸出數據進行緩沖和鎖存
輸出鎖存緩沖環節,輸入鎖存緩沖環節 - 對I/O端口進行尋址
- 與CPU和I/O設備進行聯絡
I/O接口的典型結構
1. 接口電路的內部結構
- 數據寄存器
保存外設給CPU和CPU發往外設的數據 - 狀態寄存器
保存外設或接口電路的狀態 - 控制寄存器
保存CPU給外設或接口電路的命令
2. 接口電路的外部特性
- 面向CPU一側的信號:用於與CPU連接、主要是數據、地址和控制信號
- 面向外設一側的信號:用於與外設連接、提供的信號種類繁多、功能定義、時序及有效電平等差異較大
3. 接口電路芯片的分類
- 通用接口芯片
支持通用的數據輸入輸出和控制的接口芯片 - 面向外設的專用接口芯片
針對某種外設設計、與該種外設接口 - 面向微機系統的專用接口芯片
與CPU和系統配套使用,以增強其總體功能
4. 接口電路的可編程性
3. I/O端口的編址
- 數據寄存器、狀態寄存器和控制寄存器占有的I/O地址常依次被稱為數據端口、狀態端口和控制端口,用於保存數據、狀態和控制信息
- 兩類編排形式
- 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
- 每個端口地址對應一個字節空間
- 尋址方式
- 直接尋址:只用於尋址00H ~ FFH前256個端口,操作數i8表示端口號
- 間接尋址:可用於尋址全部64K個端口,DX寄存器的值就是端口號,對端口號大於FFH的端口只能采用間接尋址方式
- 數據交換
- 如果輸入輸出一個字節,使用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控制
- DMA傳送
DMA讀存儲器:存儲器 → 外設
DMA寫存儲器:存儲器 ← 外設 - 自動增減地址和計數,判斷傳送完成否
傳送方式的比較
- 無條件傳送:慢速外設需與CPU保持同步
- 查詢傳送: 簡單實用,效率較低
- 中斷傳送:外設主動,可與CPU並行工作,但每次傳送需要大量額外時間開銷
- DMA傳送:DMAC控制,外設直接和存儲器進行數據傳送,適合大量、快速數據傳送
第7章 中斷控制接口
1. 8088中斷系統
- 8088的中斷系統采用向量中斷機制
- 能夠處理256個中斷
- 用中斷向量號0~255區別
- 可屏蔽中斷還需要借助專用中斷控制器Intel 8259A實現優先權管理
1. 8088的中斷類型
- 內部中斷:除法錯中斷、指令中斷、溢出中斷、單步中斷
- 外部中斷:非屏蔽中斷、可屏蔽中斷
2. 8088的中斷響應過程

- 8088各種中斷源的優先權,實際上是指被識別出來的先后
- 多種中斷同時請求時,最先響應的則可能是單步中斷或NMI中斷

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的內部結構和引腳
- 中斷控制
- 中斷請求寄存器IRR
保存8條外界中斷請求信號IR0~IR7的請求狀態
Di位為1表示IRi引腳有中斷請求;為0表示無請求 - 中斷服務寄存器ISR
保存正在被8259A服務着的中斷狀態
Di位為1表示IRi中斷正在服務中;為0表示沒有被服務 - 中斷屏蔽寄存器IMR
保存對中斷請求信號IR的屏蔽狀態
Di位為1表示IRi中斷被屏蔽(禁止);為0表示允許
- 與處理器接口

- 中斷級連
- 一個系統中,8259A可以級連,有一個主8259A,若干個(最多8個)從8259A
- 級連時,主8259A的三條級連線CAS0~CAS2作為輸出線,連至每個從8259A的CAS0~CAS2
- SP/EN在非緩沖方式下,規定該8259A是主片(SP=1)還是從片(SP=0)
3. 8259A的工作方式
- 設置優先權方式
- 普通全嵌套方式
- 特殊全嵌套方式
- 優先權自動循環方式
- 結束中斷處理方式
- 8259A利用中斷服務寄存器ISR判斷:
某位為1,表示正在進行中斷服務;
該位為0,就是該中斷結束服務。 - 自動中斷結束方式
- 普通中斷結束方式,配合全嵌套優先權方式使用
- 特殊中斷結束方式,配合循環優先權方式使用
- 屏蔽中斷源方式
- 普通屏蔽方式
將IMR的Di位置1,則對應的中斷IRi被屏蔽 - 特殊屏蔽方式
將IMR的Di位置1,對應的中斷IRi被屏蔽的同時,使ISR的Di位置0
- 中斷觸發方式
- 邊沿觸發方式
- 電平觸發方式
- 數據線連接方式
- 緩沖方式
8259A的數據線需加緩沖器予以驅動
8259A把SP/EN引腳作為輸出端,輸出允許信號,用以鎖存或開啟緩沖器 - 非緩沖方式
SP/EN引腳為輸入端
若8259A級連,由其確定是主片或從片
4. 8259A的編程
- 初始化命令字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
- 操作命令字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碼)計數
- 計數器結構分析
- 計數初值存於預置寄存器;
- 在計數過程中,減法計數器的值不斷遞減,而預置寄存器中的預置不變。
- 輸出鎖存器用於寫入鎖存命令時,鎖定當前計數值
- 計數器的3個引腳
- CLK時鍾輸入信號——在計數過程中,此引腳上每輸入一個時鍾信號(下降沿),計數器的計數值減1
- GATE門控輸入信號——控制計數器工作,可分成電平控制和上升沿控制兩種類型
- OUT計數器輸出信號——當一次計數過程結束(計數值減為0),OUT引腳上將產生一個輸出信號
8253/8254的工作方式
- 方式0 計數結束中斷
- 方式1 可編程單穩脈沖
- 方式2 頻率發生器(分頻器)
- 方式3 方波發生器
- 方式4 軟件觸發選通信號
- 方式5 硬件觸發選通信號
- 注意
- 處理器寫入8253的計數初值只是寫入了預置寄存器,之后到來的第一個CLK輸入脈沖(需先由低電平變高,再由高變低)才將預置寄存器的初值送到減1計數器。
- 從第二個CLK信號的下降沿,計數器才真正開始減1計數。
8253/8254的編程
第9章 DMA控制接口
DMA控制器8237A
- 每個8237A芯片有4個DMA通道,就是有4個DMA控制器
- 每個DMA通道具有不同的優先權
- 每個DMA通道可以分別允許和禁止
- 每個DMA通道有4種工作方式
- 一次傳送的最大長度可達64KB
- 多個8237A芯片可以級連,擴展通道數
1. 8237A的內部結構和引腳
- 請求與響應信號
- DREQ0~DREQ3:DMA通道請求
- HRQ:總線請求
- HLDA:總線響應
- DACK0~DACK3:DMA通道響應
- DMA傳送控制信號
- A0~A7:地址線。輸出低8位存儲器地址。
DB0~DB7:數據線。輸出高8位存儲器地址 - ADSTB:地址選通
- AEN:地址允許。
- MEMR*:存儲器讀
- MEMW*:存儲器寫
- IOR*:I/O讀
- IOW*:I/O寫
- READY:准備好
- EOP*:過程結束。DMA傳送過程結束,輸出一個低有效脈沖。
- 處理器接口信號
- DB0~DB7:數據線。
- A0~A3:地址線。
- CS*:片選
- IOR*:I/O讀。讀取8237A內部寄存器。
- IOW*:I/O寫。寫入8237A內部寄存器。
- CLK:時鍾。控制芯片內部操作和數據傳輸。
- RESET:復位。使8237A處於初始狀態。
8237A的兩種工作狀態
- 空閑周期:
作為接口電路,受CPU控制的工作狀態 - 有效周期:
作為DMAC控制DMA傳送的工作狀態

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