Z187-合集-微机原理与接口技术-课件_第1页
Z187-合集-微机原理与接口技术-课件_第2页
Z187-合集-微机原理与接口技术-课件_第3页
Z187-合集-微机原理与接口技术-课件_第4页
Z187-合集-微机原理与接口技术-课件_第5页
已阅读5页,还剩861页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第3章

汇编语言与程序设计2主要内容:指令系统的一般概念对操作数的寻址方式六大类指令的操作原理:操作码的含义指令对操作数的要求指令执行的结果3一、概述41.指令系统与程序指令:就是指示计算机进行某一工作的命令。程序是为求解某一问题或进行某项工作的若干条指令的有序集合。5指令格式操作码操作数说明指令的类型与功能地址域参加操作的数据或操作结果存放的地址6指令格式:

零操作数指令:操作码单操作数指令:操作码操作数双操作数指令:操作码操作数,操作数多操作数指令:三操作数及以上7指令格式:

单字节双字节3字节4字节8指令格式操作码[操作数],[操作数]目的操作数源操作数参加操作的数据或结果存放的地址汇编语言基本概念用二进制代码表示指令系统的语言称为机器语言;用机器语言设计的程序称为机器语言程序。9汇编语言基本概念用英文助记符表示指令系统的语言称为汇编语言,比如用ADD、SUB、JMP表示加、减、转移等操作。汇编语言必须转换成机器语言,计算机才能被识别和执行。这一转换过程称为汇编,由专门的汇编程序进行。用汇编语言指令编写的程序称为汇编语言程序。在计算机中,一条汇编语言指令对应于一条机器语言指令。因此,汇编语言指令实际上是机器指令的符号化表示。10汇编语言基本概念把用汇编语言编写的程序称为源程序。把经汇编而生成的机器语言程序称为目标程序或目标代码。用来说明汇编过程,或对汇编过程进行辅助说明的指令,称为伪指令。11128086寻址方式在指令中,操作数或操作数的地址可用多种方式来表示,统称为寻址方式。同一条指令可以有不同的寻址方式,以说明不同的操作对象。13数据类型在计算机中,二进制数据有多种类型或用途。一种是指令处理的对象,即操作数;另一种是指令字;第三种是操作数的地址。在指令中,操作数又分为两种,一种是参加运算或由计算机处理的对象,即数据操作数,简称为数据;另一种表示转移指令的目标地址,即转移地址。1415立即数:由指令直接给出寄存器数据:操作数存放在寄存器中存储器数据:操作数存在存储器中数据操作数的分类16转移地址操作数

其表示方式可以在转移指令中直接给出,也可根据某一寻址方式经计算后求得。17立即数操作数立即数只能作为源操作数。其本身是参加操作的数据,可以是8位或16位。例:MOVAX,1234HMOVBL,22H立即数无法作为目的操作数;立即数可以是无符号或带符号数,其数值应在可取值范围内。18寄存器操作数:参加运算的数存放在指令给出的寄存器中,可以是16位或8位。通用寄存器存放数据或偏移地址;段寄存器数据的段基地址;例:MOVAX,BXMOVDL,CH19存储器操作数参加运算的数存放在存储器的某一个或某两个单元中;表现形式:[],表示数据存放单元的偏移地址(或EA);立即数或寄存器20存储器操作数例例:MOVAX,[1200H]

-表示将偏移地址为1200H和1201H两单元的内容送到AX中。

22H11H1200H偏移地址AHAL┇

21二、寻址方式寻址方式-如何寻找内存操作数。在8086/8088中,地址是由两部分组成:段基址:单元所在段的基地址,大部分情况下在数据段寄存器DS内;段内偏移量:此单元距离段基地址的距离。段内偏移量为适应各种数据结构的需要,可有几个部分组成,不同寻址方式的构成部分不同。即:不同寻址方式实质上是构成段内的偏移量的方法不同。2223寻址方式

寻找操作数所在地址的方法(数据寻址方式)寻找转移地址的方法(转移地址寻址方式)本节数据寻址方式分类24251.立即数寻址指令中的源操作数是立即数,即源操作数是参加操作的数据本身;操作数直接存放在指令中,紧跟在操作码之后;例:MOVAX,1200H12H00HAHALMOV代码段┇

高地址单元内容放高8位,低地址单元内容放低8位26例如指令:

MOVAL,5

MOV

AX,2790H注意:立即数可以是8位或16位;对于16位数据,低字节放在低地址,高字节在高地址;立即数只能是源操作数,不能是目的操作数;此方式执行时直接从队列取立即数,不另占总线周期,执行速度很快;经常用于给寄存器或存储单元赋初值。27282.寄存器寻址是指令操作数域给出存放操作数的寄存器。例:MOVAX,BXAXBX例:指令执行前:(AX)=3064H(SS)=1234H,MOVSS,AX指令执行后:(SS)=3064H,(AX)保持不变。29指令执行前指令执行后操作数可以是8位或16位寄存器;也可以是段寄存器、地址指针或变址寄存器;该寻址方式可以减少指令长度;因为操作数在寄存器中,不需要访问存储器,运算速度较高;常用于存、取寄存器中的数。30313.直接寻址是指令操作数域给出的是存放操作数地址的偏移量,也称为有效地址,常用EA表示。即:操作数是存储器操作数;[]内是用16位常数表示数据所在单元的偏移地址;

