Z187-合集-微機(jī)原理與接口技術(shù)-課件_第1頁
Z187-合集-微機(jī)原理與接口技術(shù)-課件_第2頁
Z187-合集-微機(jī)原理與接口技術(shù)-課件_第3頁
Z187-合集-微機(jī)原理與接口技術(shù)-課件_第4頁
Z187-合集-微機(jī)原理與接口技術(shù)-課件_第5頁
已閱讀5頁,還剩861頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1第3章

匯編語言與程序設(shè)計2主要內(nèi)容:指令系統(tǒng)的一般概念對操作數(shù)的尋址方式六大類指令的操作原理:操作碼的含義指令對操作數(shù)的要求指令執(zhí)行的結(jié)果3一、概述41.指令系統(tǒng)與程序指令:就是指示計算機(jī)進(jìn)行某一工作的命令。程序是為求解某一問題或進(jìn)行某項工作的若干條指令的有序集合。5指令格式操作碼操作數(shù)說明指令的類型與功能地址域參加操作的數(shù)據(jù)或操作結(jié)果存放的地址6指令格式:

零操作數(shù)指令:操作碼單操作數(shù)指令:操作碼操作數(shù)雙操作數(shù)指令:操作碼操作數(shù),操作數(shù)多操作數(shù)指令:三操作數(shù)及以上7指令格式:

單字節(jié)雙字節(jié)3字節(jié)4字節(jié)8指令格式操作碼[操作數(shù)],[操作數(shù)]目的操作數(shù)源操作數(shù)參加操作的數(shù)據(jù)或結(jié)果存放的地址匯編語言基本概念用二進(jìn)制代碼表示指令系統(tǒng)的語言稱為機(jī)器語言;用機(jī)器語言設(shè)計的程序稱為機(jī)器語言程序。9匯編語言基本概念用英文助記符表示指令系統(tǒng)的語言稱為匯編語言,比如用ADD、SUB、JMP表示加、減、轉(zhuǎn)移等操作。匯編語言必須轉(zhuǎn)換成機(jī)器語言,計算機(jī)才能被識別和執(zhí)行。這一轉(zhuǎn)換過程稱為匯編,由專門的匯編程序進(jìn)行。用匯編語言指令編寫的程序稱為匯編語言程序。在計算機(jī)中,一條匯編語言指令對應(yīng)于一條機(jī)器語言指令。因此,匯編語言指令實際上是機(jī)器指令的符號化表示。10匯編語言基本概念把用匯編語言編寫的程序稱為源程序。把經(jīng)匯編而生成的機(jī)器語言程序稱為目標(biāo)程序或目標(biāo)代碼。用來說明匯編過程,或?qū)R編過程進(jìn)行輔助說明的指令,稱為偽指令。11128086尋址方式在指令中,操作數(shù)或操作數(shù)的地址可用多種方式來表示,統(tǒng)稱為尋址方式。同一條指令可以有不同的尋址方式,以說明不同的操作對象。13數(shù)據(jù)類型在計算機(jī)中,二進(jìn)制數(shù)據(jù)有多種類型或用途。一種是指令處理的對象,即操作數(shù);另一種是指令字;第三種是操作數(shù)的地址。在指令中,操作數(shù)又分為兩種,一種是參加運(yùn)算或由計算機(jī)處理的對象,即數(shù)據(jù)操作數(shù),簡稱為數(shù)據(jù);另一種表示轉(zhuǎn)移指令的目標(biāo)地址,即轉(zhuǎn)移地址。1415立即數(shù):由指令直接給出寄存器數(shù)據(jù):操作數(shù)存放在寄存器中存儲器數(shù)據(jù):操作數(shù)存在存儲器中數(shù)據(jù)操作數(shù)的分類16轉(zhuǎn)移地址操作數(shù)

其表示方式可以在轉(zhuǎn)移指令中直接給出,也可根據(jù)某一尋址方式經(jīng)計算后求得。17立即數(shù)操作數(shù)立即數(shù)只能作為源操作數(shù)。其本身是參加操作的數(shù)據(jù),可以是8位或16位。例:MOVAX,1234HMOVBL,22H立即數(shù)無法作為目的操作數(shù);立即數(shù)可以是無符號或帶符號數(shù),其數(shù)值應(yīng)在可取值范圍內(nèi)。18寄存器操作數(shù):參加運(yùn)算的數(shù)存放在指令給出的寄存器中,可以是16位或8位。通用寄存器存放數(shù)據(jù)或偏移地址;段寄存器數(shù)據(jù)的段基地址;例:MOVAX,BXMOVDL,CH19存儲器操作數(shù)參加運(yùn)算的數(shù)存放在存儲器的某一個或某兩個單元中;表現(xiàn)形式:[],表示數(shù)據(jù)存放單元的偏移地址(或EA);立即數(shù)或寄存器20存儲器操作數(shù)例例:MOVAX,[1200H]

-表示將偏移地址為1200H和1201H兩單元的內(nèi)容送到AX中。

22H11H1200H偏移地址AHAL┇

21二、尋址方式尋址方式-如何尋找內(nèi)存操作數(shù)。在8086/8088中,地址是由兩部分組成:段基址:單元所在段的基地址,大部分情況下在數(shù)據(jù)段寄存器DS內(nèi);段內(nèi)偏移量:此單元距離段基地址的距離。段內(nèi)偏移量為適應(yīng)各種數(shù)據(jù)結(jié)構(gòu)的需要,可有幾個部分組成,不同尋址方式的構(gòu)成部分不同。即:不同尋址方式實質(zhì)上是構(gòu)成段內(nèi)的偏移量的方法不同。2223尋址方式

尋找操作數(shù)所在地址的方法(數(shù)據(jù)尋址方式)尋找轉(zhuǎn)移地址的方法(轉(zhuǎn)移地址尋址方式)本節(jié)數(shù)據(jù)尋址方式分類24251.立即數(shù)尋址指令中的源操作數(shù)是立即數(shù),即源操作數(shù)是參加操作的數(shù)據(jù)本身;操作數(shù)直接存放在指令中,緊跟在操作碼之后;例:MOVAX,1200H12H00HAHALMOV代碼段┇

高地址單元內(nèi)容放高8位,低地址單元內(nèi)容放低8位26例如指令:

MOVAL,5

MOV

AX,2790H注意:立即數(shù)可以是8位或16位;對于16位數(shù)據(jù),低字節(jié)放在低地址,高字節(jié)在高地址;立即數(shù)只能是源操作數(shù),不能是目的操作數(shù);此方式執(zhí)行時直接從隊列取立即數(shù),不另占總線周期,執(zhí)行速度很快;經(jīng)常用于給寄存器或存儲單元賦初值。27282.寄存器尋址是指令操作數(shù)域給出存放操作數(shù)的寄存器。例:MOVAX,BXAXBX例:指令執(zhí)行前:(AX)=3064H(SS)=1234H,MOVSS,AX指令執(zhí)行后:(SS)=3064H,(AX)保持不變。29指令執(zhí)行前指令執(zhí)行后操作數(shù)可以是8位或16位寄存器;也可以是段寄存器、地址指針或變址寄存器;該尋址方式可以減少指令長度;因為操作數(shù)在寄存器中,不需要訪問存儲器,運(yùn)算速度較高;常用于存、取寄存器中的數(shù)。30313.直接尋址是指令操作數(shù)域給出的是存放操作數(shù)地址的偏移量,也稱為有效地址,常用EA表示。即:操作數(shù)是存儲器操作數(shù);[]內(nèi)是用16位常數(shù)表示數(shù)據(jù)所在單元的偏移地址;

