《单片机原理及应用》黄友锐主编课后习题答案.docx
《《单片机原理及应用》黄友锐主编课后习题答案.docx》由会员分享,可在线阅读,更多相关《《单片机原理及应用》黄友锐主编课后习题答案.docx(28页珍藏版)》请在冰豆网上搜索。
![《单片机原理及应用》黄友锐主编课后习题答案.docx](https://file1.bdocx.com/fileroot1/2022-11/23/6f9a4214-4b06-4bb3-ad72-24f8176fc19c/6f9a4214-4b06-4bb3-ad72-24f8176fc19c1.gif)
《单片机原理及应用》黄友锐主编课后习题答案
第1章
1-1什么是单片机?
它与一般微型计算机在结构上何区别?
答:
单片微型计算机简称为单片机(SingleChipComputer),又称为微控制器(MCU即Micro-ControllerUnit)。
它是在一块芯片上集成了中央处理器(CPU)、存储器(RAM、ROM)、定时器/计数器、中断控制、各种输入/输出(I/O)接口(如并行I/O口、串行I/O口和A/D转换器)等为一体的器件。
微型计算机的基本结构由CPU(运算器、控制器)、存储器、输入设备和输出设备五大部分组成,各部分通过外部总线连接而成为一体。
单片机的结构是在一块芯片上集成了中央处理器(CPU)、存储器、定时器/计数器、中断控制、各种输入/输出接口(如并行I/O口、串行I/O口和A/D转换器)等,它们通过单片机内部部总线连接而成为一体。
1-2MCS-51系列单片机内部资源配置如何?
试举例说明8051与51兼容的单片机的异同。
答:
MCS-51系列单片机内部资源配置
AT89S53
12KB
FlashROM
256B
3×16
32
1
9/2
SPI,WDT,2个数据指针
W77E58
32KB
FlashROM
256B+
1024B
3×16
36
2
12/2
扩展了4位I/O口,双数据指针,WDT。
资源。
第2章
2-1MCS-51系列单片机内部有哪些主要的逻辑部件?
答:
一个8位CPU;一个片内振荡器及时钟电路;4K字节ROM程序存储器;128字节RAM数据存储器;两个16位定时器/计数器;可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;32条可编程的I/O线(四个8位并行I/O端口);一个可编程全双工串行口;具有五个中断源、两个优先级嵌套中断结构
2-2MCS-51设有4个8位端口(32条I/O线),实际应用中8位数据信息由哪一个端口传送?
16位地址线怎样形成?
P3口有何功能?
答:
实际应用中8位数据信息由P1口传送。
16位地址线由P0口输出低8位地址A7~A0,P2口输出高8位地址A15~A8。
P3口是一个多用途的端口,也是一个准双向口,作为第一功能使用时,其功能同P1口;当作第二功能使用时,P3.0—RXD串行输入(数据接收)口,P3.1—TXD串行输出(数据发送)口,P3.2—
外部中断0输入线,P3.3—
外部中断1输入线,P3.4—T0定时器0外部输入,P3.5—T1定时器1外部输入,P3.6—
外部数据存储器写选通信号输出,P3.7—
外部数据存储器读选通信号输入。
2-3MCS-51的存储器结构与一般的微型计算机有何不同?
程序存储器和数据存储器各有何作用?
答:
MCS-51存储器结构与常见的微型计算机的配置方式不同,它把程序存储器和数据存储器分开,各有自已的寻址系统、控制信号和功能。
程序存储器用来存放程序和始终要保留的常数,如经汇编后所编程序的机器码。
数据存储器通常用来存放程序运行中所需要的常数或变量,例如模/数转换时实时采集的数据等。
2-4MCS-51内部RAM区功能结构如何分配?
4组工作寄存器使用时如何选用?
位寻址区域的字节地址范围是多少?
答:
MCS-51系列单片机内部数据存储器:
00H~7FH单元组成的低128字节地址空间的RAM区,又分为为工作寄存器区(00H~1FH)、位寻址区(20H~2FH)和数据缓冲区(30H~7FH)。
80H~FFH(128~255)单元组成的高128字节地址空间的特殊功能寄存器(又称SFR)区。
对于8032、8052、8752的单片机还有80H~FFH单元组成的高128字节地址空间的RAM区。
4组工作寄存区是由程序状态字PSW(特殊功能寄存器,字节地址为0D0H)中的D4、D3位(RS1和RS0)来决定的。
位寻址区域的字节地址范围是20H~2FH(对应的位地址范围是00H~7FH)。
2-5特殊功能寄存器中哪些寄存器可以位寻址?
它们的字节地址是什么?
答:
P0字节地址80H,TCON字节地址88H,P1字节地址90H,SCON字节地址98H,P2字节地址A0H,IE字节地址A8H,P3字节地址B0H,IP字节地址B8H,PSW字节地址D0H,ACC字节地址E0H,B字节地址F0H。
2-6简述程序状态字PSW中各位的含义。
答:
CY(PSW·7)进位标志,AC(PSW·6)辅助进位标志,F0(PSW·5)用户标志位RS1、RS0(PSW·4、PSW·3)寄存器区选择控制位,OV(PSW·2)溢出标志,P(PSW.0)奇偶标志,每个指令周期都由硬件来置位或清“0”,以表示累加器A中1的位数的奇偶数
2-7一个时钟频率为6MHz的单片机应用系统,它的时钟周期、机器周期、指令周期分别是多少?
答:
时钟周期=1/3us、机器周期=2us、指令周期=2us。
2-8单片机有几种主要的工作方式?
其特点各是什么?
答:
有复位、程序执行、低功耗三种主要工作方式。
复位操作是单片机的初始化操作,单片机在进入运行前和在运行过程中程序出错或操作失误使系统不能正常运行时,需要进行复位操作,复位操作后,程序将从0000H开始重新执行。
单片机的程序的执行过程分为取指令、译码、执行三个过程。
待机方式,也称为空闲工作。
系统进入待机工作方式时,振荡器继续工作,中断系统、串行口以及定时器模块由时钟驱动继续工作,但时钟不提供给CPU。
单片机进入掉电工作方式,只有内部RAM单元的内容被保存,其它一切工作都停止。
2-9堆栈有何功能?
堆栈指针的作用是什么?
二者的关系?
为什么在程序设计时,要对SP重新赋值?
答:
堆栈的主要功能:
保护断点和程序现场,保存用户数据。
堆栈指针的作用是:
堆栈指针SP是一个8位特殊功能寄存器,指示出堆栈顶部在内部RAM中的位置。
两者的关系:
堆栈指针SP给定当前的栈顶,SP的初始值越小,堆栈深度就越深。
系统复位后,SP初始化为07H,使得堆栈事实上由08H单元开始。
考虑到08H~1FH单元分属于工作寄存器区1~3,若程序设计中要用到这些区,则最好把SP值改置为1FH或更大的值如60H,SP的初始值越小,堆栈深度就越深,堆栈指针的值可以由软件改变,因此堆栈在内部RAM中的位置比较灵活。
第3章
3-1设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0和内部RAM中50H,51H单元的内容为何值?
MOVA,59H;A=50H
MOVR0,A;R0=50H
MOVA,#00H;A=00H
MOV@R0,A;50H=00H
MOVA,#25H;A=25H
MOV51H,A;51H=25H
MOV52H,#70H;52H=70H
A=25HR0=50H50H=00H51H=25H
3-2访问外部数据存储器和程序存储器可以用哪些指令来实现?
举例说明。
答:
访问外部数据存储器指令有:
MOVX@DPTR,AMOVDPTR,#0100HMOV@DPTR,A
MOVXA,@DPTRMOVDPTR,#0200HMOVA,@DPTR
MOVXA,@RiMOVXA,@R0
MOVX@Ri,AMOVX@R1,A
访问程序存储器指令有:
MOVCA,@A+PC
MOVCA,@A+DPTR
3-3设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?
PUSH30H;61H=24H
PUSH31H;62H=10HSP=62H
POPDPL;DPL=10H
POPDPH;DPH=24HSP=60H
MOV30H,#00H;30H=00H
MOV31H,#0FFH;31H=0FFH
3-4设(A)=40H,(R1)=23H,(40H)=05H。
执行下列两条指令后,累加器A和R1以及内部RAM中40H单元的内容各为何值?
XCHA,R1;A=23HR1=40H
XCHDA,@R1;A=25H40H=03H
3-5两个四位BCD码数相加,被加数和加数分别存于50H,51H和52H,53H单元中(千位、百位在低地址中,十位、个位在高地址中),和存放在54H,55H和56H中(56H用来存放最高位的进位),试编写加法程序。
ORG0000H
LJMPSTART
ORG0100H
START:
MOVA,53H
ADDA,51H
DAA
MOV55H,A
MOVA,52H
ADDCA,50H
DAA
MOV56H,C
SJMP$
END
3-6设(A)=01010101B,(R5)=10101010B,分别写出执行下列指令后结果。
ANLA,R5;00000000B
ORLA,R5;11111111B
XRLA,R5;11111111B
3-7指令SJMPrel中,设rel=60H,并假设该指令存放在2114H和2115H单元中。
当该条指令执行后,程序将跳转到何地址?
答:
2116H+60H=2176H
3-8简述转移指令AJMPaddr11、SJMPrel、LJMPaddr16及JMP@A+DPTR的应用场合。
答:
AJMPaddr11为2K字节范围内的无条件转跳指令,把程序的执行转移到指定的地址。
SJMPrel是无条件转跳指令,执行时在PC加2后,把指令中补码形式的偏移量值加到PC上,并计算出转向目标地址。
转向的目标地址可以在这条指令前128字节到后127字节之间。
LJMPaddr16执行这条指令时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向指定地址。
转移的目标地址可以在64K程序存储器地址空间的任何地方,不影响任何标志。
JMP@A+DPTR指令的功能是把累加器中8位无符号数与数据指针DPTR中的16位数相加,将结果作为下条指令地址送入PC,利用这条指令能实现程序的散转。
3-9试分析下列程序段,当程序执行后,位地址00H,01H中的内容将为何值?
P1口的8条I/O线为何状态?
CLRC;CY=0
MOVA,#66H;A=66H
JCLOOP1
CPLC;CY=1
SETB01H;20H.1=1
LOOP1:
ORLC,ACC.0;CY=1
JBACC.2,LOOP2;
CLR00H
LOOP2:
MOVP1,A;P1=01100110B
SJMP$
20H.0=020H.1=1P1=66H
3-10查指令表,写出下列两条指令的机器码,并比较一下机器码中操作数排列次序的特点。
MOV58H,80H
85(80)(58)直接寻址字节送直接寻址字节:
汇编时源操作数在目标操作数之前。
MOV58H,#80H
75(58)(80)立即数送直接寻址字节:
汇编时目标操作数在原操作数之前。
第4章
4-1什么是单片机的程序设计语言。
答:
单片机的程序设计语言是指计算机能理解和执行的语言,人与CPU、MCU交流的语言。
MCS-51系列单片机的程序设计语言,按照语言的结构及其功能可以分为三种:
机器语言、汇编语言、高级语言。
4-2单片机的程序设计包括哪几个步骤。
答:
程序设计步骤如下:
(1)分析问题。
即仔细分析任务书中要实现的功能和性能指标。
(2)确定算法。
即找到解决问题思路、方法。
(3)分配内存单元。
即确定数据结构。
这一步往往与算法同时考虑。
(4)根据算法和数据结构,画出程序流程图。
(5)根据流程图编写汇编语言源程序。
编辑录入,保存为*.ASM文件。
(6)汇编。
排除语法错误。
(7)调试(DEBUG)。
找出错误并更正,再调试,直至通过。
(8)编写相关说明文档。
4-3画出单片机的三种基本程序结构。
答:
顺序结构流程图分支结构流程图循环结构流程图
4-4单片机的分支结构程序指令有哪几条?
答:
分支结构程序指令有JB、JNB、JC、JNC、JZ、JNZ、CJNE、JBC
4-5什么是单片机的程序嵌套?
生活中有哪些现象与单片机的嵌套类似?
答:
一个程序中还会调用别的程序,这称为程序嵌套。
生活例子:
在学习,有电话了,去接电话,水开了,放下电话去关掉电水壶,接着打电话,打完电话,接着学习。
4-6能否从一个子程序内部使用转移指令直接跳转到另一个子程序执行?
答:
可以,为了保证正确地从子程序2返回子程序1,再从1返回主程序,每次调用子程序时必须将下条指令地址保存起来,返回时按后进先出原则依次取出旧PC值。
4-7能否使用转移指令从主程序跳到子程序?
答:
不可以,当主程序需要执行某子程序的功能时,只需执行一条调用指令。
而并非使用转移指令
4-8能否使用转移指令从子程序跳到主程序?
答:
不可以,子程序的最后一条指令应该是返回指令RET或RETI,以确保子程序能够正确返回主程序。
执行RET指令时单片机将原来存在堆栈中的断点地址弹出给PC,保证子程序返回主程序中调用子程序的地方继续执行主程序。
子程序从子程序的标号开始,到RET或RETI指令结束。
RET指令是一般子程序的返回指令。
RETI指令是中断服务子程序的返回指令。
4-9画出主程序的一般流程图。
答:
主程序流程图
4-10画出子程序的一般流程图。
答:
子程序流程图
4-11子程序的规范化设计包括那几个部分?
答:
子程序的规范化设计包括:
(1)子程序名称。
给子程序起名字,起名的原则是子程序名能够反映子程序功能,该名字就是子程序的入口地址标识符。
(2)子程序功能,对子程序的功能给予简要的描述。
(3)入口参数,子程序所要运算或处理的数据(加工前的原料),在调用子程序之前,主程序要先准备好入口参数。
(4)出口参数,子程序运算或处理的结果(加工完成的数据),子程序结束之前,最终结果(出口参数)存放在约定的RAM单元,供主程序取用。
(5)资源占用情况,指出该子程序运行时所使用的片内工作寄存器(R0~R7)、SFR(特殊功能寄存器)、片内RAM单元及片外RAM单元,以便在主程序调用该子程序之前,考虑将这些资源中的哪些字节保护入栈。
4-12在片内RAM地址40H到4FH的存储单元中存有16个无符号数,找出其中的最大值,放入50H单元,请用“循环结构”和“分支结构”编程。
答:
流程图:
源程序:
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVR2,#0FH
MOVR0,#40H
MOVA,@R0
SUB:
INCR0
MOVB,@R0
CJNEA,B,NEXT
NEXT:
JCNEXT1
DJNZR2,SUB
JMPLAST
NEXT1:
MOVA,B
DJNZR2,SUB
JMPLAST
LAST:
MOV50H,A
SJMP$
4-13将片内若干个RAM单元的内容复制到片外RAM单元,请用“主程序”调用“子程序”编程,要求子程序入口参数为:
R0存放片内RAM起始地址,DPTR存放片外RAM起始地址,R1存放字节数。
请分别编写主程序和子程序。
答:
流程图
主程序子程序
源程序:
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVR1,#10H
MOVR0,#40H
MOVDPTR,#0000H
LCALLCOPY
SJMP$
COPY:
NEXT:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPL
DJNZR1,NEXT
RET
第5章
5-1简述中断、中断源、中断源的优先级及中断嵌套的含义。
答:
当CPU正在处理某项事件的时,如果外界或内部发生了紧急情况,要求CPU暂停正在处理的工作转而去处理这个紧急情况,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序,这样的过程称为中断。
向CPU提出中断请求的源称为中断源。
当系统有多个中断源时,就可能出现同时有几个中断源申请中断,而CPU在一个时刻只能响应并处理中断优先高的请求。
在实际应用系统中,当CPU正在处理某个中断源,即正在执行中断服务程序时,会出现优先级更高的中断源申请中断。
为了使更紧急的级别高的中断源及时得到服务,需要暂时中断(挂起)当前正在执行的级别较低的中断服务程序,去处理级别更高的中断源,待处理完以后,再返回到被中断了的中断服务程序继续执行,但级别相同或级别低的中断源不能中断级别高的中断服务,这就是所谓的中断嵌套。
5-2MCS-51单片机能提供几个中断源?
几个中断优先级?
各个中断的源的优先级怎样确定?
在同一优先级中各个中断源的优先级怎样确定?
答:
MCS-51单片机能提供五个中断源,两个中断优先级。
中断优先级是由片内的中断优先级寄存器IP(特殊功能寄存器)控制的。
PS:
串行口中断优先级控制位。
PS=1,串行口定义为高优先级中断源;PS=0,串行口定义为低优先级中断源。
PT1:
T1中断优先级控制位。
PT1=1,定时器/计数器1定义为高优先级中断源;PT1=0,定时器/计数器1定义为低优先级中断源。
PX1:
外部中断1中断优先级控制位。
PX1=1,外中断1定义为高优先级中断源;PX1=0,外中断1定义为低优先级中断源。
PT0:
定时器/计数器0(T0)中断优先级控制位,功能同PT1。
PX0:
外部中断0中断优先级控制位,功能同PX1。
在同一优先级中,循环轮流排队。
不分级别高低,所有中断源优先级都一律平等,CPU轮流响应各个中断源的中断请求。
5-3简述MCS-51单片机中断响应过程。
答:
CPU在每个机器周期的S5P2时刻采样中断标志,而在下一个机器周期对采样到的中断进行查询。
如果在前一个机器周期的S5P2有中断标志,则在查询周期内便会查询到并按优先级高低进行中断处理,中断系统将控制程序转入相应的中断服务程序。
5-4MCS-51单片机外部中断有哪两种触发方式?
如何选择?
对外部中断源的触发脉冲或电平有何要求?
答:
MCS-51单片机外部中断有:
负边沿触发方式和电平触发方式。
外部中断1(
)触发方式控制位。
如果IT1为1,则外中断1为负边沿触发方式(CPU在每个机器周期的S5P2采样
脚的输入电平,如果在一个周期中采样到高电平,在下个周期中采样到低电平,则硬件使IE1置1,向CPU请求中断);如果IT1为0,则外中断1为电平触发方式。
采用电平触发时,输入到
的外部中断源必须保持低电平有效,直到该中断被响应。
同时在中断返回前必须使电平变高,否则将会再次产生中断。
5-5在MCS-51单片机的应用系统中,如果有多个外部中断源,怎样进行处理?
答:
当系统有多个中断源时,就可能出现同时有几个中断源申请中断,而CPU在一个时刻只能响应并处理一个中断请求,为此,要进行排队。
排队的方式有:
(1)按优先级排队。
(2)循环轮流排队。
MCS-51单片机优先级比较简单,只有两级,可以通过优先级控制寄存器设置不同的优先级。
当优先级相同时,约定有5个中断源优先级顺序由高到低分别为:
外部中断0、定时器/计数器0溢出、外部中断1、定时器/计数器1溢出、串行口中断。
5-6MCS-51有哪几种扩展外部中断源的方法?
各有什么特点?
答:
1)利用定时器作为外部中断使用
特点:
把MCS-51的两个定时器/计数器(T0和T1)选择为计数器方式,每当P3.4(T0)或P3.5(T1)引脚上发生负跳变时,T0和T1的计数器加1。
可以把P3.4和P3.5引脚作为外部中断请求输入线,而定时器的溢出中断作为外部中断请求标志。
2)采用中断和查询相结合的方法扩充外部中断源
特点:
这种方法是把系统中多个外部中断源经过与门连接到一个外部中断输入端(例如
),并同时还接到一个I/O口,中断请求由硬件电路产生,而中断源的识别由程序查询来处理,查询顺序决定了中断源的优先级。
5-7MCS-51单片机响应外部中断的典型时间是多少?
在哪些情况下,CPU将推迟对外部
中断请求的响应?
答:
响应外部中断的典型时间是至少需要3个完整的机器周期。
1、外部中断
和
的电平在每个机器周期的S5P2时被采样并锁存到IE0和IE1中,这个置入到IE0和IE1的状态在下一个机器周期才被其内部的查询电路查询,未产生了一个中断请求。
2、没有满足响应的条件,CPU没有响应中断。
3、没有由硬件生成一条长调用指令转到相应的服务程序入口。
第6章
6-18051单片机内设有几个可编程的定时器/计数器?
它们可以有4种工作方式,如何选择和设定?
各有什么特点?
答:
MCS-51单片机内部有两个16位可编程的定时器/计数器,即定时器T0和定时器T1
M1M0:
定时器/计数器四种工作方式选择
6-28051单片机内的定时/计数器T0、T1工作在模式3时,有何不同?
答:
方式3对定时器T0和定时器T1是不相同的。
若T1设置为方式3,则停止工作。
方式3只适用于T0。
当T0设置为方式3时,将使TL0和TH0成为两个相互独立的8位计数器,TL0利用了T0本身的一些控制方式,它的操作与方式0和方式1类似。
而TH0被规定为用作定时器功能,对机器周期计数,并借用了T1的控制位TR1和TF1。
在这种情况下TH0控制了T1的中断。
6-3已知单片机时钟振荡频率为6MHz,利用T0定时器,在P1.1引脚上输出连续方波,波
形如下:
计算定时常数:
100us方式0Tc=FE0E;方式1Tc=FFCE;方式2Tc=CE
150us方式0Tc=FD15;方式1Tc=FFB5;方式2Tc=B5
方法一:
采用方式一,定时器中断。
源程序:
LJMPTINT0
ORG0100H
START:
MOVTMOD,#01H
MOVTL0,#0CEH
MOVTH0,#0FFH
SETBTR0
SETBEA
SETBET0
SETB20H.0
SETBP1.1
SJMP$
TINT0:
JNB20H.0,NEXT
MOVTL0,#0B5H
MOVTH0,#0FFH
CLRP1.1
CPL20H.0
SJMPLAST
NEXT:
MOVTL0,#0CEH
MOVTH0,#0FFH
SETBP1.1
CPL20H.0
LAST:
RETI
方法二:
采用方式2定时器中断加延时程序
源程序:
LJMPSTART
ORG000BH
LJMPTINT0
ORG0100H
START:
MOVTMOD,#02H
MOVTL0,#0CEH
MOVTH0,#0CEH
SETBTR0
SETBEA
SETBET0
SETB20H.0
SETBP1.1
SJMP$
T