操作数在内存中的偏移地址由指令直接给出;操作数默认在数据段,段基地址由DS给出;32

MOVBX,[2000H]执行前(DS)=4000H,EA=2000H,

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

数据段AHAL附加段例:MOVAX,[3100H](DS)=6000H,(63100H)=3050H,则:

(AX)=3050H35可以用符号地址来代替数值地址以表示操作数的偏移地址;MOVAX,[VALUE]符号地址出现在指令中时,可省略方括号;MOVAX,DATA直接寻址方式适用于存、取存储器变量。36374.寄存器间接寻址指令操作数给出存放操作数地址偏移量的寄存器;操作数的偏移地址在形式上用“[间址寄存器]”表示。操作数的段地址根据所选择的通用寄存器决定。BX,SI,DI或BP。段寄存器中的的基地址左移4位与16位偏移量相加,生成20位的物理地址。38设(DS)=3000H,(BX)=3000H,执行指令

MOVAX,[BX]执行后(AX)=2C7DH。3940寄存器间接寻址例例:设BX=1200H执行:MOVAX,[BX]22H11H1200H偏移地址AHAL┇

1122数据段代码段MOV41寄存器间接寻址由寄存器间接给出操作数的偏移地址;存放偏移地址的寄存器称为间址寄存器,包括:BX,BP,SI,DI操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:

BX,SI,DIBP默认在数据段DS默认在堆栈段SS42寄存器间接寻址寄存器间接寻址基址寻址(间址寄存器为基址寄存器BX,BP)变址寻址(间址寄存器为变址寄存器SI,DI)例:MOVBX,[DI](DS)=6000H,(DI)=2000H,

物理地址PA=62000H,假定:(62000H)=50A0H,则:(BX)=50A0H.43指令操作数域给出的是一个基址寄存器和一个偏移量,基地址与偏移量相加,作为操作数地址的偏移地址EA。段地址左移4位,与有效地址相加,生成20位物理地址。445寄存器相对寻址例如指令:MOVAX,DATA[DI]执行前(DS)=3000H,(DI)=2000H,

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

EA=5040H,PA=55040H,假如(55040H)=5548H,则:(AX)=5548H48496基址加变址寻址操作数的偏移地址(EA)为:基址寄存器(BX/BP)的内容+变址寄存器(SI/DI)的内容;MOVAX,[BX][SI]或MOVAX,[BX+SI]操作数的段地址由所选择的基址寄存器决定。例:执行以下程序段后,AX=?MOVSI,1010HMOVBX,0202HMOVAX,[SI+BX]5051基址、变址寻址例题目分析:第3指令为基址变址寻址,存储器操作数的偏移地址:=SI+BX=1010H+0202H=1212H因为基址寄存器为BX,故数据默认在数据段。22H11H1212H偏移地址AHAL┇

1122数据段代码段MOV例如指令:MOVAX,[BX][DI]或MOVAX,[BX+DI]执行前(DS)=2100H,(BX)=0158H,(DI)=10A5H,执行后(AX)=?52执行指令前:(DS)=3200H,(BX)=0456H,(SI)=1094H,(334EAH)=4567H,指令执行后:

EA=14EAH,PA=334EAH,(AX)=4567H53MOVAX,[BX][SI]547相对基址加变址寻址操作数的偏移地址=基址寄存器内容+变址寄存器内容+位移量。MOVAX,MASK[DI][BX]操作数的段地址由选择的基址寄存器决定基址寄存器主要有BX、BP,变址寄存器主要有SI和DI。BX默认DS,BP默认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]

执行前(DS)=3000H,(BX)=2000H,(DI)=1000H,

MASK=0250H

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

EA=2A7AH,PA=32A7AH,(AX)=4050H。575859逻辑运算与移位类指令逻辑运算指令移位指令循环移位指令601、逻辑运算指令61逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令为单操作数指令,其操作数不能是立即数;“非”运算指令不影响标志位;其他逻辑运算指令会影响6个状态标志位,且不论执行结果如何,都会使OF=CF=0621.“与”指令:格式:

ANDdest,src操作:两操作数相“与”,结果送目标地址。63“与”指令的应用实现两操作数按位相与的运算ANDBL,[SI]使目标操作数的某些位不变,某些位清零ANDAL,0FH在操作数不变的情况下使CF和OF清零ANDAX,AX64“与”指令应用例ANDAX,1110111101111111B652.“或”运算指令格式:

ORdest,src操作:

两操作数相“或”,结果送目标地址66“或”指令的应用实现两操作数相“或”的运算ORAX,[DI]使某些位不变,某些位置“1”ORCL,0FH在不改变操作数的情况下使OF=CF=0ORAX,AX“或”指令应用例ORBX,0001000010000000B

67683.“非”运算指令格式:NOTOPRD操作:操作数按位取反再送回原地址注:指令中的操作数不能是立即数指令的执行对标志位无影响“非”指令应用例例:NOTBYTEPTR[BX]NOTAL69704.“异或”运算指令格式:XOROPRD1,OPRD2操作:两操作数相“异或”,结果送目标地址例:XOR