操作數(shù)在內(nèi)存中的偏移地址由指令直接給出;操作數(shù)默認(rèn)在數(shù)據(jù)段,段基地址由DS給出;32

MOVBX,[2000H]執(zhí)行前(DS)=4000H,EA=2000H,

(42000H)=1FH,(42001H)=75H。執(zhí)行后( BX)=751FH3334直接尋址例:MOVAX,[1200H]例:MOVAX,ES:[1200H]22H11H1200H偏移地址┇

數(shù)據(jù)段AHAL附加段例:MOVAX,[3100H](DS)=6000H,(63100H)=3050H,則:

(AX)=3050H35可以用符號地址來代替數(shù)值地址以表示操作數(shù)的偏移地址;MOVAX,[VALUE]符號地址出現(xiàn)在指令中時,可省略方括號;MOVAX,DATA直接尋址方式適用于存、取存儲器變量。36374.寄存器間接尋址指令操作數(shù)給出存放操作數(shù)地址偏移量的寄存器;操作數(shù)的偏移地址在形式上用“[間址寄存器]”表示。操作數(shù)的段地址根據(jù)所選擇的通用寄存器決定。BX,SI,DI或BP。段寄存器中的的基地址左移4位與16位偏移量相加,生成20位的物理地址。38設(shè)(DS)=3000H,(BX)=3000H,執(zhí)行指令

MOVAX,[BX]執(zhí)行后(AX)=2C7DH。3940寄存器間接尋址例例:設(shè)BX=1200H執(zhí)行:MOVAX,[BX]22H11H1200H偏移地址AHAL┇

1122數(shù)據(jù)段代碼段MOV41寄存器間接尋址由寄存器間接給出操作數(shù)的偏移地址;存放偏移地址的寄存器稱為間址寄存器,包括:BX,BP,SI,DI操作數(shù)的段地址(數(shù)據(jù)處于哪個段)取決于選擇哪一個間址寄存器:

BX,SI,DIBP默認(rèn)在數(shù)據(jù)段DS默認(rèn)在堆棧段SS42寄存器間接尋址寄存器間接尋址基址尋址(間址寄存器為基址寄存器BX,BP)變址尋址(間址寄存器為變址寄存器SI,DI)例:MOVBX,[DI](DS)=6000H,(DI)=2000H,

物理地址PA=62000H,假定:(62000H)=50A0H,則:(BX)=50A0H.43指令操作數(shù)域給出的是一個基址寄存器和一個偏移量,基地址與偏移量相加,作為操作數(shù)地址的偏移地址EA。段地址左移4位,與有效地址相加,生成20位物理地址。445寄存器相對尋址例如指令:MOVAX,DATA[DI]執(zhí)行前(DS)=3000H,(DI)=2000H,

DATA=300H,執(zhí)行后(AX)=201AH。454647例:設(shè):DS=2000H,BX=0220H,DATA=05H執(zhí)行指令:MOVAX,[BX+DATA]之后AX=[20225H]例:(SS)=5000H,(BP)=3000H,COUNT=2040H,(AX)=1234H,指令執(zhí)行后:

EA=5040H,PA=55040H,假如(55040H)=5548H,則:(AX)=5548H48496基址加變址尋址操作數(shù)的偏移地址(EA)為:基址寄存器(BX/BP)的內(nèi)容+變址寄存器(SI/DI)的內(nèi)容;MOVAX,[BX][SI]或MOVAX,[BX+SI]操作數(shù)的段地址由所選擇的基址寄存器決定。例:執(zhí)行以下程序段后,AX=?MOVSI,1010HMOVBX,0202HMOVAX,[SI+BX]5051基址、變址尋址例題目分析:第3指令為基址變址尋址,存儲器操作數(shù)的偏移地址:=SI+BX=1010H+0202H=1212H因為基址寄存器為BX,故數(shù)據(jù)默認(rèn)在數(shù)據(jù)段。22H11H1212H偏移地址AHAL┇

1122數(shù)據(jù)段代碼段MOV例如指令:MOVAX,[BX][DI]或MOVAX,[BX+DI]執(zhí)行前(DS)=2100H,(BX)=0158H,(DI)=10A5H,執(zhí)行后(AX)=?52執(zhí)行指令前:(DS)=3200H,(BX)=0456H,(SI)=1094H,(334EAH)=4567H,指令執(zhí)行后:

EA=14EAH,PA=334EAH,(AX)=4567H53MOVAX,[BX][SI]547相對基址加變址尋址操作數(shù)的偏移地址=基址寄存器內(nèi)容+變址寄存器內(nèi)容+位移量。MOVAX,MASK[DI][BX]操作數(shù)的段地址由選擇的基址寄存器決定基址寄存器主要有BX、BP,變址寄存器主要有SI和DI。BX默認(rèn)DS,BP默認(rèn)SS。例:MOVAX,[BX+SI+MASK]MOVAX,[BX+MASK][SI]MOVAX,MASK[DI][BX]MOVAX,[BX]MASK[SI]MOVAX,[BX+SI]MASK5556例如指令:

MOVAX,MASK[BX][DI]MOVAX,MASK[BX+DI]MOVAX,[MASK+BX+DI]

執(zhí)行前(DS)=3000H,(BX)=2000H,(DI)=1000H,

MASK=0250H

執(zhí)行后(AX)=?MOVAX,MASK[DI][BX]執(zhí)行指令前:(DS)=3000H,(BX)=1346H,(DI)=0500H,MASK=1234H,(32A7AH)=4050H,指令執(zhí)行后:

EA=2A7AH,PA=32A7AH,(AX)=4050H。575859邏輯運(yùn)算與移位類指令邏輯運(yùn)算指令移位指令循環(huán)移位指令601、邏輯運(yùn)算指令61邏輯運(yùn)算指令對操作數(shù)的要求大多與MOV指令相同?!胺恰边\(yùn)算指令為單操作數(shù)指令,其操作數(shù)不能是立即數(shù);“非”運(yùn)算指令不影響標(biāo)志位;其他邏輯運(yùn)算指令會影響6個狀態(tài)標(biāo)志位,且不論執(zhí)行結(jié)果如何,都會使OF=CF=0621.“與”指令:格式:

ANDdest,src操作:兩操作數(shù)相“與”,結(jié)果送目標(biāo)地址。63“與”指令的應(yīng)用實現(xiàn)兩操作數(shù)按位相與的運(yùn)算ANDBL,[SI]使目標(biāo)操作數(shù)的某些位不變,某些位清零ANDAL,0FH在操作數(shù)不變的情況下使CF和OF清零ANDAX,AX64“與”指令應(yīng)用例ANDAX,1110111101111111B652.“或”運(yùn)算指令格式:

