单片机原理及应用姜志海第3版习题参考答案doc资料.docx
《单片机原理及应用姜志海第3版习题参考答案doc资料.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用姜志海第3版习题参考答案doc资料.docx(37页珍藏版)》请在冰豆网上搜索。
单片机原理及应用姜志海第3版习题参考答案doc资料
《单片机原理及应用(第3版)》习题参考答案
姜志海黄玉清刘连鑫编著
电子工业出版社
第1章
概述
1.简述微型计算机的结构及各部分的作用
微型计算机在硬件上由运算器、控制器、存储器、输入设备及输出设备五大部分组成。
运算器是计算机处理信息的主要部分;控制器控制计算机各部件自动地、协调一致地工作;存储器是存放数据与程序的部件;输入设备用来输入数据与程序;输出设备将计算机的处理结果用数字、图形等形式表示出来。
通常把运算器、控制器、存储器这三部分称为计算机的主机,而输入、输出设备则称为计算机的外部设备(简称外设)。
由于运算器、控制器是计算机处理信息的关键部件,所以常将它们合称为中央处理单元CPU(CentralProcessUnit)。
2.微处理器、微型计算机、微型计算机系统有什么联系与区别?
微处理器是利用微电子技术将计算机的核心部件(运算器和控制器)集中做在一块集成电路上的一个独立芯片。
它具有解释指令、执行指令和与外界交换数据的能力。
其内部包括三部分:
运算器、控制器、内部寄存器阵列(工作寄存器组)。
微型计算机由CPU、存储器、输入/输出(I/O)接口电路构成,各部分芯片之间通过总线(Bus)连接。
以微型计算机为主体,配上外部输入/输出设备、电源、系统软件一起构成应用系统,称为微型计算机系统。
3.简述在微型计算机中的地址总线、数据总线和控制总线的作用。
所谓总线,就是在微型计算机各芯片之间或芯片内部各部件之间传输信息的一组公共通信线。
计算机元件级总线包括地址总线AB(AddressBus)、数据总线DB(DataBus)、控制总线CB(ControlBus)三种。
(1)地址总线:
地址总线是CPU用来向存储器或I/O接口传送地址信息的,是三态单向总线。
地址总线的宽度决定了CPU可直接寻址的内存容量。
通过地址总线确定要操作的存储单元或I/O接口的地址。
(2)数据总线:
数据总线是CPU与存储器及外设交换数据的通路,是三态双向总线。
(3)控制总线:
控制总线是用来传输控制信号的,传送方向依据具体控制信号而定,如CPU向存储器或I/O接口电路输出读信号、写信号、地址有效信号,而I/O接口部件向CPU输入复位信号、中断请求信号等。
4.微型计算机是以CPU为核心,配上(存储器)、(输入/输出接口)和系统总线组成的计算机。
5.在计算机内部,一切信息的存取、处理和传递的形式是(C)。
A.ASCII码B.BCD码C.二进制D.十六进制
6.0~9的ASCII码是(C)。
A.0~9B.30~39C.30H~39HD.40H~49H
7.假设某CPU含有16根地址线,8根数据线,则该CPU的最大寻址能力是多少KB?
64KB
8.简述单片机的定义、特点、应用领域和发展方向。
定义:
它采用一定的工艺手段将CPU、存储器和I/O口集成在一个芯片上。
特点:
①单片机CPU的抗干扰性强,工作温度范围宽,而通用微机CPU一般要求在室温下工作,抗干扰能力较弱。
②单片机CPU可靠性强,在工业控制中,任何差错都有可能造成极其严重的后果。
③单片机CPU控制功能往往很强,数值计算能力较差,而通用微机CPU具有很强的数值运算能力,但控制能力相对较弱,将通用微机用于工业控制时,一般需要增加一些专用的接口电路。
④单片机CPU指令系统比通用微机系统简单。
⑤单片机CPU更新换代速度比通用微机处理器慢得多。
应用领域:
①单片机在智能仪表中的应用
②单片机在机电一体化中的应用
③单片机在实时控制中的应用
④在军工领域的应用
⑤单片机在分布式多机系统中的应用
⑥在民用电子产品中的应用
发展趋势:
2CPU的改进
②存储器的发展
③片内I/O口的改进
一般单片机都有较多的并行口,以满足外围设备、芯片扩展的需要,并配以串行口,以满足对多机通信功能的要求。
①提高并行口的驱动能力。
这样可减少外围驱动芯片。
有的单片机直接输出大电流和高电压,以便能直接驱动LED和VFD(荧光显示器)等。
②增加I/O口的逻辑控制功能。
中、高档单片机的位处理系统能够对I/O口线进行位寻址及位操作,这加强了I/O口线控制的灵活性。
3特殊的串行接口功能。
为单片机构成网络系统提供更便利的条件。
④外围电路内装化
⑤低功耗与工作电压范围加宽
⑥低噪声与高可靠性技术
⑦ISP及IAP
第2章MCS-51系列单片机硬件结构
1.MCS-51系列单片机内部有哪些主要的逻辑部件?
MCS-51单片机是在一块芯片上集成了CPU、RAM、ROM、定时器/计数器和多种I/O功能部件,具有了一台微型计算机的基本结构,主要包括下列部件:
一个8位的CPU、一个布尔处理机、一个片内振荡器、128B的片内数据存储器、4KB的片内程序存储器(8031无)、外部数据存储器和程序存储器的寻址范围为64KB、21个字节的专用寄存器、4个8位并行I/O接口、一个全双工的串行口、2个16位的定时器/计数器、5个中断源、2个中断优先级、111条指令、片内采用单总线结构。
2.MCS-51单片机设有4个8位并行端口,实际应用中8位数据信息由哪个端口传送?
16位地址线怎样形成?
P3口有何功能?
8位数据信息由P0口传送。
P2口形成地址大高8位,P0口结果锁存器形成地址的低8位。
P3口除具有一般的输入/输出功能,还具有第2功能:
P3.0
RXD串行口输入端
P3.1
TXD串行口输出端
P3.2
外部中断0请求输入端,低电平有效
P3.3
外部中断1请求输入端,低电平有效
P3.4
T0定时器/计数器0计数脉冲输入端
P3.5
T1定时器/计数器1计数脉冲输入端
P3.6
外部数据存储器及I/O接口写选通信号输出端,低电平有效
P3.7
外部数据存储器及I/O接口读选通信号输出端,低电平有效
3.MCS-51单片机内部RAM区的功能结构如何分配?
4组工作寄存器使用时如何选择?
位寻址区域的字节范围是多少?
MCS-51单片机片内RAM共有128B,字节范围为00H~7FH,可分为工作寄存器区、位寻址区、数据缓冲区共3个区域。
(1)工作寄存器区
00H~1FH单元为工作寄存器区。
工作寄存器也称通用寄存器,用于临时寄存8位信息。
工作寄存器分成4组,每组都是8个寄存器,用R0~R7来表示。
程序中每次只用一组,其余各组不工作。
使用哪一组寄存器工作,由程序状态字PSW中的PSW.3(RS0)和PSW.4(RS1)两位来选择,其对应关系如表所示。
工作寄存器组的选择表
PSW.4(RS1)
PSW.3(RS0)
当前使用的工作寄存器组
R0~R7
0
0
0组(00H~07H)
0
1
1组(08H~0FH)
1
0
2组(10H~17H)
1
1
3组(18H~1FH)
该区域当不被用做工作寄存器时,可以作为一般的RAM区使用。
(2)位寻址区
20H~2FH单元是位寻址区。
这16个单元(共计16×8=128位)的每一位都赋予了一个位地址,位地址范围为00H~7FH。
位地址区的每一位都可当做软件触发器,由程序直接进行位处理。
通常可以把各种程序状态标志、位控制变量存入位寻址区内。
00H…07H
08H…0FH
10H…17H
18H…1FH
0组
工作寄存器区
1组
2组
3组
20H
21H
22H
23H
24H
25H
26H
27H
28H
29H
2AH
2BH
2CH
2DH
2EH
2FH
07
06
05
04
03
02
01
00
位
寻
址
区
0F
0E
0D
0C
0B
0A
09
08
17
16
15
14
13
12
11
10
1F
1E
1D
1C
1B
1A
19
18
27
26
25
24
23
22
21
20
2F
2E
2D
2C
2B
2A
29
28
37
36
35
34
33
32
31
30
3F
3E
3D
3C
3B
3A
39
38
47
46
45
44
43
42
41
40
4F
4E
4D
4C
4B
4A
49
48
57
56
55
54
53
52
51
50
5F
5E
5D
5C
5B
5A
59
58
67
66
65
64
63
62
61
60
6F
6E
6D
6C
6B
6A
69
68
77
76
75
74
73
72
71
70
7F
7E
7D
7C
7B
7A
79
78
30H…7FH
数据缓冲区
该区域当不被用做位寻址区时,可以作为一般的RAM区使用。
(3)数据缓冲区
30H~7FH是数据缓冲区,即用户RAM,共80个单元。
由于工作寄存器区、位寻址区、数据缓冲区统一编址,使用同样的指令访问,这三个区的单元既有自己独特的功能,又可统一调度使用。
因此,前两个区未使用的单元也可作为用户RAM单元使用,使容量较小的片内RAM得以充分利用。
4.简述程序状态字PSW中各位的含义。
程序状态字PSW是一个8位寄存器,它保存指令执行结果的特征信息,为下一条指令或以后的指令的执行提供状态条件。
PSW中的各位一般是在指令执行过程中形成的,但也可以根据需要采用传送指令加以改变。
其各位定义如图所示。
①进位标志C(PSW.7)
在执行某些算术运算类、逻辑运算类指令时,可被硬件或软件置位或清零。
它表示运算结果是否有进位或借位。
如果在最高位有进位(加法时)或借位(减法时),则C=1,否则C=0。
②辅助进位(或称半进位)标志位AC(PSW.6)
它表示两个8位数运算,低4位有无进(借)位的状况。
当低4位相加(或相减)时,若D3位向D4位有进位(或借位),则AC=1,否则AC=0。
在BCD码运算的十进制调整中要用到该标志。
③用户自定义标志位F0(PSW.5)
用户可根据自己的需要为F0赋予一定的含义,通过软件置位或清零,并根据F0=1或0来决定程序的执行方式,或系统某一种工作状态。
④工作寄存器组选择位RS1、RS0(PSW.4、PSW.3)
可用软件置位或清零,用于选定当前使用的4个工作寄存器组中的某一组。
⑤溢出标志位OV(PSW.2)
做加法或减法时由硬件置位或清零,以指示运算结果是否溢出。
在带符号数加减运算中,OV=1表示加减运算超出了累加器所能表示的数值范围(–128~+127),即产生了溢出,因此运算结果是错误的。
OV=0表示运算正确,即无溢出产生。
执行乘法指令MULAB也会影响OV标志,当积大于255时,OV=1,否则OV=0;执行除法指令DIVAB也会影响OV标志,如B中所存放的除数为0,则OV=1,否则0V=0。
⑥奇偶标志位P(PSW.0)
在执行指令后,单片机根据累加器A中1的个数的奇偶自动将该标志置位或清零。
若A中1的个数为奇数,则P=1,否则P=0。
该标志对串行通信的数据传输非常有用,通过奇偶校验可检验传输的可靠性。
5.简述MCS-51单片机程序存储器的几个特殊入口地址的含义。
0000H:
程序入口地址
0003H:
外部中断0中断服务程序入口地址
000BH:
定时器/计数器0溢出中断服务程序入口地址
0013H:
外部中断1中断服务程序入口地址
001BH:
定时器/计数器1溢出中断服务程序入口地址
0023H:
串行口发送/接收中断服务程序入口地址
6.位地址7FH与字节地址7FH有何区别?
位地址7FH具体在内存中的什么位置?
二者存储的数据位数不一样。
位地址7FH存放一位二进制数,字节地址7FH存放8为二进制数。
位地址7FH具体在内存中字节地址为20H的最高位上。
7.试分别说明程序计数器PC和堆栈指针SP的作用。
复位后PC和SP各为何值?
程序计数器PC是一个16位专用寄存器,其内容表示下一条要执行的指令的地址。
复位后为0000H。
MCS-51单片机的堆栈是在片内RAM中开辟的一个专用区。
堆栈指针SP是一个8位专用寄存器,用来存放栈顶的地址。
进栈时,SP自动加1,将数据压入SP所指定的地址单元;出栈时,将SP所指示的地址单元中的数据弹出,然后SP自动减1。
因此SP总是指向栈顶。
复位后为07H。
8.MCS-51单片机设置4组工作寄存器,开机复位后,CPU使用的是哪组寄存器?
它们的地址如何?
CPU如何改变当前工作寄存器组?
第0组。
字节地址为00H~07H。
通过PSW的RS1、RS0来改变。
工作寄存器组的选择表
PSW.4(RS1)
PSW.3(RS0)
当前使用的工作寄存器组
R0~R7
0
0
0组(00H~07H)
0
1
1组(08H~0FH)
1
0
2组(10H~17H)
1
1
3组(18H~1FH)
9.什么是时钟周期、机器周期和指令周期?
当外部的振荡频率是8MHz时,8051单片机的机器周期为多少?
MCS-51单片机的时序由下面4种周期构成。
(1)振荡周期
振荡周期是指为单片机提供定时信号的振荡源的周期。
(2)状态周期(时钟周期)
两个振荡周期为一个状态周期,用S表示。
两个振荡周期作为两个节拍分别称为节拍P1和节拍P2。
在状态周期的前半周期P1有效时,通常完成算术逻辑运算;在后半周期P2有效时,一般进行内部寄存器之间的传输。
(3)机器周期
CPU执行一条指令的过程可以划分为若干阶段,每一阶段完成某一项基本操作,如取指令、存储器读/写等。
通常把完成一个基本操作所需要的时间称为机器周期。
(4)指令周期
指令周期是指执行一条指令所占用的全部时间,它以机器周期为单位。
MCS-51系列单片机除乘法、除法指令是4机器周期指令外,其余都是单周期指令和双周期指令。
若用12MHz晶体振荡器(晶振),则单周期指令和双周期指令的指令周期时间分别是1μs和2μs,乘法和除法指令为4μs。
通过上面的分析,我们可以看出,外部晶振的二分频是MCS-51单片机的内部时钟周期,6个时钟周期构成了单片机的机器周期。
如果单片机的外部晶振是8MHz,则其内部的机器周期是1.5μs。
12.已知PSW=10H,则工作寄存器R0的地址是10H,R4的地址是14H。
第3章MCS-51系列单片机指令系统
1.访问外部数据存储器和程序存储器可以用哪些指令来实现?
举例说明。
访问外部数据存储器:
MOVXA,@DPTR
MOVX@DPTR,A
MOVXA,@Ri
MOVX@Ri,A
访问程序存储器:
MOVCA,@A+DPTR
MOVCA,@A+PC
2.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H、62H、30H、31H、DPTR及SP的内容将有何变化?
PUSH30H
PUSH31H
POPDPL
POPDPH
MOV30H,#00H
MOV31H,#0FFH
(61H)=24H(62H)=10H(30H)=00H(31H)=0FFH
(DPTR)=2410H(SP)=60H
3.设(A)=40H,(R1)=23H,(40H)=05H。
执行下列两条指令后,累加器A和R1以及内部RAM中40H单元的内容各为何值?
XCHA,R1
XCHDA,@R1
(A)=25H(R1)=40H(40H)=03H
4.设(A)=01010101B,(R5)=10101010B,分别写出执行ANLA,R5;
ORLA,R5;XRLA,R5指令后的结果。
00000000B11111111B11111111B
5.简述转移指令AJMPaddr11,SJMPrel,LJMPaddr16及JMP@A+DPTR的应用。
AJMPaddr11:
2K范围内的转移;SJMPrel:
256字节复位内的转移;
LJMPaddr16:
64K范围内的转移;JMP@A+DPTR:
在某一地址开始的256字节范围内的转移。
6.试用三种方法实现累加器A和寄存器B的内容交换。
(1)MOVR0,A
MOVA,B
MOVB,R0
(2)PUSHA
PUSHB
POPA
POPB
(3)MOVR0,B
XCHA,R0
MOVB,R0
7.写出实现下列要求的指令或程序片段。
(1)将内部RAM20H单元内容与累加器A内容相加,结果存放在20H单元中。
(2)将内部RAM30H单元内容与内部RAM31H单元内容相加,结果存放到内部RAM31H单元中。
(3)将内部RAM20H单元内容传送到外部RAM2000H单元中。
(4)使内部RAM20H单元的D7和D3位清零,其他位保持不变。
(5)使内部RAM20H单元的D7和D3位置1,D5位清零,其他位保持不变。
(6)使内部RAM20H单元的D7和D3位置1,D5位取反,其他位保持不变。
(1)ADDA,20H
MOV20H,A
(2)MOVA,30H
ADDA,31H
MOV31H,A
(3)MOVA,20H
MOVDPTR,#2000H
MOVX@DPTR,A
(4)CLR03H
CLR07H
或:
ANL20H,#01110111B
(5)SETB03H
SETB07H
CLR05H
或:
ORL20H,#10001000B
ANL20H,#11011111B
(6)SETB03H
SETB07H
CPL05H
或:
ORL20H,#10001000B
XRL20H,#00100000B
8.试分析下列程序段执行后,(A)=?
,(30H)=?
MOV30H,#0A4H
MOVA,#0D6H
MOVR0,#30H
MOVR2,#5EH
ANLA,R2
ORLA,@R0
SWAPA
CPLA
XRLA,#0FEH
ORL30H,A
(A)=6EH(30H)=0EFH
9.设片内RAM(30H)=0EH,执行下面的程序后,(A)=?
,指出该程序完成的功能。
MOVR0,#30H
MOVA,@R0
RLA
MOVB,A
RLA
RLA
ADDA,B
=8CH
功能:
将30H中的内容*10操作,结果在累加器A中。
第4章MCS-51系列单片机汇编语言程序设计
1.编程将片内RAM30H~39H单元中的内容送到以3000H为首的存储区中。
MOVR0,#30H
MOVDPTR,#3000H
MOVR7,#10
L1:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR7,L1
RET
2.片内RAM60H开始存放20个数据,试统计正数、负数及为零的数据个数,并将结果分别存在50H、51H、52H单元中。
MOV50H,#0
MOV51H,#0
MOV52H,#0
MOVR7,#20
MOVR0,#60H
L3:
MOVA,@R0
JZL1
JBACC.7,L2
INC50H
SJMPLEND
L2:
INC51H
SJMPLEND
L1:
INC52H
LEND:
INCR0
DJNZR7,L3
RET
3.设10次采样值依次放在片内RAM50H~59H的连续单元中,试编程去掉一个最大值、去掉一个最小值,求其余8个数的平均值,结果存放在60H中。
MOVR0,#50H;最大值
MOVA,@R0
MOVR7,#9
INCR0
L1:
CLRC
MOVB,A
SUBBA,@R0
MOVA,B
JNCL2
XCHA,@R0
L2:
INCR0
DJNZR7,L1
MOVR0,#51H;最小值
MOVA,@R0
MOVR7,#8
INCR0
L1:
CLRC
MOVB,A
SUBBA,@R0
MOVA,B
JNL4
XCHA,@R0
L4:
INCR0
DJNZR7,L3
MOVR3,#0;求和
MOVR4,#0
MOVR7,#8
MOVR0,#52H
L5:
MOVA,R4
ADDA,@R0
MOVR4,A
MOVA,R3
ADDCA,#0
MOVR3,A
INCR0
DJNZR7,L5
MOVA,R4;平均值
SWAPA
RLA
MOVB,A
MOVA,R3
RRA
RRA
RRA
ANLA,#00011111B
ORLA,B
MOV60H,A
RET
4.编写程序将R4、R5、R6中的3个字节数据对半分解成6个字节,存入显示缓冲区(DISMEM0~DISMEM5)。
MOVA,R6
LCALLCL
MOVDISMEM0,R0
MOVDISMEM1,R1
MOVA,R5
LCALLCL
MOVDISMEM2,R0
MOVDISMEM3,R1
MOVA,R4
LCALLCL
MOVDISMEM4,R0
MOVDISMEM5,R1
RET
CL:
MOVB,A
ANLA,#0FH
MOVR0,A
MOVA,B
ANLA,#0F0H
SWAPA
MOVR1,A
RET
5.试编程把以2000H为首地址的连续10个单元的内容按升序排列,存放到以3000H为首地址的存储区中。
MOVDPTR,#2000H;读到片内30H开始的单元
MOVR0,#30H
MOVR7,#10
L1:
MOVXA,@DPTR
MOV@R0,A
INCDPTR
INCR0