单片机原理及应用 第二版 曹克澄 课后习题答案Word文件下载.docx
《单片机原理及应用 第二版 曹克澄 课后习题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用 第二版 曹克澄 课后习题答案Word文件下载.docx(48页珍藏版)》请在冰豆网上搜索。
2+1×
2=0.25+0.125=0.375;
B=0.011
C=0.011H=0×
16-1+1×
16-2+1×
16-3=0.004150390625
所以:
A>
B>
C
2)A=1001B=9;
B=1001;
C=1001H=4097
A<
B<
7.先将下列各组数据转换为补码表示的带符号数,然后用进行补码运算,再将结果还原成原码,并写出对应的十进制数检验结果是否正确。
1)(―74)+41
2)(―74)―41
根据补码定义有:
―74=(0B6H)补,+41=(29H)补,―41=(0D7H)补
1)[(―74)+41]补=(―74)补+(41)补=(0B6H+29H)补=(0DFH)补
=(-33)真值
十进制数运算:
(―74)+41=―33
二者运算结果相同。
2)[(―74)―41]补=(―74)补+(―41)补=(0B6H+0D7H)补=(8DH)补=(-115)真值
(―74)―41=―115
8.何谓单片机?
单片机有何特点?
单片机(SingleChipMicrocomputer)是指把CPU、RAM、ROM、定时器/计数器以及I/O接口电路等主要部件集成在一块半导体芯片上的微型计算机。
单片机在控制应用领域中的特点:
(1)体积小、结构简单、可靠性高;
(2)控制功能强;
(3)低电压、低功耗;
(4)优异的性价比。
9.单片机内部ROM的配置有几种形式?
单片机片内ROM的配置状态可分四种:
(1)片内掩膜(Mask)ROM型单片机(如8051),适合于定型大批量应用产品的生产;
(2)片内EPROM型单片机(如8751),适合于研制产品样机;
(3)片内无ROM型单片机(如8031),需外接EPROM,单片机扩展灵活,适用于研制新产品;
(4)EEPROM(或FlashROM)型单片机(如89C51),内部程序存储器电可擦除,使用更方便。
第2章MCS-51系列单片机的结构和时序
1.8051单片机内包含哪些主要功能部件?
各有什么功能?
8051单片机是一个完整的单片微型计算机。
它包括以下功能部件:
(1)1个8位CPU;
(2)片内4KB的程序存储器ROM;
(3)片内128B的数据存储器RAM;
(4)可寻址外部程序存储器和数据存储器空间各64KB的控制电路;
(5)21个特殊功能寄存器SFR;
(6)4个8位并行I/O口P0~P3,共32根I/O线;
(7)1个全双工的串行口;
(8)2个16位定时器/计数器;
(9)5个中断源,有2个优先级嵌套中断结构;
(10)片内振荡器及时钟电路。
2.8051单片机的EA信号有何功能?
8031的EA引脚应如何处理,为什么?
答:
(1)EA是访问外部程序存储器ROM的控制信号。
当EA为低电平(接地)时,CPU只执行外部程序存储器中的程序。
当EA为高电平且PC值小于0FFFH(4K)时,CPU执行内部程序存储器的程序,但当PC的值超出4K时(对8051/8751/8951)将自动转去执行片外程序存储器内的程序。
8031单片机无片内ROM的,必须外部扩展程序存储器,因此,8031的EA必须接地(低电平)。
3.MCS-51单片机的P0~P3口各有什么特点?
MCS-51单片机有P0、P1、P2、P3四个双向的8位并行I/O口,每个端口可以按字节输入或输出,每一条I/O线也可以单独用作输入或输出(即按位进行输入或输出)。
每个端口都是由一个锁存器(即特殊功能寄存器P0~P3),一个输出驱动器和两个(P3口为3个)输入缓冲器组成。
并行I/O口作输出时数据可以锁存,作输入时数据可以缓冲,但它们又各具特点。
(1)P0口和P2口构成MCS-51单片机的16位地址总线,P0口还是8位的数据总线。
P3口多用于第二功能输入或输出。
通常只有P1口用于一般输入/输出。
P3口各位的第二功能
(2)系统复位后,P0~P3口的32个管脚均输出高电平,因此在系统的设计过程中,应保证这些管脚控制的外设不会因为系统复位而发生误动作。
(3)P0~P3口输出级的电路结构有所不同。
P0口是三态输出,其每个管脚均可以驱动8个LSTTL输入,而P1~P3口的输出级均有上拉电阻,每个管脚可驱动4个LSTTL输入。
(4)每个并行口,可定义一部分管脚为输入脚,另一部分管脚为输出脚,没有使用的管脚可以悬空。
4.简述8051单片机存储器的组织结构和片内RAM的地址空间分配。
8051单片机的存储器包括程序存储器和数据存储器,从用户使用的角度可分为三个逻辑地址空间:
(1)片内、片外统一编址的64KB程序存储器地址空间0000H~0FFFFH;
(2)64KB的外部数据存储器或扩展I/O口地址空间0000H~0FFFFH;
(3)256B的片内数据存储器地址空间00H~FFH(包括低128B的内部RAM地址00H~7FH和高128B的特殊功能寄存器地址空间,21个SFR离散地分布在这个区域)。
内部RAM共有128个单元,根据用途可划分为工作寄存器区、位寻址区和通用RAM区,各区域的特性如下:
(1)工作寄存器区(00H~1FH)寄存器区32个单元共分4个组,每个组有8个8位的寄存器R0~R7。
在任何时刻,四个组中只能有一组可以成为当前工作寄存器组使用,其他三组作为一般的内部RAM使用。
当前工作寄存器组由程序状态字寄存器PSW的RS0和RS1两位的状态来决定。
(2)位寻址区(20H~2FH)共16个单元,每个单元有8个位,每个位都有一个位地址,编号为00H~7FH,位寻址区的16个单元也可以按字节寻址,作为一般的内部RAM使用。
(3)通用RAM区(30H~7FH)这部分存储空间作为一般的内部RAM区或堆栈区,CPU只能按字节方式寻址。
5.8051单片机有哪些特殊功能寄存器?
8051单片机有21个8位的特殊功能寄存器(SFR),它们的地址离散地分部在内部数据存储器的80H~FFH地址空间。
在8051单片机结构中,21个SFR在物理上是分散在片内各功能部件中:
(1)CPU的中SFR:
Acc、B、PSW、SP和DPTR(16位寄存器,由DPH和DPL组成);
(2)定时/计数器单元中的寄存器:
TMOD、TCON、T0(16位寄存器,由TH0和TL0
组成)和T1(16位寄存器,由TH1和TL1组成);
(3)并行I/O口寄存器:
P0、P1、P2和P3;
(4)中断系统内的寄存器:
IE和IP;
(5)串行端口中的寄存器:
SCON、SBUF和PCON。
6.程序计数器PC的功能和特点?
程序计数器PC是一个16位的专用寄存器,用来存放即将要执行的指令地址,可对64KB的程序存储器直接寻址。
它具有自动加1功能,当CPU要取指令时,PC的内容送地址总线上,从存储器中取出指令后,PC内容则自动加1,指向下一条指令,从而保证程序按顺序执行。
PC虽然也是CPU内部的一个寄存器,但它在物理结构上是独立的,没有地址,是不可寻址的,用户无法对它进行直接读写,不属特殊功能寄存器。
7.什么叫堆栈?
堆栈指针SP的作用是什么?
8051单片机堆栈的最大容量是多少字节?
堆栈是按照“先进后出,后进先出”的原则来存取数据的一个内部RAM区域,这个存储器区域的一端是固定的(栈底),另一端是活动的(栈顶),每个存储单元是不能按字节任意访问的。
堆栈指针SP始终指向栈顶单元,栈顶随着数据入栈和出栈上下浮动。
8051单片机堆栈的最大容量是128字节。
8.8051单片机是如何确定和改变当前工作寄存器组?
在任何时刻,8051单片机的四个工作寄存器组中只能有一组可以成为当前工作寄存器组使用,其他三组作为一般的内部RAM使用。
当前工作寄存器组由程序状态字寄存器PSW的RS0和RS1两位的状态来决定,如表所示。
的工作寄存器组。
9.单片机复位后,CPU使用了哪一组工作寄存器?
工作寄存器R0~R7对应的单元地址是什么?
单片机复位后,RS1和RS0都为0,CPU选中第0组作为当前工作寄存器组,工根据需要,用户可以利用传送指令或位操作指令改变RS1和RS0的内容来选择不同
作寄存器R0~R7对应的单元地址是00H~07H。
10.程序状态字寄存器PSW的作用是什么?
各位的作用是什么?
PSW是一个8位的特殊功能寄存器,由一些标志位组成,用于存放程序运行中的各种状态信息。
它可以进行位寻址。
各位的作用如下:
Cy:
进位标志位。
在进行加(或减)法运算时,若操作结果的最高位(D7位)有进位(或借位)时,Cy由硬件置1,否则Cy清0。
在进行位操作时,Cy又是位累加器,指令助记符用C表示。
AC:
辅助进位标志位。
在进行加(或减)运算时,若操作结果的低半字节(D3位)向高半字节产生进位(或借位)时,AC位将由硬件自动置1,否则AC位清0。
F0:
用户标志位。
用户根据需要对F0置位或复位,作为软件标志。
RS1和RS0:
工作寄存器组选择控制位。
由用户用软件改变RS1和RS0的状态,以选择内RAM中的哪组工作寄存器为当前工作寄存器组。
OV:
溢出标志位。
当进行补码运算时,运算结果超出-128~+127范围时,产生溢出,则OV自动置1,否则OV清0。
PSW.1:
保留位。
8051中未定义。
P:
奇偶校验标志位。
每条指令执行完后,该位始终跟踪累加器A中1的数目的奇偶性。
如果A中有奇数个1,则P=1;
否则P=0。
11.什么是时钟周期、机器周期和指令周期?
(1)时钟周期(又称为振荡周期)是指振荡器产生一个振荡脉冲信号所用的时间,是振荡频率的倒数,称为拍节。
(2)机器周期是指CPU完成某一个规定操作所需的时间,8051单片机的一个机器周期包含6个状态,并依次表示为S1~S6,每个状态分为2个节拍。
因此一个机器周期包含12个时钟周期(振荡周期),依次表示为:
S1P1、S1P2、S2P1、„、S6P1、S6P2。
(3)指令周期是指CPU执行一条指令所需要的时间称为指令周期。
MCS-51单片机指令周期根据指令的不同,可包含有1或2或4个机器周期。
12.8051单片机复位后寄存器PC、A、PSW、SP、P0~P3的状态各是什么?
复位后内部RAM中的数据有何影响?
8051单片机复位后PC为0000H,A和PSW均为00H,SP为07H,P0~P3均为FFH。
单片机的复位不影响内部RAM的状态(包括工作寄存器Rn)。
13.80C51如何进入节电工作方式?
只有CHMOS型单片机(如80C51)才有这种工作方式,有两种节电方式,即待机方式和掉电保护方式。
由片内SFR中的电源控制寄存器PCON的低4位来控制待机和掉电两种方式,其格式如下:
(1)IDL:
待机方式位。
若IDL=1,进入待机方式;
(2)PD:
掉电方式位。
若PD=1,进入掉电方式;
当PD和IDL同时为1,则先进入掉电工作方式。
复位后,PCON中有定义的位均为0。
第3章MCS-51系列单片机指令系统
1.简述汇编指令格式。
汇编语言的指令格式一般如下:
[标号:
]操作码[第一操作数][,第二操作数][,第三操作数][;
注释]其中:
带有方括号[„„]的部分代表可选项。
标号:
是表示该指令的符号地位,可以根据需要进行设置。
标号以英文字母开始的1-6个字母或数字组成的字符串表示,并以“:
”结尾。
操作码:
是表示指令的操作功能,用助记符表示。
每条指令都有操作码,是指令的核心部分。
操作数:
表示参与传送、运算的数据或数据地址。
这里的操作数不一定就是直接参与运算或传送的,而应根据操作数的寻址方式,寻找出真正参与运算或传送的数据。
二个或二个以上操作数之间用“,”间隔。
注释:
用来解释该条指令或一段程序的功能,便于对指令或程序的阅读理解。
注释以“;
”为开始,注释部分对程序的执行没有影响。
2.什么叫寻址方式?
在MCS-51系列单片机指令系统中,主要有哪几种寻址方式?
试分别举例说明。
寻址就是寻找操作数的地址,寻找操作数地址的方式,称为操作数地址的寻址方式,简称寻址方式。
在MCS-51系列单片机指令系统中,主要的寻址方式有:
(1)立即寻址方式,指令如:
MOVA,#67H;
(2)立即寻址方式,指令如:
MOVA,66H;
(3)寄存器寻址方,指令如:
MOVA,R3;
(4)寄存器间接寻址方式,指令如:
MOVA,@R1;
(5)变址寻址方式,指令如:
MOVCA,@A+DPTR;
(6)相对寻址方式,指令如:
SJMP30H;
(7)位寻址方式,指令如:
MOVACC.3,Cy
3.试说明下列指令中划线部分的寻址方式。
MOVA,@R0
ADDA,#36H
MOVCA,@A+PC
DJNZR2,rel
SETBRS1
CLRA
MOV45H,A
CLRC
第1条为寄存间接寻址方式;
第2条指令为立即寻址方式;
第3条指令为变址寻址方式;
第4条指令为相对寻址方式,第5条指令为位寻址方式,第6条指令为寄存器寻址,第6条指令为直接寻址方式,第7条指令为位寻址方式。
4.设A=9BH,R0=30H,内RAM的(30H)=40H,(40H)=6DH,分别执行下列指令,说明被真正传送的数据是多少?
1)MOVA,#40H
2)MOV40H,@R0
3)MOVA,30H
4)MOVA,@R0
5)MOVA,R0
1)真正被传送的数据是立即数40H。
2)真正被传送的数据是R0间址中(即30H单元中)的数据40H。
3)真正被传送的数据是30H单元中的数据40H。
4)真正被传送的数据是R0间址中(即30H单元中)的数据40H。
5)真正被传送的数据是R0中的数据30H。
5.设A=86H,R0=30H,R1=40H,内RAM的(30H)=76H,(40H)=6BH,执行下面程序:
MOVA,40H
MOV@R0,A
MOVA,R0
MOV@R1,A
MOVR1,A
MOV@R1,#70H
后,A=,R0=,R1=,(30H)=,(40H)=
MOVA,40H;
A=6BH
MOV@R0,A;
(R0)=(30H)=6BH
MOVA,R0;
A=30H
MOV@R1,A;
(R1)=(40H)=30H
MOVR1,A;
R1=30H
MOV@R1,#70H;
(R1)=(30H)=70H
A=30H,R0=30H,R1=30H,(30H)=70H,(40H)=30H
6.设A=65H,R0=30H,R1=31H,R2=32H,内RAM的(30H)=40H,(31H)=50H,(32H)=60H,(40H)=70H,(50H)=80H,执行下面程序:
XCHDA,@R1
MOV40H,A
SWAPA
MOV50H,A
XCHA,R2
后,A=,R0=,R1=,R2=,(30H)=,(31H)=,(32H)=,(40H)=,(50H)=
XCHDA,@R1;
A=60H,(R1)=(31H)=55H
MOV40H,A;
(40H)=60H
SWAPA;
A=06H
MOV50H,A;
(50H)=06H
XCHA,R2;
A=32H,R2=06H
(R0)=(30H)=32H
A=32H,R0=30H,R1=31H,R2=06H,(30H)=32H,
(31H)=55H,(32H)=60H,(40H)=60H,(50H)=06H
7.执行下面程序后,试问:
A=?
ORG1000H
MOVDPTR,#1020H
MOVA,#03H
MOVCA,@A+DPTR
RET
ORG1020H
DB56H,78H,65H,29H,10H
ORG1000H
MOVDPTR,#1020H;
DPTR=1020H
MOVA,#03H;
A=03H
MOVCA,@A+DPTR;
A=(1023H)=29H
A=29H
8.试用数据传送指令来实现下列要求的数据传送。
1)将R2中的内容送到R3中。
2)将内RAM30H单元中的内容与外RAM2040H单元中的内容交换。
3)将ROM2040H单元中的数据存放在内RAM50H单元中。
4)将外RAM30H单元中的内容送到R2中。
5)将R2与R3中的内容进行交换。
6)将ROM2100H单元中内容送外RAM3165H单元中。
1)MOVA,R2
MOVR3,A
2)MOVDPTR2040H
MOVXA,@DPTR
MOVR1,A
MOVA,30H
MOVX@DPTR,A
MOV30H,R1
3)MOVA,#00H
MOVDPTR,#2040H
MOVCA,@A+DPTR
MOV50H,A
4)MOVR0,#30H
MOVXA,@R0
MOVR2,A
5)XCHA,R2
XCHA,R3
XCHA,R2
6)MOVA,#00H
MOVDPTR,#2100H
MOVDPTR,#3165H
9.设A=7EH,R0=40H,(40H)=9AH,B=23H,Cy=1。
分别执行下列指令后,试问:
各标志位为什么状态?
1)ADDA,@R0
2)ADDCA,R0
3)SWAPA
4)XCHA,@R0
5)INCA
6)SUBBA,#56H
7)SUBBA,R0
8)RLCA
9)RRA
10)CPLA
11)ANLA,@R0
12)ORLA,#8FH
13)XRLA,40H
14)ANL40H,A
15)ORL40H,#0F0H
16)ANLA,#0FH
17)DECA
18)MULAB
19)DIVAB
20)RRCA
A=A+(R0)=A+(40H)=7EH+9AH=18H,Cy=1,AC=1,OV=0,P=0
A=A+R0+Cy=7EH+40H+1=0BFH,Cy=0,AC=0,OV=1,P=1
A=0E7H
A=(R0)=(40H)=9AH,(R0)=(40H)=A=7EH,P=0
A=A+1=7EH+1=7FH,P=1
A=A-56H-Cy=7EH-56H-1=27H,Cy=0,AC=0,OV=0,P=0
A=A-R0-Cy=7EH-40H-1=3DH,Cy=0,AC=0,OV=0,P=1
A=11111101B=0FDH,Cy=0,P=1
A=00111111B=3FH,P=0
A=81H,P=0
A=A∧(R0)=A∧(40H)=7EH∧9AH=1AH,P=1
A=A∨8FH=7EH∨8FH=0FFH,P=0
A=A⊕(40H)=7EH⊕9AH=0E4H,P=0
(40H)=(40H)∧A=9AH∧7EH=1AH,A=7EH
(40H)=(40H)∨0F0H=9AH∨0F0H=0FAH,A=7EH
A=A∧0FH=7EH∧0FH=0EH,P=1
A=A-1=7EH-1=7DH,P=0
A×
B=7EH×
23H=01111110B×
00100011B=0001000100111010B=113AHB=11H,A=3AH,OV=1,P=0
A÷
B=7EH÷
23H=01111110B÷
00100011B=00000011B余00010101BA=03H,B=15H,OV=0,P=0
A=0BFH,Cy=0,P=1
10.试编写程序,要求将内RAM30H~4FH中的内容平移送到40H~5FH中。
(参考程序)
START:
MOVR0,#4FH
MOVR1,#5FH
MOVR2,#20H
LOOP:
MOVA,@R0
MOV@R1,A
DECR0
DECR1
DJNZR2,LOOP
END
11.试编写程序,将内RAM的30H~4FH中的内容清零。
MOVR0,#30H