ORdest,src操作:

兩操作數(shù)相“或”,結(jié)果送目標(biāo)地址66“或”指令的應(yīng)用實現(xiàn)兩操作數(shù)相“或”的運(yùn)算ORAX,[DI]使某些位不變,某些位置“1”O(jiān)RCL,0FH在不改變操作數(shù)的情況下使OF=CF=0ORAX,AX“或”指令應(yīng)用例ORBX,0001000010000000B

67683.“非”運(yùn)算指令格式:NOTOPRD操作:操作數(shù)按位取反再送回原地址注:指令中的操作數(shù)不能是立即數(shù)指令的執(zhí)行對標(biāo)志位無影響“非”指令應(yīng)用例例:NOTBYTEPTR[BX]NOTAL69704.“異或”運(yùn)算指令格式:XOROPRD1,OPRD2操作:兩操作數(shù)相“異或”,結(jié)果送目標(biāo)地址例:XOR

BL,80H

XORAX,AX兩操作數(shù)自身相異或,結(jié)果=?“異或”指令應(yīng)用例1XORAL,10100000B71“異或”指令應(yīng)用例2例1:將AL中的第1、3、5、7位求反,0、2、4、6位保持不變。

MOVAL,0FH

XORAL,0AAH72指令應(yīng)用例3例3-10:將AX和CF清零。解:實現(xiàn)方法有多種,如下:方法1:ANDAX,0

方法2:XORAX,AX

方法3:SUBAX,AX73745.“測試”指令格式:TESTOPRD1,OPRD2操作:執(zhí)行“與”運(yùn)算,但運(yùn)算的結(jié)果不送回目標(biāo)地址。應(yīng)用:常用于在不破壞目標(biāo)操作數(shù)內(nèi)容的情況下測試操作數(shù)某些位是“1”還是“0”。“測試”指令例1例:TESTAL,02H

TESTAX,0040H75“測試”指令例2例:判斷A單元最低位是否為0.

假定(A)=0AEH.

程序:MOVAL,A

TESTAL,01H;指定測試AL的最低位JZEVEN;指定位=0轉(zhuǎn)EVEN……奇數(shù)處理

……EVEN:偶數(shù)處理76邏輯運(yùn)算綜合例15.設(shè)DL=55H,執(zhí)行指令后能使DL中的數(shù)據(jù)為OAAH的指令是()。

A.TESTDL,OAAH

B.ORDL,OAAHD.XORDL,OFFH題目答案:D77邏輯運(yùn)算綜合例26.無論BX中原有的數(shù)是奇數(shù)或偶數(shù),若要使BX中的數(shù)一定為奇數(shù),應(yīng)執(zhí)行的指令是()。

A.ADDBX,1B.ORBX,1

C.XORBX,1D.TESTBX,1題目答案:B78邏輯運(yùn)算綜合例37.將寄存器AL的低4位屏蔽,應(yīng)當(dāng)用的指令是()。

A.ANDAL,0FHB.ANDAL,0F0H

C.XORAL,0FHD.XORAL,0F0H題目答案:B

798.AND指令用于()。

A.取一個數(shù)中的某一位

B.置一個數(shù)中的某些位為1

C.將一個數(shù)置為0

D.置一個數(shù)中的某些位為0題目答案:D80812、移位指令非循環(huán)移位指令循環(huán)移位指令82移位指令移位指令在格式上應(yīng)注意的兩點(diǎn):移動一位時由指令直接給出;移動兩位及以上,則移位次數(shù)由CL指定。學(xué)習(xí)移位指令應(yīng)注意:操作碼的表示;指令的工作原理。831.

非循環(huán)移位指令邏輯左移SHL算術(shù)左移SAL邏輯右移SHR算術(shù)右移SAR84算術(shù)左移SAL算術(shù)左移指令:SALOPRD,1SALOPRD,CL有符號數(shù)移動一位后,若CF狀態(tài)與最高位不相等,則OF=1;否則OF=00CF邏輯左移SHL邏輯左移指令:SHLOPRD,1SHLOPRD,CL85無符號數(shù)移動一位后,若CF狀態(tài)與最高位不相等,則OF=1;否則OF=00CF算數(shù)左移和邏輯左移的移動原理相同86邏輯右移SHR格式:

SHROPRD,1SHROPRD,CL0CF無符號數(shù)的右移移動一位后,若次高位與最高位不相等,則OF=1;否則OF=087邏輯右移例:MOVAL,68HMOVCL,2SHRAL,CL0CF011010AL0000110100ALCF0000011010ALCF00移動1次移動2次0088算術(shù)右移SAR格式:

SAROPRD,1SAROPRD,CL有符號數(shù)的右移CF89非循環(huán)移位指令的應(yīng)用左移可實現(xiàn)乘法運(yùn)算每左移1位,相當(dāng)于給目標(biāo)操作數(shù)乘以2右移可實現(xiàn)除法運(yùn)算

每右移1位,相當(dāng)于給目標(biāo)操作數(shù)除以2

非循環(huán)移位指令例1例3-14:執(zhí)行以下指令

MOVAL,82H

SHRAL,1若換位SARAL,1,則結(jié)果是?90非循環(huán)移位指令例2例3-4-15:已知(AL)=80H,(CL)=03H,求執(zhí)行下列指令后,(AL)=?,CF=?

(1)SARAL,CL

(2)SHRAL,CL

解:(1)(AL)=0F0H,CF=0

(2)(AL)=10H,CF=091922.循環(huán)移位指令不帶進(jìn)位的循環(huán)移位帶進(jìn)位的循環(huán)移位左移ROL右移ROR左移RCL右移RCR指令格式、對操作數(shù)的要求與非循環(huán)移位指令相同93不帶進(jìn)位的循環(huán)移位ROL和RORCFCF94帶進(jìn)位的循環(huán)移位RCL和RCRCFCF95循環(huán)移位指令的應(yīng)用用于對某些位狀態(tài)的測試;高位部分和低位部分的交換;與非循環(huán)移位指令一起組成32位或更長字長數(shù)的移位。循環(huán)移位指令例1例:設(shè)CF=0,執(zhí)行以下程序段。

MOVAL,82H

ROLAL,1執(zhí)行結(jié)果:(AL)=05H,CF=1

若換為RCLAL,1執(zhí)行結(jié)果:(AL)=04H,CF=196循環(huán)移位指令例2例3-4-20:已知(AL)=12H,CF=1,求:執(zhí)行下列指令后,(AL)=?,CF=?

(1)RORAL,1

(2)RCRAL,1

解:(1)(AL)=09H,CF=0

(2)(AL)=89H,CF=097循環(huán)移位指令例3例:將一個16位無符號數(shù)x除以512,該數(shù)原存在以DATA為首地址的兩個連續(xù)單元中。MOVAX,DATA

MOVCL,9

SHRAX,CL

HLT98

第1章概述

第2章32/64位微處理器的組成原理

第3章匯編語言與程序設(shè)計

第4章存儲器體系結(jié)構(gòu)

第5章數(shù)據(jù)輸入/輸出方式

第6章總線技術(shù)