BL,80H

XORAX,AX两操作数自身相异或,结果=?“异或”指令应用例1XORAL,10100000B71“异或”指令应用例2例1:将AL中的第1、3、5、7位求反,0、2、4、6位保持不变。

MOVAL,0FH

XORAL,0AAH72指令应用例3例3-10:将AX和CF清零。解:实现方法有多种,如下:方法1:ANDAX,0

方法2:XORAX,AX

方法3:SUBAX,AX73745.“测试”指令格式:TESTOPRD1,OPRD2操作:执行“与”运算,但运算的结果不送回目标地址。应用:常用于在不破坏目标操作数内容的情况下测试操作数某些位是“1”还是“0”。“测试”指令例1例:TESTAL,02H

TESTAX,0040H75“测试”指令例2例:判断A单元最低位是否为0.

假定(A)=0AEH.

程序:MOVAL,A

TESTAL,01H;指定测试AL的最低位JZEVEN;指定位=0转EVEN……奇数处理

……EVEN:偶数处理76逻辑运算综合例15.设DL=55H,执行指令后能使DL中的数据为OAAH的指令是()。

A.TESTDL,OAAH

B.ORDL,OAAHD.XORDL,OFFH题目答案:D77逻辑运算综合例26.无论BX中原有的数是奇数或偶数,若要使BX中的数一定为奇数,应执行的指令是()。

A.ADDBX,1B.ORBX,1

C.XORBX,1D.TESTBX,1题目答案:B78逻辑运算综合例37.将寄存器AL的低4位屏蔽,应当用的指令是()。

A.ANDAL,0FHB.ANDAL,0F0H

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

798.AND指令用于()。

A.取一个数中的某一位

B.置一个数中的某些位为1

C.将一个数置为0

D.置一个数中的某些位为0题目答案:D80812、移位指令非循环移位指令循环移位指令82移位指令移位指令在格式上应注意的两点:移动一位时由指令直接给出;移动两位及以上,则移位次数由CL指定。学习移位指令应注意:操作码的表示;指令的工作原理。831.

非循环移位指令逻辑左移SHL算术左移SAL逻辑右移SHR算术右移SAR84算术左移SAL算术左移指令:SALOPRD,1SALOPRD,CL有符号数移动一位后,若CF状态与最高位不相等,则OF=1;否则OF=00CF逻辑左移SHL逻辑左移指令:SHLOPRD,1SHLOPRD,CL85无符号数移动一位后,若CF状态与最高位不相等,则OF=1;否则OF=00CF算数左移和逻辑左移的移动原理相同86逻辑右移SHR格式:

SHROPRD,1SHROPRD,CL0CF无符号数的右移移动一位后,若次高位与最高位不相等,则OF=1;否则OF=087逻辑右移例:MOVAL,68HMOVCL,2SHRAL,CL0CF011010AL0000110100ALCF0000011010ALCF00移动1次移动2次0088算术右移SAR格式:

SAROPRD,1SAROPRD,CL有符号数的右移CF89非循环移位指令的应用左移可实现乘法运算每左移1位,相当于给目标操作数乘以2右移可实现除法运算

每右移1位,相当于给目标操作数除以2

非循环移位指令例1例3-14:执行以下指令

MOVAL,82H

SHRAL,1若换位SARAL,1,则结果是?90非循环移位指令例2例3-4-15:已知(AL)=80H,(CL)=03H,求执行下列指令后,(AL)=?,CF=?

(1)SARAL,CL

(2)SHRAL,CL

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

(2)(AL)=10H,CF=091922.循环移位指令不带进位的循环移位带进位的循环移位左移ROL右移ROR左移RCL右移RCR指令格式、对操作数的要求与非循环移位指令相同93不带进位的循环移位ROL和RORCFCF94带进位的循环移位RCL和RCRCFCF95循环移位指令的应用用于对某些位状态的测试;高位部分和低位部分的交换;与非循环移位指令一起组成32位或更长字长数的移位。循环移位指令例1例:设CF=0,执行以下程序段。

MOVAL,82H

ROLAL,1执行结果:(AL)=05H,CF=1

若换为RCLAL,1执行结果:(AL)=04H,CF=196循环移位指令例2例3-4-20:已知(AL)=12H,CF=1,求:执行下列指令后,(AL)=?,CF=?

(1)RORAL,1

(2)RCRAL,1

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

(2)(AL)=89H,CF=097循环移位指令例3例:将一个16位无符号数x除以512,该数原存在以DATA为首地址的两个连续单元中。MOVAX,DATA

MOVCL,9

SHRAX,CL

HLT98

第1章概述

第2章32/64位微处理器的组成原理

第3章汇编语言与程序设计

第4章存储器体系结构

第5章数据输入/输出方式

第6章总线技术

第7章并行I/O接口

第8章中断控制

第9章串行I/O接口

第10章定时器/计数器

第11章DMA控制器

第12章A/D与D/A转换

第13章多功能芯片组与PC机的主板结构

