单片微型计算机 徐惠民版.docx
《单片微型计算机 徐惠民版.docx》由会员分享,可在线阅读,更多相关《单片微型计算机 徐惠民版.docx(105页珍藏版)》请在冰点文库上搜索。
单片微型计算机徐惠民版
1-1MCS-51单片机由哪几部分组成?
解:
MCS-51单片机是个完整的单片微型计算机。
具体包括CPU、存贮器和接口部分。
存贮器的配置和芯片的型号有关,有三种情况,即片内无ROM,片内有掩模型ROM以及片内有EPROM。
而随即存贮器RAM则每一种芯片都有。
接口部分包括4个8位I/O口,两个16位定时/计数器和一个主要用于异步通信的串行接口。
此外,它们还都内含时钟产生电路。
1-28051单片机有多少个特殊功能寄存器?
它们可以分为几组?
完成什么主要功能?
解:
8051单片机内部有21个特殊功能寄存器,它们可以分成6组:
用于CPU控制和运算的有6个,即ACC,B,PSW,SP和DPTR(16位寄存器,算2个8位寄存器);有4个用作并行接口,即P0,P1,P2和P3;有2个用于中断控制,即IE和IP;有6个用于定时/计数器,它们是TMOD,TCON及两个16位寄存器T0和T1;还有3个寄存器用于串行口,即SCON,SBUF和PCON。
当然其中有些寄存器的功能不只是一种,也可以有另外的分组方法。
如电源控制寄存器PCON除了用于串行口通信外,还可用于供电方式的控制。
1-3决定程序执行顺序的寄存器是哪个?
它是几位寄存器?
它是不是特殊功能寄存器?
解:
决定程序执行顺序的寄存器是程序计数器PC。
它是一个16位寄存器,但它不属于特殊功能寄存器。
1-4DPTR是什么寄存器?
它的作用是什么?
它是由哪几个寄存器组成?
解:
DPTR是数据存贮器指针。
因为在MCS-51系列单片机中,指令存贮器和数据存贮器是完全分开的,因此,当向数据存贮器读写数据时,就需要有一个寄存器来存放数据存贮器的地址,这个寄存器就是数据指针DPTR。
它是一个16位寄存器,由DPH和DPL两个寄存器组成。
可以通过指令直接把16位地址送给DPTR,也可以把高8位地址送给DPH,把低8位地址送到DPL。
1-5MCS-51单片机引脚中有多少I/O线?
它们和单片机对外的地址总线和数据总线有什么关系?
地址总线和数据总线各是几位?
解:
MCS-51单片机芯片的引脚中有32条I/O线,因为有4个8位并行口,共32条。
51系列单片机没有独立的数据总线和地址总线,而是和一部分I/O线复用。
具体来说,P0口的8条分时用作地址总线低8位和8位数据总线,而P2口8条线用作地址总线高8位。
所以是16位地址总线和8位数据总线。
1-6什么叫堆栈?
堆栈指示器SP的作用是什么?
8051单片机堆栈的容量不能超过多少字节?
解:
堆栈是数据寄存器的一部分,这一部分数据的存取是按照先入后出、后入先出的原则进行的。
堆栈指针SP在启用堆栈之前是用来决定堆栈的位置。
如在8051芯片复位后,SP的值为07H,则决定了堆栈从08H开始设置。
修改SP值可以使堆栈设置在内部RAM的其它部分。
在堆栈启用之后,SP指向堆栈顶部,即由SP来决定数据读出和存入堆栈的地址。
8051单片机内部用作数据区的RAM的容量为128个字节,前8个字节要用来作为工作寄存器R0-R7。
堆栈可以从08H开始设置直到7FH,共120个字节。
但这只是最大可能的容量。
一般情况下,内部RAM还要分出一部分作一般的数据区,或者还要用其中的位寻址区来用于位操作,等等。
所以,8051的堆栈区是比较小的,使用时要注意到这个限制。
1-78051单片机的内部数据存贮器可以分为几个不同区域?
各有什么特点?
解:
8051单片机内部数据存贮器的容量为256个字节(地址为00H-FFH)。
它可以分为两大部分,各占128个字节。
前128个字节为读写数据区,地址为00H-7FH。
后128个字节为特殊功能寄存器区,21个特殊功能寄存器分散地分布在这个区域,各有自己特定的地址。
这个区域中,没有被特殊功能寄存器占用的单元也不能当作一般的RAM单元用
00H-7FH的RAM单元,都可按它们的直接地址来读写数据。
而其中的前32个单元,即00H-1FH单元又称为工作寄存器区,安排了4组工作寄存器,每组8个,都用R0-R7来表示,并通过PSW寄存器中RS1和RS0来选组。
通过工作寄存器R0-R7来对这部分数据单元读写数据,不仅速度快而且指令字节数也少。
另一个区域为位寻址区,占用20H-2FH共16个单元,这16个单元的每一位都可以独立进行操作,共有128个可独立操作的位。
而30H-7FH这80个单元则只能按它们的直接地址来操作。
1-8MCS-51单片机寻址范围是多少?
8051单片机可以配置的存贮器最大容量是多少?
而用户可以使用最大容量有是多少?
解:
MCS-51单片机的指令存贮器寻址范围为64KB,数据存贮器也有64KB寻址范围,地址都是从0000H-FFFFH,共有2×64KB的寻址范围。
8051可以配置的外部存贮器就是2×64KB容量。
但8051片内还配有存贮器,包括4KB容量的只读存贮器和256个字节的数据存贮器,总共容量为132.25KB。
但用户可以使用的容量只有2×64KB再加上256个字节的数据存贮器。
1-98051单片机对外有几条专用控制线?
其功能是什么?
解:
一般的说法是8051单片机有4条专用控制线。
它们是复位信号线RST,高电位有效,当有复位信号从此线输入时,使单片机复位。
访问外部存贮器控制信号
,低电平有效,当此控制线为低电平时,单片机全部使用外部指令存贮器,而当此控制线为高电平时,先使用片内的4KB指令存贮器(0000H-FFFFH),在4KB范围之外,才使用指令存贮器(地址为1000H-FFFFH)。
另有两条输出控制:
外部程序存贮器的读选通信号
和外部地址锁存器允许信号ALE。
前者是低电平有效,在读外部程序存贮器时使用。
后者是高电平有效,在锁存P0口输出的低8位地址时使用。
1-10什么叫指令周期?
什么叫机器周期?
MCS-51的一个机器周期包括多少时钟周期?
解:
完成一条指令的执行所需的时间叫作指令周期。
对不同的指令,指令周期的长短是不一定相同的。
机器周期则是指计算机完成某种基本操作所需的时间,一个指令周期由一个或几个机器周期组成,一个机器周期则包括若干个时钟周期。
MCS-51单片机的一个机器周期包括12个时钟周期。
但对有些微处理器来说,不同的机器周期所包含的时钟周期可能是不相同的。
1-11为什么要了解CPU的时序?
解:
了解CPU的时序就是了解在执行不同类型指令时CPU发出的控制信号有什么不用。
了解CPU时序至少有两个目的,其一是掌握不同的指令或操作使用不同的控制信号后,便于CPU对外部设备的连接而不至于发生错误。
其二是知道不同指令需要不同的机器周期后,可以选用功能相同而机器周期较少的指令,以减少程序的执行时间。
当然,也可以有一些其他的作用。
1-12在读外部程序存贮器时,P0口上一个指令周期中出现的数据序列是什么?
在读外部数据存贮器时,P0口上出现的数据序列又是什么?
解:
读外部程序存贮器(ROM)时,有两种情况:
一种是单纯地取指令,这时P0口上先送出指令所在地址低8位,然后从ROM中取回指令码。
按照指令字节数的不同,这个数据序列可能重复若干次。
另一种情况,则是执行从外部ROM中读取固有数据的指令,这时,P0口上先送出地址低8位,再从ROM中取回指令码,然后开始执行指令,接着从P0口上送出ROM数据单元地址低8位,再读回ROM中的数据。
而再读外部数据存贮器(RAM)时,P0口上先送出指令地址低8位,然后读回指令码,再送出数据存贮单元地址低8位,再读回数据单元的内容。
1-13为什么外扩存贮器时,P0口要外接地址锁存器,而P2口却不接?
解:
这是因为在读写外部存贮器时,P0口上先送出低8位地址只是维持很短的时间,然后P0口就要当作数据总线用。
为了使对外在整个读写外部存贮器期间,都存在有效的低8位地址信号,P0口就要外接一个地址锁存器,再从这个存贮器对外送出低8位地址。
而P2口只用作高8位地址线,并在整个读写期间不变,所以不必外接地址锁存器。
1-14在使用外部程序存贮器时,MCS-51单片机还有多少条I/O线可用?
在使用外部数据存贮器时,还有多少条I/O线可用?
解:
在使用外部程序存贮器时,原则上说,P0口和P2口要用作数据总线和地址总线,所以只有P1口和P3口可用作I/O口,共16条I/O线。
在使用外部数据存贮器时,除了占用P0口和P2口之外。
还需用
和
控制线,而这两条线就是P3口中的两条:
P3.6和P3.7,所以这是只有14条I/O线可用了。
当然,取决于所配置的外部程序存贮器的容量,P2口的8条线并不一定全部占用,有时还有几条没用,但即使如此,这几条线也不能再用作I/O线,而只能留作系统扩展时再用。
1-15程序存贮器和数据存贮器的扩展有何相同点及不同点?
试将8031芯片外接一片2716EPROM和一片2128RAM组成一个扩展后的系统,画出扩展后的连接图。
解:
两者的相同点是,都借用P0口和P2口作为数据总线和地址总线,也就是说,地址线和数据线的连接方法是相同的,地址范围都是在0000H-FFFFH之间。
两者的不同点是,所用的读写选通信号不同,扩展程序存贮器时用控制线
,而扩展数据存贮器时使用读写控制线
和
。
当然每块芯片具体需要几条地址线是由芯片的容量来决定的,容量大的芯片需要借用P2的I/O线的数量多。
而数据线则都是8条。
2716是2K×8的EPROM,2128是2K×8的RAM,两者都只需11条地址线。
由于题目中没有规定地址范围,故可按最简单的方式来连接,即只用
来控制EPROM的读出,用
和
控制RAM的读写,两块芯片的片选都固定接地,连接图如图1-1所示。
这种连接方式可以省去地址译码器。
但它有一个缺点,那就是系统的扩充能力很差,因此,在实用时还是考虑使用译码器好。
1-168051芯片需要外扩4KB程序存贮器,要求地址范围为1000H-1FFFH,以便和内部4KB程序存贮器地址相衔接。
所用芯片除了地址线和数据线外,还有一个片选控制端
。
画出扩展系统的连接图。
?
解:
由于题目没有规定芯片的容量,为简单起见,设所用芯片容量为4KB的EPROM。
芯片本身所需要地址线为12条,除了P0口8条外,还占用P2.0、P2.1、P2.2和P2.3。
P2口的高4位经过或门产生片选信号,连接图如图1-2所示,此时高4位只有为0001时才选中此芯片。
1-17在题1-15的连接图中,若因某种原因,将P2.2、P2.1、P2.0分别误接为P2.5、P2.4、P2.3,问这时图中所接的存贮器的寻址范围是如何分布的?
解:
误接后,相当于存贮器的地址线A10、A9、A8分别与P2.5、P2.4、P2.3相连。
由此可求出地址区:
P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P0.7-P0.0地址区
××000×××0……00000-00FFH
1……1
××001×××0……00800-08FFH
1……1
××010×××0……01000-10FFH
1……1
××011×××0……01800-18FFH
1……1
××100×××0……02800-28FFH
1……1
××110×××0……03000-30FFH
1……1
××111×××0……03800-38FFH
1……1
所以存贮器的寻址范围分别为8个不连续的区域,每块地址区有256个字节。
这在实际使用时当然很不方便,所以要注意地址线不要接错。
1-18现有1K×8位的RAM芯片可供选用。
若用线选法组成8031系统的外部数据存贮器,有效的寻址范围最大时多少kB?
若用3-8译码器来产生片选信号,则有效的寻址范围最大又是多少?
若要将寻址范围扩展到64kB,应选用什么样的译码器来产生片选信号?
解:
1k×8位的RAM芯片由10条地址线。
8031的地址线为16条,所以还有6条地址线可以用来作片选信号。
当采用线选法时,每条高位地址线只能选中一片芯片,所以有效地址范围最大可为6kB。
当用3-8译码器来产生片选信号时,一片3-8译码器可以产生8个片选信号,有效寻址范围可扩大为8kB。
若使用多片3-8译码器,则寻址范围还可以扩大。
若要将寻址范围扩展到64kB,必须涓埃女冠高6位线进行全译码以产生64个片选信号。
由于现在尚无现成的6-64译码器可用,故可选用多个3-8译码器,通过两级译码来产生64个片选信号,共需9个3-8译码器。
或者用1个2-4译码器和4个4-16译码器通过两级译码,也可以得到所需的64个片选信号。
1-19什么是地址重迭区,它对存贮器扩展有何影响?
若有1k×8位RAM并采用74LS138译码器来产生片选信号,图1-3中的两种接法的寻址范围各是多少kB?
地址重迭区有何差别?
图中G1、G2A和G2B为译码器的使能端。
解:
所谓地址重迭,其表现就是若干个地址都可选中同一存贮器芯片的同一单元,即一个单元有多个地址。
地址重迭区即是指有哪些地址区可以选中同一芯片的存贮单元。
由于地址重迭区的存在,影响了地址区的有效使用,限制了存贮器的扩展。
图1-3中的两种接法,都能产生8个片选信号,选用1kBRAM时,寻址范围都是8kB。
但是左图有地址重迭区。
高3位地址A13、A14和A15不论为何值,只要低13位地址相同,都能选中同一芯片的同一单元。
故共有8个地址区。
对于Y0输出选中的芯片地址为:
0000H-03FFH,2000H-23FFH,4000H-43FFH,6000H-63FFH,8000H-03FFH,8000H-03FFH,A000H-A3FFH,C000H-C3FFH,E000H-E3FFH。
而右图的接法没有地址重迭区。
8片RAM所占用的地址为2000H-23FFH,其它的地址都选不中这些RAM的存贮单元。
1-20从系统扩展的角度来看,图1-3中的两种接法右什么差别?
解:
图1-3左图可以接8片1kBRAM,而每片RMA又有8kB地址重迭区,所以64kB地址区全部用完。
这个系统只能接8片1kBRAM,不能再扩展。
而图1-3右图中由于不存在地址重迭区,如果再增加译码器和控制门,就可以获得更多的片选信号。
只要连接得当,系统最大可以扩展64kB存贮器。
所以地址重迭区的存在将限制存贮器的扩展。
1-21某单片机系统需要配置一个4k×8位的静态外部RAM。
试问:
用几片2114(1k×4位)组成该存贮器?
用线选法如何构成这个存贮器?
试画出连接简图,并注明各芯片所占用的存贮空间。
解:
需用(4k×8)/(1k×4)=8,即8片2114来组成。
系统连接如图1-4所示。
8片2114芯片分为四组,每组有相同的线选信号,即有相同的地址,存贮空间的分布可决定如下:
A15A14A13A12A11A10A9-A0地址区
Ⅰ、Ⅱ片××11100……03800H-3BFFH
1……1
Ⅲ、Ⅳ片××11010……03400H-37FFH
1……1
Ⅴ、Ⅵ片××10110……02C00H-2FFFH
1……1
Ⅶ、Ⅷ片××01110……01C00H-1FFFH
1……1
由于A15,A14两条地址线没有使用,所以在如图的连接方式下,每组存贮器都有4kB地址重迭区。
但如果把A15和A14也用作线选信号,则这个系统还可以再扩充2kB容量的存贮器(设仍使用2114芯片)。
1-22某系统的存贮器配置如图1-5所示。
所用芯片为1k×8位静态RAM,试确定每块芯片的地址范围。
图中C为译码器高位输入,A为低位输入。
Y0对应于输入组合000,Y7对应于输入组合111。
每片RAM地址重迭区有多大?
解:
各芯片的地址区可确定如下:
A15A14A13A12A11A10A9-A0地址区
Ⅰ、片××000×0……00000H-03FFH
1……1
Ⅱ、片××001×0……00800H-0BFFH
1……1
Ⅲ、片××010×0……01000H-13FFH
1……1
Ⅳ、片××011×0……01800H-1BFFH
1……1
由于有3条地址线A15、A14和A10没有连接和使用,所以每片RAM都有23=8kB地址重迭区。
1-23用4片1k×8位RAM,一片2-4译码器,一片4-16译码器来构成4k×8位容量的存贮器,画出存贮器的连接图。
并要求:
1)每一存贮单元的地址范围是唯一确定的,不存在地址重迭区;2)给出所画的连接图中每块芯片的寻址范围;3)存贮器应具有扩展能力,即能扩展到64k×8位的存贮容量。
问:
若要扩展到最大容量,除了增加存贮器芯片外,还要增添什么器件?
解:
按照第一个要求,必须通过全译码来产生片选信号。
即每个片选信号必须由6个高位地址线的组合来产生。
由于提供了两种不同的译码器,产生这种片选信号并不难。
但连接的方式不止一种,而且不同的连接方式各个存贮器芯片的地址区也可以不同。
图1-6是两种可能出现的方案。
在第一种方案中,4片RAM的地址为:
Ⅰ片:
0000H-03FFH;
Ⅱ片:
0400H-07FFH;
Ⅲ片:
0800H-0BFFH;
Ⅳ片:
0C00H-0FFFH;
第二种方案的意图是以地址线A10来控制4-16译码器Y0的输出是为1还是为0:
当A14A13A12A11A10=00000时Y0=0;当A14A13A12A11A10=00001时Y0=1。
再加上A15的控制,可以得到4个片选信号,从而确定4片RAM的地址为:
Ⅰ片:
0000H-03FFH;
Ⅱ片:
0400H-07FFH;
Ⅲ片:
8000H-83FFH;
Ⅳ片:
8400H-87FFH;
但是,这个方案并不能满足题目中第一个要求,即每片RAM的地址区并不是唯一的。
因为4-16译码器的Y0=1可能出现的机会很多,实际上,只要A14A13A12A11A10≠00000时,都可以使Y0=1。
所以这个方案并不能用。
若要把存贮容量扩展到64kB,则除了增加1kBRAM芯片的数量外,还要通过全译码方法产生64个片选信号。
由于已经有1片4-16译码器和1片2-4译码器,所以只需要再增加3片4-16译码器就可以实现:
即用2-4译码器的4个输出控制4片4-16译码器的4个使能端,就可以在4片4-16译码器的输出端,获得64个片选信号。
1-24某系统的存贮器中配备有两种芯片:
容量为2k×8的ROM和容量为1k×8的RAM。
系统采用74LS138译码器来产生片选信号。
Y0,Y1和Y2直接接到三片ROM(片选信号#1,#2和#3);Y4和Y5则通过一组门电路产生4个片选信号接到4片RAM(片选信号#4,#5,#6和#7)。
连接的简图如图1-7所示。
试确定每一片存贮器的寻址范围。
各存贮器的片选信号都是低电平有效。
解:
各存贮器芯片的地址区可按一般的方法确定如下:
A15A14A13A12A11A10A9-A0地址区
#1片1000000……08000H-87FFH
11……1
#2片1000100……08800H-8FFFH
11……1
#3片1001000……09000H-97FFH
11……1
#4片1010000……0A000H-A3FFH
11……1
#5片1010010……0A400H-A7FFH
11……1
#6片1010100……0A800H-ABFFH
11……1
#7片1010110……0AC00H-AFFFH
11……1
1-25MCS-51的I/O口在用作输入时,为什么要先置1?
解:
因为输入端子和输出电路是连接在一起的,更具体地说是和输出MOS管的漏极连一起的。
若在上次操作中使输出MOS管处于导通状态(输出0),则使引脚端子对地呈低阻抗。
此时若要输入1,则对地的低阻抗将使逻辑电平变低,使得读引脚的结果与实际引脚状态不一致,即引脚状态为1,读入的结果却是0。
若是先给输出口置1,实际上是使输出级MOS管截止,电源通过上拉电阻(除P0口)对外输出高电位。
此时再去读引脚,则因为输出级MOS管为截止状态,无论引脚上的信号是1还是0都不会受影响,从而可以正确地读入。
1-26MCS-51单片机有5个中断源,但只能设置两个中断优先级,因此在中断优先级安排上受到一定的限制。
试问以下几种中断优先顺序的安排(级别由高到低)是否可能?
若可能,则应如何设置中断源的中断级别?
否则,请简述不可能的理由。
(1)定时器0,定时器1,外中断0,外中断1,串行口中断;
(2)串行口中断,外中断0,定时器0溢出中断,外中断1,定时器1溢出中断;
(3)外中断0,定时器1溢出中断,外中断1,定时器0溢出中断,串行口中断;
(4)外中断0,外中断1,串行口中断,定时器0溢出中断,定时器1溢出中断;
(5)串行口中断,定时器0溢出中断,外中断0,外中断1,定时器1溢出中断;
(6)外中断0,外中断1,定时器0溢出中断,串行口中断,定时器1溢出中断;
(7)外中断0,定时器1溢出中断,定时器0溢出中断,外中断1,串行口中断;
解:
(1)可以安排。
可设置定时器0和定时器1溢出中断为高级中断,其余为低级中断。
再依据内部同级查询次序,得到所需中断优先级顺序。
(2)可以安排。
只需将串行口中断设置为高级中断,其余的中断源都为低级中断。
(3)不能安排。
若把外中断0和定时器1溢出中断安排为高级中断,则这两个中断的优先顺序可以满足,但对其余3个中断,外中断1的级别不能高于定时器0溢出中断。
所以,总的优先顺序不能实现。
(4)可以安排。
可安排外中断0,外中断1和串行口中断为高级中断,其余两个定时器中断为低级中断。
(5)不能安排。
虽然可以单独设置串行口中断为高级中断,但其余4个中断的优先顺序只能按内部查询次序来定。
这时,定时器0溢出中断不能优先于外中断0。
(6)不能安排。
这时最接近的一个安排是将定时器1溢出中断设为低级中断,其余4个中断都为高级中断。
但是外中断1的查询次序再定时器0溢出中断之后,所以,不能满足所要求的优先顺序。
(7)可以安排。
只须使外中断0和定时器1溢出中断为高级中断,其余均为低级中断,就可满足所要求的优先顺序。
1-27单片机8031的时钟频率为6MHz,若要求定时值分别为0.1ms,1ms和10ms,定时器0工作在方式0、方式1和方式2时,其定时器初值各应为多少?
解:
时钟频率为6MHz,相应的定时时钟周期为2μs。
定时器初值和定时值的关系为
2n-定时器初值=定时值/定时周期
其中n由工作方式决定,可为13,16或8。
当定时值为0.1ms时:
2n-定时器初值=0.1ms/2μs=50
亦即需要50个定时时钟周期。
所以工作方式0,1,2都可选用。
方式0时,n=13,所以
213-x==50
x=8192-50=8142=(1111111001110)2
定时器初值为TH0=FEH,TL0=0EH。
方式1时,n=16
x=65536-50=65486=(1111111111001110)2
定时器初值为TH0=FFH,TL0=CEH。
方式2时,n=8
x=256-50=206=(11001110)2
定时器初值为TH0=CEH,TL0=CEH。
当定时值为1ms时:
2n-x=1ms/2μs=500
这时,方式2已不能使用,因为它只能提供256个定时时钟周期。
而工作方式0和方式1是可以采用的。
方式0,n=13,所以
x=8192-500=7692