第7章并行I/O接口

第8章中斷控制

第9章串行I/O接口

第10章定時器/計數(shù)器

第11章DMA控制器

第12章A/D與D/A轉(zhuǎn)換

第13章多功能芯片組與PC機(jī)的主板結(jié)構(gòu)

第14章外設(shè)與多媒體技術(shù)微機(jī)原理10.1概述10.2可編程定時器/計數(shù)器8254

10.38254編程使用第10章定時器/計數(shù)器10.482380內(nèi)部定時器10.1概述

在計算機(jī)中經(jīng)常用到定時信號,例如動態(tài)存儲器刷新、系統(tǒng)日歷計時等。定時方法可以采用軟件方式,也可以采用硬件方式。軟件定時是設(shè)計一個延時子程序,以達(dá)到定時的目的。硬件定時是用專門的定時器/計數(shù)器來實現(xiàn),不占用CPU的時間可與CPU并行工作。

定時器實質(zhì)上是一個計數(shù)器。早期PC機(jī)使用的是8253,以后的PC/AT機(jī)使用的是8254。二者的外部引腳與功能基本相同,只是前者允許輸入的最高時鐘頻率是5MHz,后者是10MHz。

在以后的一些兼容機(jī)中使用MC146818作為定時芯片?,F(xiàn)在多使用多功能芯片中包含的定時器。10.2可編程定時器/計數(shù)器8254

8254包含有3個16位計數(shù)器,可按二進(jìn)制或十進(jìn)制計數(shù),有6種工作方式。

10.2.1內(nèi)部結(jié)構(gòu)與引腳功能

10.2.2工作方式

10.2.1內(nèi)部結(jié)構(gòu)與引腳功能1.內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu)如圖10-1(a)所示,3個計數(shù)器、1個控制寄存器、1個8位數(shù)據(jù)總線緩沖器以及讀/寫控制電路。3個計數(shù)器各16位,獨(dú)立工作。每個計數(shù)器如圖10-2所示,包括1個16位初值寄存器CR、1個減1計數(shù)器CE和1個輸出鎖存器OL。另有控制邏輯電路、控制字寄存器和狀態(tài)字寄存器??刂谱旨拇嫫骱蜖顟B(tài)字寄存器為3個計數(shù)器共用。計數(shù)器工作時可設(shè)定為16位,也可設(shè)定為8位。設(shè)置計數(shù)初值時,16位計數(shù)值分兩次寫入。一旦寫入,自動送入減1計數(shù)器。當(dāng)門控輸入信號GATE有效時,減1計數(shù)器CE按時鐘信號CLK減1計數(shù)。減為0時,由OUT端輸出計數(shù)回零信號,在計數(shù)過程中,鎖存器OL跟隨CE的內(nèi)容。圖10-1

在8254內(nèi)部設(shè)置有4個寄存器,由地址A1A0選擇和片選信號CS確定,如表10-1所示。

表10-18254內(nèi)部地址分配CSA1A0RDWR功能00000001101111110000寫計數(shù)器0寫計數(shù)器1寫計數(shù)器2寫方式控制字00000001101100001111讀計數(shù)器0讀計數(shù)器1讀計數(shù)器2無效圖10-22.引腳信號

8254有24個引腳,采用雙列直插式封裝,其信號分布如圖10-1(b)所示,功能如下:

D7~D0:數(shù)據(jù)總線,雙向,8位,與外部數(shù)據(jù)總線連接。

WR:寫信號輸入,低電平有效。

RD:讀信號,輸入,低電平有效。

CS:片選信號,輸入,低電平有效。

A1A0:地址信號,輸入,用于選擇內(nèi)部寄存器。

CLK2~CLK0

:3個計數(shù)器計數(shù)信號輸入。

OUT2~OUT0

:3個計數(shù)器計數(shù)回零輸出,高電平有效。

GATE2~GATE0

:3個計數(shù)器外部門控信號輸入端,高電平或上升沿有效。

VCC:+5V電源。

GND:地。10.2.2工作方式8254有6種工作方式,可通過編程選擇。

1.方式0計數(shù)結(jié)束產(chǎn)生中斷(1)寫入控制字后OUT輸出低電平,并且一直保持。計數(shù)回0時,OUT輸出高電平,又一直保持,直到寫入新的計數(shù)初值時再輸出低電平。其時序如圖10-3所示。圖10-3

(2)GATE=1,允許計數(shù);GATE=0,禁止計數(shù)。如果在計數(shù)過程中修改計數(shù)初值,則在下一時鐘脈沖 2.方式1可重復(fù)觸發(fā)的單穩(wěn)態(tài)觸發(fā)器新寫入的計數(shù)初值送入減1計數(shù)器,然后按新值計數(shù)。(1)寫入控制字后OUT輸出高電平,寫入計數(shù)初值后必須由GATE的上升沿觸發(fā)計數(shù)。計數(shù)開始OUT變?yōu)榈碗娖剑钡接嫈?shù)回0時再輸出高電平。若要再次計數(shù),必須用GATE上升沿重新觸發(fā)。方式1時序如圖10-4所示。圖10-4

(2)在計數(shù)過程中寫入新的計數(shù)初值,當(dāng)前計數(shù)狀態(tài)不受影響。若有GATE上升沿觸發(fā),則按新的計數(shù)初值重新計數(shù),直到計數(shù)回0,OUT變?yōu)楦唠娖?,低電平寬度為兩次計?shù)值之和。

3.方式2分頻器是一種(n-1):1的分頻器工作方式,特點(diǎn)如下:圖10-5

(1)寫入控制字后OUT輸出高電平,寫入初值后的下一時鐘送入減1計數(shù)器,減1計數(shù)。減到1時,OUT輸出低電平,維持1個時鐘周期后又變?yōu)楦唠娖?,然后重新減1計數(shù)。其時序如圖10-5所示。(2)GATE=1,允許計數(shù);GATE=0,停止計數(shù)。

4.方式3方波發(fā)生器(1)寫入控制字后OUT輸出高電平,寫入計數(shù)初值后的下一時鐘送入減1計數(shù)器,減1計數(shù)。當(dāng)減1到初值的一半時輸出低電平,并繼續(xù)減1計數(shù)。當(dāng)計數(shù)回0時輸出高電平,即一個周期。之后,又開始下一個周期的減1計數(shù)。其時序如圖10-6所示。(2)當(dāng)計數(shù)初值n為偶數(shù)時,輸出對稱方波。當(dāng)計數(shù)初值n為奇數(shù)時,高電平的寬度比低電平的寬度多1個時鐘周期。

(3)GATE=1時,允許計數(shù);GATE=0時,停止計數(shù)。GATE的上升沿啟動重新計數(shù)。若在計數(shù)過程中寫入新的計數(shù)初值,則在下一時鐘周期按新值計數(shù)。

5.方式4軟件觸發(fā)的選通信號發(fā)生器圖10-6

(1)寫入控制字后OUT輸出高電平,寫入計數(shù)初值后的下一時鐘送入減1計數(shù)器,減1計數(shù)。計數(shù)回0時輸出低電平,持續(xù)1個時鐘周期后又變?yōu)楦唠娖?,即一個負(fù)脈沖信號,如圖10-7所示。(2)GATE=1時,允許計數(shù);GATE=0時停止計數(shù),輸出維持當(dāng)時的電平。