第14章外设与多媒体技术微机原理10.1概述10.2可编程定时器/计数器8254

10.38254编程使用第10章定时器/计数器10.482380内部定时器10.1概述

在计算机中经常用到定时信号,例如动态存储器刷新、系统日历计时等。定时方法可以采用软件方式,也可以采用硬件方式。软件定时是设计一个延时子程序,以达到定时的目的。硬件定时是用专门的定时器/计数器来实现,不占用CPU的时间可与CPU并行工作。

定时器实质上是一个计数器。早期PC机使用的是8253,以后的PC/AT机使用的是8254。二者的外部引脚与功能基本相同,只是前者允许输入的最高时钟频率是5MHz,后者是10MHz。

在以后的一些兼容机中使用MC146818作为定时芯片。现在多使用多功能芯片中包含的定时器。10.2可编程定时器/计数器8254

8254包含有3个16位计数器,可按二进制或十进制计数,有6种工作方式。

10.2.1内部结构与引脚功能

10.2.2工作方式

10.2.1内部结构与引脚功能1.内部结构内部结构如图10-1(a)所示,3个计数器、1个控制寄存器、1个8位数据总线缓冲器以及读/写控制电路。3个计数器各16位,独立工作。每个计数器如图10-2所示,包括1个16位初值寄存器CR、1个减1计数器CE和1个输出锁存器OL。另有控制逻辑电路、控制字寄存器和状态字寄存器。控制字寄存器和状态字寄存器为3个计数器共用。计数器工作时可设定为16位,也可设定为8位。设置计数初值时,16位计数值分两次写入。一旦写入,自动送入减1计数器。当门控输入信号GATE有效时,减1计数器CE按时钟信号CLK减1计数。减为0时,由OUT端输出计数回零信号,在计数过程中,锁存器OL跟随CE的内容。图10-1

在8254内部设置有4个寄存器,由地址A1A0选择和片选信号CS确定,如表10-1所示。

表10-18254内部地址分配CSA1A0RDWR功能00000001101111110000写计数器0写计数器1写计数器2写方式控制字00000001101100001111读计数器0读计数器1读计数器2无效图10-22.引脚信号

8254有24个引脚,采用双列直插式封装,其信号分布如图10-1(b)所示,功能如下:

D7~D0:数据总线,双向,8位,与外部数据总线连接。

WR:写信号输入,低电平有效。

RD:读信号,输入,低电平有效。

CS:片选信号,输入,低电平有效。

A1A0:地址信号,输入,用于选择内部寄存器。

CLK2~CLK0

:3个计数器计数信号输入。

OUT2~OUT0

:3个计数器计数回零输出,高电平有效。

GATE2~GATE0

:3个计数器外部门控信号输入端,高电平或上升沿有效。

VCC:+5V电源。

GND:地。10.2.2工作方式8254有6种工作方式,可通过编程选择。

1.方式0计数结束产生中断(1)写入控制字后OUT输出低电平,并且一直保持。计数回0时,OUT输出高电平,又一直保持,直到写入新的计数初值时再输出低电平。其时序如图10-3所示。图10-3

(2)GATE=1,允许计数;GATE=0,禁止计数。如果在计数过程中修改计数初值,则在下一时钟脉冲 2.方式1可重复触发的单稳态触发器新写入的计数初值送入减1计数器,然后按新值计数。(1)写入控制字后OUT输出高电平,写入计数初值后必须由GATE的上升沿触发计数。计数开始OUT变为低电平,直到计数回0时再输出高电平。若要再次计数,必须用GATE上升沿重新触发。方式1时序如图10-4所示。图10-4

(2)在计数过程中写入新的计数初值,当前计数状态不受影响。若有GATE上升沿触发,则按新的计数初值重新计数,直到计数回0,OUT变为高电平,低电平宽度为两次计数值之和。

3.方式2分频器是一种(n-1):1的分频器工作方式,特点如下:图10-5

(1)写入控制字后OUT输出高电平,写入初值后的下一时钟送入减1计数器,减1计数。减到1时,OUT输出低电平,维持1个时钟周期后又变为高电平,然后重新减1计数。其时序如图10-5所示。(2)GATE=1,允许计数;GATE=0,停止计数。

4.方式3方波发生器(1)写入控制字后OUT输出高电平,写入计数初值后的下一时钟送入减1计数器,减1计数。当减1到初值的一半时输出低电平,并继续减1计数。当计数回0时输出高电平,即一个周期。之后,又开始下一个周期的减1计数。其时序如图10-6所示。(2)当计数初值n为偶数时,输出对称方波。当计数初值n为奇数时,高电平的宽度比低电平的宽度多1个时钟周期。

(3)GATE=1时,允许计数;GATE=0时,停止计数。GATE的上升沿启动重新计数。若在计数过程中写入新的计数初值,则在下一时钟周期按新值计数。

5.方式4软件触发的选通信号发生器图10-6

(1)写入控制字后OUT输出高电平,写入计数初值后的下一时钟送入减1计数器,减1计数。计数回0时输出低电平,持续1个时钟周期后又变为高电平,即一个负脉冲信号,如图10-7所示。(2)GATE=1时,允许计数;GATE=0时停止计数,输出维持当时的电平。