6.方式5硬件觸發(fā)的選通信號發(fā)生器(1)寫入控制字后OUT輸出高電平,寫入計數(shù)初值后,必須在GAET的上升沿送減1計數(shù)器,減1計數(shù)。計數(shù)回0,輸出一個時鐘周期的低電平,然后回到高圖10-7電平,即一個負(fù)脈沖。由于需要GATE的上升沿觸發(fā),故稱硬件觸發(fā)的脈沖發(fā)生器,時序如圖10-8所示。(2)計數(shù)過程中若GATE有上升沿出現(xiàn),則在下一時鐘脈沖計數(shù)初值重新送入減1計數(shù)器,重新減1計數(shù)。(3)計數(shù)過程中若寫入新的計數(shù)初值,而無GATE上升沿觸發(fā),當(dāng)前計數(shù)狀態(tài)不受影響。如果有GATE上升沿觸發(fā),則重新按照新的計數(shù)初值計數(shù)。圖10-810.38254編程使用

10.3.1控制字10.3.2編程使用10.3.38254在PC機(jī)中的應(yīng)用10.3.1控制字

從編程的角度來看,8254控制字有兩個。一個設(shè)置工作方式;另一個用來設(shè)置讀回命令,這兩個控制字共用一個地址,由其中的標(biāo)志位區(qū)分。

1.方式控制字方式控制字一共有8位,用來設(shè)置3個計數(shù)器的工作方式、計數(shù)方式以及計數(shù)器的長度,其格式如圖10-9所示。由于計數(shù)器是減1計數(shù),且先減1,再判斷,因此計數(shù)初值為0時計數(shù)值最大。(2)讀回控制字當(dāng)控制字的最高2位為11時表示讀回命令,其格式如圖10-10所示,鎖存相應(yīng)信息,即計數(shù)值/狀態(tài)信息鎖存。狀態(tài)字格式如圖10-11所示。其中D5-D0是以前寫入方式控制字所確定的值。D6表示CR的值是否已裝入CE中,若D6=0,表示已裝入,可以讀?。蝗鬌6=1,則讀取無效。D7表示OUT圖10-9圖10-10圖10-1110.3.2編程使用

8254的編程主要是設(shè)置工作方式,寫入計數(shù)初值,在計數(shù)過程中讀取計數(shù)值和狀態(tài)信息。

1.寫操作寫操作主要是寫入控制字和計數(shù)初值,即初始化。8254有3個計數(shù)器,初始化時可以一個一個地進(jìn)行,也可以先設(shè)置3個計數(shù)器的工作方式,然后寫入各自的計數(shù)初值。前者如圖10-12,后者如圖10-13所示。但是必須先寫入方式控制字,再寫入計數(shù)初值。對于16位計數(shù)初值,先寫入低字節(jié),再寫入高字節(jié)。圖10-12單個計數(shù)器初始化圖10-13集中寫入控制字再寫入計數(shù)初值2.讀操作讀操作有兩種方式,一種是直接讀,讀取計數(shù)初值;另一種是先發(fā)鎖存命令,然后再讀,讀取當(dāng)前計數(shù)值。在發(fā)鎖存命令時可以使用讀回控制字,也可以使用方式控制字。若用方式控制字,其中D5D4=00,D7D6用來選擇計數(shù)器,其余低4位任意。若設(shè)控制字端口地址為TIM,計數(shù)器1按雙字節(jié)計數(shù),讀取當(dāng)前計數(shù)值的程序如下:

MOV

DX,TIMMOV

AL,01000000BOUT

DX,AL;發(fā)鎖存命令

IN

AL,DX;讀取低字節(jié)

MOV

AH,ALIN

AL,DX;讀取高字節(jié)

XCHG

AH,AL、10.3.38254在PC機(jī)中的應(yīng)用

在PC機(jī)中,8254內(nèi)部的三個計數(shù)器分別用于日歷計時、動態(tài)存儲器定時刷新和產(chǎn)生揚(yáng)聲器音頻信號,其硬件連接如圖10-14所示。3個計數(shù)器的定時計數(shù)時鐘相同,由PCLK二分頻產(chǎn)生,頻率為1.1931816MHz。片選信號由主機(jī)I/O地址譯碼產(chǎn)生。主機(jī)系統(tǒng)分配給定時器端口地址范圍為40H-5FH,當(dāng)I/O地址A9A8A7A6A5=00010時,T/CCS

為低電平有效,8254選中,但是實際僅使用了40H-43H。(1)計數(shù)器0

計數(shù)器0選擇工作方式3,計數(shù)初值為0,由OUT0產(chǎn)生連續(xù)方波,其頻率為1.1931816MHz/65536=18.2Hz,周期為54.9ms。GATE0接+5V,處于常啟狀態(tài)。OUT0直接聯(lián)接到82C59A中斷控制器的IR0,利用方波上升沿發(fā)中斷請求,圖10-148254在PC機(jī)中的應(yīng)用用于日歷鐘計時。在中斷服務(wù)程序中,時間值保存在BIOS數(shù)據(jù)區(qū)的兩個變量TIMER-LO和TIMER-HI中。計數(shù)器0初始化程序如下:

MOVAL,36H;計數(shù)器0雙字節(jié),方式3,二進(jìn)制計數(shù)

OUT43H,AL;寫入控制寄存器

MOV

AL,0OUT

40H,AL;寫低字節(jié)

OUT

40H,AL;寫高字節(jié)

(2)計數(shù)器1

計數(shù)器1用來向主機(jī)定時提出動態(tài)RAM刷新請求,GATE1接+5V,處于常啟狀態(tài)。選擇工作方式2,以字節(jié)計數(shù),初始化程序如下:

MOV

AL,54H;計數(shù)器1寫入低字節(jié),方式2,二進(jìn)制計數(shù)

OUT

43H,AL;寫入控制寄存器

MOV

AL,18;設(shè)置低字節(jié)計數(shù)值18OUT

41H,AL;將18寫入計數(shù)器1

啟動工作后,由OUT1產(chǎn)生連續(xù)負(fù)脈沖,其頻率為1.1931816MHz/18=66.2878KHz,周期為15.0857μs。OUT1連接到D觸發(fā)器的觸發(fā)脈沖輸入端,而D觸發(fā)器的數(shù)據(jù)輸入端接+5V,這樣可利用負(fù)脈沖的上升沿將觸發(fā)器置1,輸出高電平,定時請求DRAM刷新。(3)計數(shù)器2

計數(shù)器2用來產(chǎn)生揚(yáng)聲器的音頻信號。GATE2由TIME2GATE信號控制,選擇工作方式3,以雙字節(jié)計數(shù),初始化程序如下:

MOVAL,0B6H;選擇計數(shù)器2,寫雙字節(jié),方式3,二進(jìn)制計數(shù)

OUT43H,AL;寫入控制寄存器

MOVAX,533HOUT42H,AL;寫入低字節(jié)

MOVAL,AHOUT42H,AL;寫入高字節(jié)計數(shù)初值為533H,使OUT2輸出頻率為896(1.1931816MHz/533H)HZ的脈沖信號。TIME2GATE由程序設(shè)置,以確定是否啟用揚(yáng)聲器。另外,OUT2與SPKDATA相“與”后,經(jīng)SN75477送揚(yáng)聲器。SPKDATA由程序控制,以確定是否發(fā)聲報警,SN75477用于音頻功率放大。10.482380內(nèi)部定時器

10.4.1組成與功能

10.4.2在動態(tài)存儲器刷新中的應(yīng)用10.4.1組成與功能 82380中設(shè)置有4個16位的可編程定時器,其組成如圖10-15所示,功能與8254相同,但是計數(shù)時鐘信號由82380內(nèi)部產(chǎn)生。在4個定時器中,定時器0的輸出TOUT0與82380的內(nèi)部中斷輸入IR8連接,用作實時定時中斷請求,定時器1、2、3可作為通用定時器。在過去的一些PC機(jī)中,定時器1連接到動態(tài)存儲器刷新控制器,用于刷新定時;定時器2用于產(chǎn)生揚(yáng)聲器的音頻信號或者產(chǎn)生82380內(nèi)部的IR3中斷;定時器3用來產(chǎn)生82380內(nèi)部的IR0中斷。圖10-1582380內(nèi)部定時器 82380內(nèi)部定時器有兩個控制寄存器,CPU可設(shè)置4個定時器的工作方式,也可發(fā)讀回命令。其中,方式字1和讀回控制字1用來設(shè)置定時器0、1、2的工作方式和寫回。寫入控制寄存器1的格式與8254完全相同。方式寄存器2和讀回控制字2用來設(shè)置定時器3的工作方式和讀回,格式如圖10-16和10-17所示。方式控制字2的高兩位D7D6=00,用來選擇定時器3,其他各位的含義與8254方式控制字相同;讀回控制字2的D1用來選擇定時器3,D3、D2未用,其他各位與8254相同。圖10-16方式控制字格式圖10-17讀回控制字格式

為了與早期的PC機(jī)兼容,82380內(nèi)部定時器的I/O端口與8254在PC機(jī)中的端口地址保持兼容,如表10-2所示。表10-2

82380內(nèi)部定時器端口地址端口地址功能端口地址功能40H定時器0讀/寫44H定時器3讀/寫41H定時器1讀/寫45H保留42H定時器2讀/寫46H保留43H寫控制字147H寫控制字210.4.2在動態(tài)存儲器刷新中的應(yīng)用

在82380中除了定時器之外,還有8通道DMA控制器。每一個通道包括24位的字節(jié)計數(shù)器、2個32位地址寄存器以及相應(yīng)的控制邏輯電路,而且地址可以自增/自減。這樣,把某一通道與定時器連接起來,即可實現(xiàn)動態(tài)存儲器刷新控制。

實際上,動態(tài)存儲器刷新控制正是82380的多種功能之一。DRAM組成如圖10-18所示。定時器1用于刷新定時,時間到后發(fā)中斷請求,再由DMA控制器發(fā)總線請求HOLD,主機(jī)CPU響應(yīng)后即可進(jìn)行一次刷新,即按照當(dāng)前地址進(jìn)行一次讀操作,同時產(chǎn)生

信號,數(shù)據(jù)不輸出,地址計數(shù)器自增。完成一次刷新后,CPU收回總線。刷新時的總線請求優(yōu)先級最高。圖10-18DRAM刷新控制器第11章DMA控制器11.1概述11.2可編程DMA控制器8237A11.38237A工作狀態(tài)與編程使用11.482380內(nèi)部DMA控制器

DMA是由硬件來實現(xiàn)I/O設(shè)備與主存之間或者主存內(nèi)部的數(shù)據(jù)傳送,因此稱為存儲器直接存取方式??勺止?jié)傳送,也可按數(shù)據(jù)塊傳送,速度快,效率高。

DMA的概念和傳送過程已在5.2.4節(jié)介紹,這里主要介紹8237A的組成與工作過程。

8237A片內(nèi)有4個獨(dú)立的DMA通道和一組共用的基本控制邏輯電路,其組成如圖11-1所示。包括時序與控制邏輯、優(yōu)先級編碼邏輯、數(shù)據(jù)/地址緩沖器、命令控制電路、狀態(tài)寄存器、命令寄存器、暫存寄存器、暫存地址寄存器、暫存字節(jié)計數(shù)器、先/后觸發(fā)器和屏蔽寄存器等。每個通道又有相應(yīng)的寄存器。11.1概述返回11.2.2圖11-111.2可編程DMA控制器8237A

11.2.1引腳功能

11.2.2內(nèi)部結(jié)構(gòu)11.2.1引腳功能

8237采用雙列直插式封裝,有40個引腳,如圖11-2所示,其作用如下:

A3~A0:地址線,雙向,三態(tài),DMA傳送時輸出地址低4位;輸入時,選擇8237A的內(nèi)部寄存器。

A7~A4:地址線,輸出,三態(tài),DMA傳送時,輸出地址高4位。

DB7~DB0:數(shù)據(jù)線,雙向,三態(tài),數(shù)據(jù)傳送時作為8位數(shù)據(jù)線;DMA工作時,輸出高8位地址A15-A8,由ADSTB信號選通。圖11-2

IOW:I/O寫信號,雙向,三態(tài),低電平有效。

IOR:I/O讀信號,雙向,三態(tài),低電平有效。

MEMW:主存寫信號,輸出,三態(tài),低電平有效。

MEMR:主存讀信號,輸出,三態(tài),低電平有效。

ADSTB:地址選通信號,輸出,高電平有效,DMA傳送時選通

DB7~DB0輸出高8位地址A15~A8。

AEN:地址允許信號,輸出,高電平有效,DMA傳送時表示16位地址有效。

CS:片選信號,輸入,低電平有效。

RESET:高電平有效,復(fù)位后,清除命令、狀態(tài)、請求和暫存寄存器,屏蔽寄存器置1,禁止4個通道的DMA請求。

READY:準(zhǔn)備好信號,輸入,高電平有效,由DAM插入等待周期。

HRQ:總線請求信號,輸出,高電平有效,連接CPU的HOLD端。

HLDA:總線響應(yīng)信號,輸入,高電平有效,表示DMA控制器獲得總線控制權(quán)。

DREQ3~DREQ0:4個通道的DMA請求,輸入,可編程為高電平或者低電平有效,需維持到DMA響應(yīng)。

DACK3~DACK0:4個通道的DMA響應(yīng)信號,輸出,可編程為高電平或者低電平有效,DMA控制器獲得HLDA信號后,產(chǎn)生DACK信號,送I/O接口或設(shè)備。

CLK:時鐘信號,輸入,用于8237A基準(zhǔn)定時。

EOP:DMA傳送結(jié)束信號,雙向,低電平有效。輸入,強(qiáng)迫DMA傳送結(jié)束;輸出,表示DMA傳送結(jié)束。 11.2.2內(nèi)部結(jié)構(gòu)