6.方式5硬件触发的选通信号发生器(1)写入控制字后OUT输出高电平,写入计数初值后,必须在GAET的上升沿送减1计数器,减1计数。计数回0,输出一个时钟周期的低电平,然后回到高图10-7电平,即一个负脉冲。由于需要GATE的上升沿触发,故称硬件触发的脉冲发生器,时序如图10-8所示。(2)计数过程中若GATE有上升沿出现,则在下一时钟脉冲计数初值重新送入减1计数器,重新减1计数。(3)计数过程中若写入新的计数初值,而无GATE上升沿触发,当前计数状态不受影响。如果有GATE上升沿触发,则重新按照新的计数初值计数。图10-810.38254编程使用

10.3.1控制字10.3.2编程使用10.3.38254在PC机中的应用10.3.1控制字

从编程的角度来看,8254控制字有两个。一个设置工作方式;另一个用来设置读回命令,这两个控制字共用一个地址,由其中的标志位区分。

1.方式控制字方式控制字一共有8位,用来设置3个计数器的工作方式、计数方式以及计数器的长度,其格式如图10-9所示。由于计数器是减1计数,且先减1,再判断,因此计数初值为0时计数值最大。(2)读回控制字当控制字的最高2位为11时表示读回命令,其格式如图10-10所示,锁存相应信息,即计数值/状态信息锁存。状态字格式如图10-11所示。其中D5-D0是以前写入方式控制字所确定的值。D6表示CR的值是否已装入CE中,若D6=0,表示已装入,可以读取;若D6=1,则读取无效。D7表示OUT图10-9图10-10图10-1110.3.2编程使用

8254的编程主要是设置工作方式,写入计数初值,在计数过程中读取计数值和状态信息。

1.写操作写操作主要是写入控制字和计数初值,即初始化。8254有3个计数器,初始化时可以一个一个地进行,也可以先设置3个计数器的工作方式,然后写入各自的计数初值。前者如图10-12,后者如图10-13所示。但是必须先写入方式控制字,再写入计数初值。对于16位计数初值,先写入低字节,再写入高字节。图10-12单个计数器初始化图10-13集中写入控制字再写入计数初值2.读操作读操作有两种方式,一种是直接读,读取计数初值;另一种是先发锁存命令,然后再读,读取当前计数值。在发锁存命令时可以使用读回控制字,也可以使用方式控制字。若用方式控制字,其中D5D4=00,D7D6用来选择计数器,其余低4位任意。若设控制字端口地址为TIM,计数器1按双字节计数,读取当前计数值的程序如下:

MOV

DX,TIMMOV

AL,01000000BOUT

DX,AL;发锁存命令

IN

AL,DX;读取低字节

MOV

AH,ALIN

AL,DX;读取高字节

XCHG

AH,AL、10.3.38254在PC机中的应用

在PC机中,8254内部的三个计数器分别用于日历计时、动态存储器定时刷新和产生扬声器音频信号,其硬件连接如图10-14所示。3个计数器的定时计数时钟相同,由PCLK二分频产生,频率为1.1931816MHz。片选信号由主机I/O地址译码产生。主机系统分配给定时器端口地址范围为40H-5FH,当I/O地址A9A8A7A6A5=00010时,T/CCS

为低电平有效,8254选中,但是实际仅使用了40H-43H。(1)计数器0

计数器0选择工作方式3,计数初值为0,由OUT0产生连续方波,其频率为1.1931816MHz/65536=18.2Hz,周期为54.9ms。GATE0接+5V,处于常启状态。OUT0直接联接到82C59A中断控制器的IR0,利用方波上升沿发中断请求,图10-148254在PC机中的应用用于日历钟计时。在中断服务程序中,时间值保存在BIOS数据区的两个变量TIMER-LO和TIMER-HI中。计数器0初始化程序如下:

MOVAL,36H;计数器0双字节,方式3,二进制计数

OUT43H,AL;写入控制寄存器

MOV

AL,0OUT

40H,AL;写低字节

OUT

40H,AL;写高字节

(2)计数器1

计数器1用来向主机定时提出动态RAM刷新请求,GATE1接+5V,处于常启状态。选择工作方式2,以字节计数,初始化程序如下:

MOV

AL,54H;计数器1写入低字节,方式2,二进制计数

OUT

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

MOV

AL,18;设置低字节计数值18OUT

41H,AL;将18写入计数器1

启动工作后,由OUT1产生连续负脉冲,其频率为1.1931816MHz/18=66.2878KHz,周期为15.0857μs。OUT1连接到D触发器的触发脉冲输入端,而D触发器的数据输入端接+5V,这样可利用负脉冲的上升沿将触发器置1,输出高电平,定时请求DRAM刷新。(3)计数器2

计数器2用来产生扬声器的音频信号。GATE2由TIME2GATE信号控制,选择工作方式3,以双字节计数,初始化程序如下:

MOVAL,0B6H;选择计数器2,写双字节,方式3,二进制计数

OUT43H,AL;写入控制寄存器

MOVAX,533HOUT42H,AL;写入低字节

MOVAL,AHOUT42H,AL;写入高字节计数初值为533H,使OUT2输出频率为896(1.1931816MHz/533H)HZ的脉冲信号。TIME2GATE由程序设置,以确定是否启用扬声器。另外,OUT2与SPKDATA相“与”后,经SN75477送扬声器。SPKDATA由程序控制,以确定是否发声报警,SN75477用于音频功率放大。10.482380内部定时器

10.4.1组成与功能

10.4.2在动态存储器刷新中的应用10.4.1组成与功能 82380中设置有4个16位的可编程定时器,其组成如图10-15所示,功能与8254相同,但是计数时钟信号由82380内部产生。在4个定时器中,定时器0的输出TOUT0与82380的内部中断输入IR8连接,用作实时定时中断请求,定时器1、2、3可作为通用定时器。在过去的一些PC机中,定时器1连接到动态存储器刷新控制器,用于刷新定时;定时器2用于产生扬声器的音频信号或者产生82380内部的IR3中断;定时器3用来产生82380内部的IR0中断。图10-1582380内部定时器 82380内部定时器有两个控制寄存器,CPU可设置4个定时器的工作方式,也可发读回命令。其中,方式字1和读回控制字1用来设置定时器0、1、2的工作方式和写回。写入控制寄存器1的格式与8254完全相同。方式寄存器2和读回控制字2用来设置定时器3的工作方式和读回,格式如图10-16和10-17所示。方式控制字2的高两位D7D6=00,用来选择定时器3,其他各位的含义与8254方式控制字相同;读回控制字2的D1用来选择定时器3,D3、D2未用,其他各位与8254相同。图10-16方式控制字格式图10-17读回控制字格式

为了与早期的PC机兼容,82380内部定时器的I/O端口与8254在PC机中的端口地址保持兼容,如表10-2所示。表10-2

82380内部定时器端口地址端口地址功能端口地址功能40H定时器0读/写44H定时器3读/写41H定时器1读/写45H保留42H定时器2读/写46H保留43H写控制字147H写控制字210.4.2在动态存储器刷新中的应用

在82380中除了定时器之外,还有8通道DMA控制器。每一个通道包括24位的字节计数器、2个32位地址寄存器以及相应的控制逻辑电路,而且地址可以自增/自减。这样,把某一通道与定时器连接起来,即可实现动态存储器刷新控制。

实际上,动态存储器刷新控制正是82380的多种功能之一。DRAM组成如图10-18所示。定时器1用于刷新定时,时间到后发中断请求,再由DMA控制器发总线请求HOLD,主机CPU响应后即可进行一次刷新,即按照当前地址进行一次读操作,同时产生

信号,数据不输出,地址计数器自增。完成一次刷新后,CPU收回总线。刷新时的总线请求优先级最高。图10-18DRAM刷新控制器第11章DMA控制器11.1概述11.2可编程DMA控制器8237A11.38237A工作状态与编程使用11.482380内部DMA控制器

DMA是由硬件来实现I/O设备与主存之间或者主存内部的数据传送,因此称为存储器直接存取方式。可字节传送,也可按数据块传送,速度快,效率高。

DMA的概念和传送过程已在5.2.4节介绍,这里主要介绍8237A的组成与工作过程。

8237A片内有4个独立的DMA通道和一组共用的基本控制逻辑电路,其组成如图11-1所示。包括时序与控制逻辑、优先级编码逻辑、数据/地址缓冲器、命令控制电路、状态寄存器、命令寄存器、暂存寄存器、暂存地址寄存器、暂存字节计数器、先/后触发器和屏蔽寄存器等。每个通道又有相应的寄存器。11.1概述返回11.2.2图11-111.2可编程DMA控制器8237A

11.2.1引脚功能

11.2.2内部结构11.2.1引脚功能

8237采用双列直插式封装,有40个引脚,如图11-2所示,其作用如下:

A3~A0:地址线,双向,三态,DMA传送时输出地址低4位;输入时,选择8237A的内部寄存器。

A7~A4:地址线,输出,三态,DMA传送时,输出地址高4位。

DB7~DB0:数据线,双向,三态,数据传送时作为8位数据线;DMA工作时,输出高8位地址A15-A8,由ADSTB信号选通。图11-2

IOW:I/O写信号,双向,三态,低电平有效。

IOR:I/O读信号,双向,三态,低电平有效。

MEMW:主存写信号,输出,三态,低电平有效。

MEMR:主存读信号,输出,三态,低电平有效。

ADSTB:地址选通信号,输出,高电平有效,DMA传送时选通

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

AEN:地址允许信号,输出,高电平有效,DMA传送时表示16位地址有效。

CS:片选信号,输入,低电平有效。

RESET:高电平有效,复位后,清除命令、状态、请求和暂存寄存器,屏蔽寄存器置1,禁止4个通道的DMA请求。

READY:准备好信号,输入,高电平有效,由DAM插入等待周期。

HRQ:总线请求信号,输出,高电平有效,连接CPU的HOLD端。

HLDA:总线响应信号,输入,高电平有效,表示DMA控制器获得总线控制权。

DREQ3~DREQ0:4个通道的DMA请求,输入,可编程为高电平或者低电平有效,需维持到DMA响应。