8237A內(nèi)部組成如圖11-1所示,其功能通過內(nèi)部寄存器來實現(xiàn)。

1.當(dāng)前地址寄存器

存放DMA傳送時的16位存儲器地址,具有自增1或自減1功能;編程時,CPU可對其讀/寫。若DMA控制器設(shè)置成自動預(yù)置方式,當(dāng)每次字節(jié)計數(shù)為0或EOP出現(xiàn)低電平時,基地址寄存器中的初值自動裝入當(dāng)前地址寄存器。

2.基地址寄存器與當(dāng)前地址寄存器共用端口地址,存放DMA傳送時的地址初值;在編程時,與當(dāng)前地址寄存器被同時寫入。

3.當(dāng)前字節(jié)計數(shù)器存放當(dāng)前的字節(jié)數(shù),每個通道有一個16位的當(dāng)前字節(jié)計數(shù)器,可按字節(jié)減1計數(shù),當(dāng)計數(shù)值由0減至0FFFFH時,產(chǎn)生傳送結(jié)束信號EOP。若DMA設(shè)置成自動預(yù)置方式,當(dāng)EOP有效時,基字節(jié)計數(shù)器中的初值自動裝入當(dāng)前字節(jié)計數(shù)器中。

4.基字節(jié)計數(shù)器與當(dāng)前字節(jié)計數(shù)器共用端口地址,存放DMA傳送數(shù)據(jù)的字節(jié)數(shù);在編程時,與當(dāng)前字節(jié)計數(shù)器被同時寫入。

5.方式寄存器每個通道有一個方式寄存器,用來控制DMA傳送方式和方向,其格式如圖11-3所示:

D1D0:用于通道選擇。

D3D2:選擇通道DMA數(shù)據(jù)傳送類型。D4:若為1,表示自動預(yù)置,D4為0時,禁止自動預(yù)置。

D5:若為0,地址自增1;D5為1,地址自減1。

D6D7:用來定義DMA傳輸方式,共有4種,如圖所示。其中級聯(lián)連接方式如圖11-4所示。圖11-3

6.命令寄存器其格式和各位的定義如圖11-5所示,設(shè)置各通道的功能。復(fù)位后,所有位清0。

D0:控制存儲器到存儲器傳送。在存儲器到存儲器傳送時占用兩個通道,通道0存放源操作數(shù)地址,通道1存放目的地址。傳送一個字節(jié)需要兩個總線周期。

D1:與D0配合使用,當(dāng)D0為1時,且D1為1,存儲器源地址保持不變。圖11-4圖11-5命令寄存器

D2:啟/停8237A。

D3:在D0為0時起作用。當(dāng)D3為0,選擇普通時序,一次DMA傳送需用4個時鐘周期;當(dāng)D3為1,選擇壓縮時序,需3個時鐘周期。

D4:優(yōu)先權(quán)控制,D4為0時選擇固定優(yōu)先級,通道0級別最高;D4為1時,選擇循環(huán)優(yōu)先級方式。

D5:擴(kuò)展寫周期。D5為1,寫信號提前到狀態(tài)信號S3發(fā)出。對于速度較慢的外部設(shè)備,可通過READY信號控制,在狀態(tài)信號S3之后插入等待周期SW。

D6:DREQ有效電平控制位,D6為1,低電平有效;D6為0,高電平有效。

D7:DACK有效電平控制位,D7為1,高電平有效;D7為0,低電平有效。

7.請求寄存器

8237A的4個通道都有一個請求觸發(fā)器,共同構(gòu)成DMA請求寄存器。DMA請求可以由外部觸發(fā),也可以軟件設(shè)置。在存儲器到存儲器傳送時,只能由軟件設(shè)置,格式如圖11-6所示。其中D1D0標(biāo)識4個通道序號。

8.屏蔽寄存器屏蔽寄存器有兩個。一個是單通道屏蔽寄存器,另一個是主屏蔽寄存器。單通道屏蔽寄存器的格式如圖11-7(a)所示,D1D0標(biāo)識通道號,D2=1表示屏蔽,D2=0,不屏蔽。主屏蔽寄存器用來對8237A整體設(shè)置,即一次設(shè)置4個通道,其格式如圖11-7(b)所示。對屏蔽寄存器進(jìn)行一次寫操作,即可清除4個通道的屏蔽位,開放DMA請求,寫入地址為DMA+0EH。比如:

MOVDX,DMA+14OUTDX,AL圖11-6圖11-79.狀態(tài)寄存器

狀態(tài)寄存器共有8位,給出8237A每個通道的狀態(tài),其格式如圖11-8所示。

D3~D0標(biāo)識4個通道計數(shù)器是否停止。如果計數(shù)終止或外部產(chǎn)生EOP信號,相應(yīng)位置為1,停止DMA操作。D7~D4表示4個通道是否有DMA請求,1表示有請求,0表示沒有請求。10.暫存寄存器在存儲器到存儲器傳送時,暫存從存儲器中讀出的數(shù)據(jù)。傳送完畢,保留最后一次傳送的數(shù)據(jù)。在編程狀態(tài),其中的內(nèi)容可由CPU讀出,RESET復(fù)位時清0。圖11-811.先/后觸發(fā)器先/后觸發(fā)器清0,第1字節(jié)寫入寄存器的低8位,然后先/后觸發(fā)器自動置1,第2個字節(jié)寫入寄存器的高8位。同時,先/后觸發(fā)器自動清0。以上寄存器口地址與作用如表11-1所示。

8086地址線有20位(A19~A0),而8237A只能提供16位地址線(A15~A0)。為使用8237A來實現(xiàn)DMA傳送,常以硬件電路構(gòu)成4位頁面地址寄存器,每個通道各有一個。在進(jìn)行DMA傳送時,由頁面地址寄存器提供DMA傳送所需要的高4位地址A19~A16。表11-18237A寄存器地址與操作命令

寄存器端口地址通道讀操作寫操作DMA+0DMA+10讀當(dāng)前地址寄存器讀當(dāng)前字節(jié)計數(shù)器寫基/當(dāng)前地址寄存器寫基/當(dāng)前字節(jié)計數(shù)器DMA+2DMA+31讀當(dāng)前地址寄存器讀當(dāng)前字節(jié)計數(shù)器寫基/當(dāng)前地址寄存器寫基/當(dāng)前字節(jié)計數(shù)器DMA+4DMA+52讀當(dāng)前地址寄存器讀當(dāng)前字節(jié)計數(shù)器寫基/當(dāng)前地址寄存器寫基/當(dāng)前字節(jié)計數(shù)器DMA+6DMA+73讀當(dāng)前地址寄存器讀當(dāng)前字節(jié)計數(shù)器寫基/當(dāng)前地址寄存器寫基/當(dāng)前字節(jié)計數(shù)器DMA+8DMA+9DMA+10DMA+11DMA+12DMA+13DMA+14DMA+15共用讀狀態(tài)寄存器讀暫存寄存器寫命令寄存器寫請求寄存器寫單個通道屏蔽字寫方式字寄存器清除先/后觸發(fā)器復(fù)位芯片(主清除)清除屏蔽寄存器寫4個通道屏蔽寄存器11.38237A工作狀態(tài)與編程使用11.3.1工作狀態(tài)11.3.2編程使用11.3.3應(yīng)用舉例

11.3.1工作狀態(tài)

8237A的工作分為三個階段,也稱為狀態(tài),即空閑、DMA請求和傳送。

1.空閑狀態(tài)沒有外設(shè)的DMA請求,不進(jìn)行DMA傳送,DMA控制器處于空閑狀態(tài),常用SI表示。在空閑狀態(tài),如果DMA控制器沒有被屏蔽,則始終監(jiān)視DREQ輸入端。

2.DMA請求與響應(yīng)狀態(tài)在空閑狀態(tài),若DREQ端有DMA請求,則立即進(jìn)入DMA請求狀態(tài),DMA控制器向CPU發(fā)總線請求信號HRQ,并等待總線響應(yīng)。DMA請求與響應(yīng)狀態(tài)常用字母S0表示。在收到總線響應(yīng)信號HLDA之后,DMA控制器獲得總線控制權(quán),進(jìn)入DMA傳送狀態(tài)。

3.DMA傳送狀態(tài)

DMA傳送包含4個狀態(tài)周期,即S1~S4,以完成地址傳送和數(shù)據(jù)的讀/寫等操作。

S1:輸出地址允許信號AEN。僅當(dāng)高8位地址A15~A8更新時,才執(zhí)行S1狀態(tài)。即每傳送256次執(zhí)行一次S1狀態(tài)。

S2:輸出16位地址到存儲器,其中低8位由地址線A7~A0輸出,高8位由數(shù)據(jù)線DB7~DB0輸出。同時,向外設(shè)發(fā)DMA響應(yīng)信號DACK。

S3:輸出讀周期,即輸出存儲器讀MEMR或I/O讀IOR信號。如果超前寫,則同時發(fā)出存儲器寫MEMW或IO寫IOW信號。

S4:輸出寫周期,即輸出存儲器寫MEMW或I/O寫IOW信號。對于低速主存或外設(shè),可在S3之后插入1個或者多個等待周期SW。11.3.2編程使用

編程初始化后,8237A便自動控制數(shù)據(jù)的傳送。初始化程序包括以下幾個方面:(1)先對總線命令寄存器復(fù)位;(2)把起始地址的低8位和高8位分別寫入地址寄存器;(3)把字計數(shù)值的低8位和高8位分別寫入字節(jié)計數(shù)寄存器;(4)寫方式寄存器;(5)寫屏蔽寄存器;(6)寫命令寄存器。

下面結(jié)合IBMPC/XT中8237A的應(yīng)用來說明其初始化編程。8237A對應(yīng)的端口地址是0000H~000FH,下面以標(biāo)號DMA表示首地址0000H。8237A利用頁面寄存器74LS670提供最高4位地址A19~A16,其端口地址為0083H。

MOVAL,04;設(shè)置命令字

MOVDX,DMA+8OUTDX,AL;輸出控制命令,禁止8237A工作

MOVDX,DMA+0DHOUTDX,AL;發(fā)總清命令,使8237A復(fù)位

MOVDX,DMA+00H;指向通道0的地址寄存器

MOVCX,0004;設(shè)置循環(huán)次數(shù)WRITE:MOVAL,0FFHOUTDX,AL;通道0寫入地址低位

OUTDX,AL;通道0寫入地址高位,16位地址為0FFFFH

INCDXINCDX;指向通道1LOOPWRITE;循環(huán),向其余通道寫入16位地址0FFFFMOVDX,DMA+0BH;指向方式寄存器

MOVAL,58H;設(shè)置通道0方式字

OUTDX,AL;通道0單字節(jié),讀傳送,地址自增,自動預(yù)置

MOVAL,41H;設(shè)置通道1方式字

OUTDX,AL;通道1單字節(jié),校驗傳送,地址自增,無自動預(yù)置

MOVAL,42H;設(shè)置通道2方式字

OUTDX,AL;通道2方式,同通道1MOVAL,43H;設(shè)置通道3方式字

OUTDX,AL;通道3方式,同通道1

MOVDX,DMA+0AH;單屏蔽字寄存器地址

MOVAL,0OUTDX,AL;通道0清除屏蔽

MOVAL,01OUTDX,AL;通道1清除屏蔽

MOVAL,02OUTDX,AL;通道2清除屏蔽

MOVAL,03OUTDX,AL;通道3清除屏蔽

MOVDX,DMA+8;命令寄存器地址

MOVAL,00HOUTDX,AL

在發(fā)送控制命令字后,禁止存儲器到存儲器傳送,DACK低電平有效,DREQ高電平有效,固定優(yōu)先級,且啟動8237A工作。此時通道0開始對動態(tài)DRAM刷新。11.3.3應(yīng)用舉例

設(shè)某8086微型計算機(jī)配有DMA控制器8237A,端口地址為00H~0FH,通過初始化程序完成存儲器到存儲器的數(shù)據(jù)傳送。程序流程圖如圖11-9所示,程序如下:

STACKSEGMENTSTACKDW64DUP(?)

STACKENDSCODESEGMENGTASSUMECS:CODESTART:OUT0DH,AL

MOVAL,00H

OUT00H,AL;輸出地址低8位

MOVAL,40HOUT00H,AL;輸出地址高8位

MOVAL,00HOUT02H,AL;輸出地址低8位

MOVAL,30HOUT02H,AL;輸出地址高8位

MOVAL,0AHOUT01H,ALMOVAL,00HOUT01H,AL;輸出計數(shù)初值

MOVAL,0AHOUT03H,AL圖11-9

MOVAL,00HOUT03H,AL;輸出計數(shù)初值

MOVAL,88HOUT0BH,AL;通道0數(shù)據(jù)塊讀傳送

MOVAL,85HOUT0BH,AL;通道1數(shù)據(jù)塊寫傳送

MOVAL,81HOUT08H,AL;寫命令字

MOVAL,04HOUT09H,AL;通道0DMA請求

MOVAL,00HOUT0FH,AL;開放屏蔽

A1:JMPA1CODEENDSENDSTART11.482380內(nèi)部DMA控制器

11.4.1內(nèi)部組成

11.4.2工作方式

11.4.3內(nèi)部寄存器及功能11.4.1內(nèi)部組成 82380內(nèi)部DMA組成如圖11-10所示,可分為控制電路和寄存器兩大部分。控制電路包括DMA請求仲裁邏輯和過程控制電路。寄存器分為控制/狀態(tài)寄存器和通道寄存器兩類,每個通道有一組通道寄存器??刂?狀態(tài)寄存器分為兩組,一組用于通道0~通道3,稱為低通道組;另一組用于通道4~通道7,稱為高通道組。8個通道可以獨(dú)立使用,每一個通道中分配有24位字節(jié)計數(shù)器、32位請求設(shè)備地址寄存器和32位目標(biāo)設(shè)備地址寄存器,用以控制傳送數(shù)據(jù)地址和數(shù)量。DMA請求時,EDACK2~EDACK0的編碼(通道4除外)對應(yīng)其DMA響應(yīng)信號。通

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論