DACK3~DACK0:4个通道的DMA响应信号,输出,可编程为高电平或者低电平有效,DMA控制器获得HLDA信号后,产生DACK信号,送I/O接口或设备。

CLK:时钟信号,输入,用于8237A基准定时。

EOP:DMA传送结束信号,双向,低电平有效。输入,强迫DMA传送结束;输出,表示DMA传送结束。 11.2.2内部结构

8237A内部组成如图11-1所示,其功能通过内部寄存器来实现。

1.当前地址寄存器

存放DMA传送时的16位存储器地址,具有自增1或自减1功能;编程时,CPU可对其读/写。若DMA控制器设置成自动预置方式,当每次字节计数为0或EOP出现低电平时,基地址寄存器中的初值自动装入当前地址寄存器。

2.基地址寄存器与当前地址寄存器共用端口地址,存放DMA传送时的地址初值;在编程时,与当前地址寄存器被同时写入。

3.当前字节计数器存放当前的字节数,每个通道有一个16位的当前字节计数器,可按字节减1计数,当计数值由0减至0FFFFH时,产生传送结束信号EOP。若DMA设置成自动预置方式,当EOP有效时,基字节计数器中的初值自动装入当前字节计数器中。

4.基字节计数器与当前字节计数器共用端口地址,存放DMA传送数据的字节数;在编程时,与当前字节计数器被同时写入。

5.方式寄存器每个通道有一个方式寄存器,用来控制DMA传送方式和方向,其格式如图11-3所示:

D1D0:用于通道选择。

D3D2:选择通道DMA数据传送类型。D4:若为1,表示自动预置,D4为0时,禁止自动预置。

D5:若为0,地址自增1;D5为1,地址自减1。

D6D7:用来定义DMA传输方式,共有4种,如图所示。其中级联连接方式如图11-4所示。图11-3

6.命令寄存器其格式和各位的定义如图11-5所示,设置各通道的功能。复位后,所有位清0。

D0:控制存储器到存储器传送。在存储器到存储器传送时占用两个通道,通道0存放源操作数地址,通道1存放目的地址。传送一个字节需要两个总线周期。

D1:与D0配合使用,当D0为1时,且D1为1,存储器源地址保持不变。图11-4图11-5命令寄存器

D2:启/停8237A。

D3:在D0为0时起作用。当D3为0,选择普通时序,一次DMA传送需用4个时钟周期;当D3为1,选择压缩时序,需3个时钟周期。

D4:优先权控制,D4为0时选择固定优先级,通道0级别最高;D4为1时,选择循环优先级方式。

D5:扩展写周期。D5为1,写信号提前到状态信号S3发出。对于速度较慢的外部设备,可通过READY信号控制,在状态信号S3之后插入等待周期SW。

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

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

7.请求寄存器

8237A的4个通道都有一个请求触发器,共同构成DMA请求寄存器。DMA请求可以由外部触发,也可以软件设置。在存储器到存储器传送时,只能由软件设置,格式如图11-6所示。其中D1D0标识4个通道序号。

8.屏蔽寄存器屏蔽寄存器有两个。一个是单通道屏蔽寄存器,另一个是主屏蔽寄存器。单通道屏蔽寄存器的格式如图11-7(a)所示,D1D0标识通道号,D2=1表示屏蔽,D2=0,不屏蔽。主屏蔽寄存器用来对8237A整体设置,即一次设置4个通道,其格式如图11-7(b)所示。对屏蔽寄存器进行一次写操作,即可清除4个通道的屏蔽位,开放DMA请求,写入地址为DMA+0EH。比如:

MOVDX,DMA+14OUTDX,AL图11-6图11-79.状态寄存器

状态寄存器共有8位,给出8237A每个通道的状态,其格式如图11-8所示。

D3~D0标识4个通道计数器是否停止。如果计数终止或外部产生EOP信号,相应位置为1,停止DMA操作。D7~D4表示4个通道是否有DMA请求,1表示有请求,0表示没有请求。10.暂存寄存器在存储器到存储器传送时,暂存从存储器中读出的数据。传送完毕,保留最后一次传送的数据。在编程状态,其中的内容可由CPU读出,RESET复位时清0。图11-811.先/后触发器先/后触发器清0,第1字节写入寄存器的低8位,然后先/后触发器自动置1,第2个字节写入寄存器的高8位。同时,先/后触发器自动清0。以上寄存器口地址与作用如表11-1所示。

8086地址线有20位(A19~A0),而8237A只能提供16位地址线(A15~A0)。为使用8237A来实现DMA传送,常以硬件电路构成4位页面地址寄存器,每个通道各有一个。在进行DMA传送时,由页面地址寄存器提供DMA传送所需要的高4位地址A19~A16。表11-18237A寄存器地址与操作命令

寄存器端口地址通道读操作写操作DMA+0DMA+10读当前地址寄存器读当前字节计数器写基/当前地址寄存器写基/当前字节计数器DMA+2DMA+31读当前地址寄存器读当前字节计数器写基/当前地址寄存器写基/当前字节计数器DMA+4DMA+52读当前地址寄存器读当前字节计数器写基/当前地址寄存器写基/当前字节计数器DMA+6DMA+73读当前地址寄存器读当前字节计数器写基/当前地址寄存器写基/当前字节计数器DMA+8DMA+9DMA+10DMA+11DMA+12DMA+13DMA+14DMA+15共用读状态寄存器读暂存寄存器写命令寄存器写请求寄存器写单个通道屏蔽字写方式字寄存器清除先/后触发器复位芯片(主清除)清除屏蔽寄存器写4个通道屏蔽寄存器11.38237A工作状态与编程使用11.3.1工作状态11.3.2编程使用11.3.3应用举例

11.3.1工作状态

8237A的工作分为三个阶段,也称为状态,即空闲、DMA请求和传送。

1.空闲状态没有外设的DMA请求,不进行DMA传送,DMA控制器处于空闲状态,常用SI表示。在空闲状态,如果DMA控制器没有被屏蔽,则始终监视DREQ输入端。

2.DMA请求与响应状态在空闲状态,若DREQ端有DMA请求,则立即进入DMA请求状态,DMA控制器向CPU发总线请求信号HRQ,并等待总线响应。DMA请求与响应状态常用字母S0表示。在收到总线响应信号HLDA之后,DMA控制器获得总线控制权,进入DMA传送状态。

3.DMA传送状态

DMA传送包含4个状态周期,即S1~S4,以完成地址传送和数据的读/写等操作。

S1:输出地址允许信号AEN。仅当高8位地址A15~A8更新时,才执行S1状态。即每传送256次执行一次S1状态。

S2:输出16位地址到存储器,其中低8位由地址线A7~A0输出,高8位由数据线DB7~DB0输出。同时,向外设发DMA响应信号DACK。

S3:输出读周期,即输出存储器读MEMR或I/O读IOR信号。如果超前写,则同时发出存储器写MEMW或IO写IOW信号。

S4:输出写周期,即输出存储器写MEMW或I/O写IOW信号。对于低速主存或外设,可在S3之后插入1个或者多个等待周期SW。11.3.2编程使用

编程初始化后,8237A便自动控制数据的传送。初始化程序包括以下几个方面:(1)先对总线命令寄存器复位;(2)把起始地址的低8位和高8位分别写入地址寄存器;(3)把字计数值的低8位和高8位分别写入字节计数寄存器;(4)写方式寄存器;(5)写屏蔽寄存器;(6)写命令寄存器。

下面结合IBMPC/XT中8237A的应用来说明其初始化编程。8237A对应的端口地址是0000H~000FH,下面以标号DMA表示首地址0000H。8237A利用页面寄存器74LS670提供最高4位地址A19~A16,其端口地址为0083H。

MOVAL,04;设置命令字

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

MOVDX,DMA+0DHOUTDX,AL;发总清命令,使8237A复位

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

MOVCX,0004;设置循环次数WRITE:MOVAL,0FFHOUTDX,AL;通道0写入地址低位

OUTDX,AL;通道0写入地址高位,16位地址为0FFFFH

INCDXINCDX;指向通道1LOOPWRITE;循环,向其余通道写入16位地址0FFFFMOVDX,DMA+0BH;指向方式寄存器

MOVAL,58H;设置通道0方式字

OUTDX,AL;通道0单字节,读传送,地址自增,自动预置

MOVAL,41H;设置通道1方式字

OUTDX,AL;通道1单字节,校验传送,地址自增,无自动预置

MOVAL,42H;设置通道2方式字

OUTDX,AL;通道2方式,同通道1MOVAL,43H;设置通道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

在发送控制命令字后,禁止存储器到存储器传送,DACK低电平有效,DREQ高电平有效,固定优先级,且启动8237A工作。此时通道0开始对动态DRAM刷新。11.3.3应用举例

设某8086微型计算机配有DMA控制器8237A,端口地址为00H~0FH,通过初始化程序完成存储器到存储器的数据传送。程序流程图如图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;输出计数初值

MOVAL,0AHOUT03H,AL图11-9

MOVAL,00HOUT03H,AL;输出计数初值

MOVAL,88HOUT0BH,AL;通道0数据块读传送

MOVAL,85HOUT0BH,AL;通道1数据块写传送

MOVAL,81HOUT08H,AL;写命令字

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

MOVAL,00HOUT0FH,AL;开放屏蔽

A1:JMPA1CODEENDSENDSTART11.482380内部DMA控制器

11.4.1内部组成

11.4.2工作方式

11.4.3内部寄存器及功能11.4.1内部组成 82380内部DMA组成如图11-10所示,可分为控制电路和寄存器两大部分。控制电路包括DMA请求仲裁逻辑和过程控制电路。寄存器分为控制/状态寄存器和通道寄存器两类,每个通道有一组通道寄存器。控制/状态寄存器分为两组,一组用于通道0~通道3,称为低通道组;另一组用于通道4~通道7,称为高通道组。8个通道可以独立使用,每一个通道中分配有24位字节计数器、32位请求设备地址寄存器和32位目标设备地址寄存器,用以控制传送数据地址和数量。DMA请求时,EDACK2~EDACK0的编码(通道4除外)对应其DMA响应信号。通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论