2023年7月17日发(作者:)
单片机原理及应用》习题答案
第一章计算机基础知识
1- 1
微型计算机主要由哪几部分组成?各部分有何功能?
答:一台微型计算机由中央处理单元(
CPU)、存储器、
I/O
接口及
I/O
设备 等组成,相互之间通过三组总线(
Bus):即地址总线
AB、数据总线
DB和控制总 线
CB
来连接。
CPU由运算器和控制器组成, 运算器能够完成各种算术运算和逻辑运算操作, 控制器用于控制计算机进行各种操作。
存储器是计算机系统中的“记忆”装置,其功能是存放程序和数据。按其功 能可分为
RAM和
ROM。
输入/
输出(
I/O
)接口是
CPU与外部设备进行信息交换的部件。
总线是将
CPU、存储器和
I/O
接口等相对独立的功能部件连接起来,并传送 信息的公共通道。
1- 3
什么叫单片机?其主要由哪几部分组成?
答:单片机(
Single Chip Microcomputer
)是指把
CPU、RAM、
ROM、定时 器/
计数器以及
I/O
接口电路等主要部件集成在一块半导体芯片上的微型计算 机。
1- 4
在各种系列的单片机中, 片内
ROM的配置有几种形式?用户应根据什么 原则来选用?
答:单片机片内
ROM的配置状态可分四种:
(1)片内掩膜(
Mask)ROM型单片机(如
8051),适合于定型大批量应用产 品的生产;
(2)片内
EPROM型单片机(如
8751),适合于研制产品样机;
(3)片内无
ROM型单片机(如
8031),需外接
EPRO,M单片机扩展灵活,适 用于研制新产品;
(4)EEPRO(M或
Flash ROM)型单片机(如
89C51),内部程序存储器电可
擦除,使用更方便。
1-5
写出下列各数的另两种数制的表达形式(二、十、十六进制)
1100010
98
1001110
20039
4E47H
10
585
249H
111111
16236
3F6CH
11101
29
1D
101
1495
5D7 62H
1- 6
写出下列各数的
BCD参与:
1 / 21
59:01011001,1996:0110,4859.2:1001.0010
389.41
:
.01000001
第二章
MCS-51
单片机的硬件结构
2- 1 8052
单片机片内包含哪些主要逻辑功能部件?
答:8052
单片机片内包括:
①
8
位中央处理器
CPU一个
② 片内振荡器及时钟电路
③
256B
数据存储器
RAM。
④
8KB片内程序存储空间
ROM
⑤
21
个特殊功能寄存器
SFR
⑥
4
个
8
位并行
I/O
端口(
32
条线)
⑦
1
个可编程全双工串行口
⑧ 可寻址
64KB的外部程序存储空间和外部数据存储空间
⑨
3个16位的定时器
/计数器
⑩
6
个中断源、
2
个优先级嵌套中断结构
2- 2 8052
的存储器分哪几个空间?如何区别不同空间的寻址?
答:⑴
8052的存储器分为
6
个编址空间:
①片内
ROM的容量为
8KB,其地址为
0000H~1FFF;H
②可扩展片外
ROM的容量为
64KB,其地址为
0000H~FFFF;H
片内
RAM的容量为
256B,其地址为
00H~FFH分为二块:③地址
00H~7FH共
128B为片内
RAM低区,④另
128B
为片内
RAM高区,其地址空间为
80H`FFH,其 地址空间与
SFR功能寄存器地址重叠;
⑤可扩展片外
RAM的容量为
64KB,其地址为
0000H~1FFFH;
⑥特殊功能寄存器
SFR的空间为
128B,其地址为
80H~FFH,但实际只定义了
26B
单元,这
26B单元分散在
80H`F0H。
⑵程序存储器和数据存储器在逻辑上是完全分开的。
CPU通过指令
MOVC访问程序存储器。当
8052第
31脚EA接高电平时,
CPU
将从片内程序存储器
0000H单元开始执行,当
PC值超出片内程序存储空间,即 大于
1FFFH时,会自动转向片外程序存储空间。当
EA
接低电平时,
CPU将从片 外程序存储器
ROM的
0000H单元开始执行。
CPU通过
MOV指令访问片内数据存储空间
RAM,低区
128B地址空间
00H~7FH
中地址为
00H~1FH这
32个单元分为
4
个工作寄存器组,分别用
R0~R7表示,通 过工作寄存器指令进行访问。 片内
RAM中的
20H~2FH单元除可作为一般字节寻址 单元使用外,这
16
个单元共
128位中的每一位又可2 / 21
单独作为软件触发器使用, 具有位寻址功能,其位地址范围为
00H`7FH;对片内高区
128B
寻址只能用寄存
器间接寻址,而对特殊功能寄存器建起必须使用直接寻址。
CPU通过指令
MOVX访问片外数据存储器。
2- 3 DPTR
的作用是什么?它由哪几个寄存器组成?
答:相对于地址指针,
DPTR被称为数据指针,但实际上
DPTR中存放的是一 个
16
位的地址,作为访问程序存储器和外部数据存储器的地址指针。当对
64KB
外部数据存储器空间寻址时, 作为间址寄存器使用, 而在访问程序存储器时, 作 为基址寄存器使用。DPTR是一个
16位的特殊功能寄存器, 由两个
8
位寄存器
DPH、
DPL组成,使用
SFR中的
82H和
83H单元。
2- 4
简述布尔处理存储器的空间分配。 答:在单片机中位处理又称布尔处理, 允许按位处理的存储器称为布尔处理 存储器。其地址空间由二部分构成:一部分是片内
RAM中字节地址为
20H~2FH
的
16
字节的
128
个位,这些位编址为
00H`7FH;另一部分在特殊寄存器中,其 地址码能被
8整除的
12
个特殊功能寄存器可以按位寻址,但其中
4个未定义, 一共有
92
位可按位寻址。这二部分结合起来形成一个具有
220位的位寻址空间。
2- 5 8052
单片机设置
4
组工作寄存器,如何选择确定和改变当前工作寄存 器?
答:8052片内数据存储器的
00H~1FH这32个单元分为
4级作为
4个工作寄 存器第
0组地址
00H`07H,第一组
08H~0FH,第二组
10H~17H,第
3组
18H~1FH。 每个工作寄存器都有
8
个单元,分别用
R0~R7表示。
4
组寄存器中每一组都可能 被选为
CPU的工作寄存器,这是通过程序状态字
PSW的
PSW.3(RS0)和PSW.4(RS1)
两位的状态来选择决定的。见下表:
当前使用的工作寄存器组
PSW.4(RS1) PSW.3(RS0)
0
0
1
1
0
1
0
1
R0`R7
0
组(
00H`07H)
1
组(
08H`0FH)
2
组(
10H`17H)
3
组(
18H`1FH)
通过程序改变
RS1和
RS0的状态,就可方便地更换工作寄存器组
2- 6
程序状态字寄存器
PSW的作用是什么?常用的状态标志位有哪些位? 作用分别是什么?
3 / 21
答: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。
2- 7 8052
单片机的
EA引脚有何功能?在使用
8032
时,
EA引脚就如何处 理?
答:8052单片机的
31脚为EA
,
EA为访问外部或内部程序存储器控制信号。 当
EA
引脚接高电平且
PC值小于
1FFFH时,
CPU访问内部程序存储器读取指令, 当
EA
引脚接低电平时,
CPU只访问外部等量齐观存储器读取指令。
在
8032
芯片中没有内部程序存储器, 因此,8032
芯片的
31
脚
EA
只能接地。
2- 8 8052
内部
RAM中低
128 B
单元划分为哪几个主要部分?各部分主要功 能是什么?
答:8052内部数据存储器
RAM中低
128B单元地址空间
00H~7FH被划分为三 个部分。第一部分地址为
00H~1FH这
32个单元分为
4
个工作寄存器组,分别用
R0~R7表示,通过工作寄存器指令进行访问。片内
RAM中的第二部分
20H~2FH单 元除可作为一般字节寻址单元使用外,这
16
个单元共
128位中的每一位又可单 独作为软件触发器使用,具有位寻址功能,其位地址范围为
00H`7FH;第三部分
地址
30H~7FH,这部分存储区域可作为
8
位数据缓冲区使用,一般地,用户4 / 21
把堆 栈就设置在这部分区域。
2- 9 8052
内部
RAM中高
128B单元与特殊功能寄存器区地址空间重叠,使用 中是如何区分这两个空间的?
答:对
8052片内高区(
80H`0FFH)128B只能采用寄存器间接寻址,而对特 殊功能寄存器
SFR建起必须采用直接寻址。
2- 10
什么叫堆栈?堆栈指针
SP的作用是什么?
答:堆栈是按照“先进后出,后进先出”的原则来存取数据的一个内部
RAM
区域,这个存储器区域的一端是固定的(栈底) ,另一端是活动的(栈顶) ,每个 存储单元是不能按字节任意访问的。
堆栈指针
SP始终指向栈顶单元,栈顶随着数据入栈和出栈上下浮动。
2- 12
什么是时钟周期、机器周期和指令周期? 答:(1)时钟周期(又称为振荡周期)是指振荡器产生一个振荡脉冲信号所 用的时间,是振荡频率的倒数,称为拍节。
(2)机器周期是指
CPU完成某一个规定操作所需的时间,
8051
单片机的一 个机器周期包含
6
个状态,并依次表示为
S1~S6,每个状态分为
2
个节拍。因 此一个机器周期包含
12
个时钟周期(振荡周期) ,依次表示为:
S1P1、
S1P2、
S2P1、⋯、
S6P1、S6P2。
(3)指令周期是指
CPU执行一条指令所需要的时间称为指令周期。
MCS-51
单片机指令周期根据指令的不同,可包含有
1或2或
4个机器周期。
第三章
MCS-51
单片机指令系统
3- 1
指出下列每一条指令的寻址方式及其完成的操作。
MOV 2FH,#40H。立即寻址,将
40H
移入片内
2FH单元
MOV A,2FH。直接寻址,将片内
2FH单元的数移入累加器
A
MOV R1,#2FH。立即寻址,将
2FH移入当前寄存器组的
R1
单元
MOVA ,@R1。寄存器间接寻址,将寄存器
R1中所存地址中的值移入累加器
A
MOV 2FH,A。隐含寻址,将累加器
A
中的值移入片内
2FH单元
3- 2
内部
RAM的
4FH单元,可用哪几种寻址方式?分别举例说明。
答:直接寻址:
MOV R,1 4FH
间接寻址:
MOV R,1 #4FH
寄存器间接寻址:
MOV A,@R1
3- 3
指出下列各条指令中,
45H代表什么?
MOV A,#45H。数值
5 / 21
MOV A,45H。源地址
MOV 45H,46H。目标地址
MOV 45H,#45H。目标地址和数值
MOV C,45H。源地址
3- 4
已知:(A)=7AH,(R0)=30H,(
30H)=0A5H,(PSW)=80H,请写出下列各 条指令的执行结果:
答:
PSW的各位为
11110000,
即
Cy=1,AC=1,F0=1,RS1=1,RS0=0,OV=0,P=0
(1)SUBBA,30H
结果:(A)=D4H,CY=1,AC=0,OV=1,P=0
(2)SUBB A,#30H
结果:(A)=49H,CY=0,AC=0,OV=0,P=1
(3)ADD A,R0
结果:(A)=AAH,CY=0,AC=0,OV=1,P=0
(4)ADD A,30H
结果:(A)=1FH,CY=1,AC=0,OV=0,P=1
(5)ADD A,#30H
结果:(A)=AAH,CY=0,AC=0,OV=1,P=0
(6)ADDC A,30H
结果:(A)=20H,CY=1,AC=1,OV=0,P=1
(7)SWAP A
结果:(A)=A7H,对标志位无影响
(8)XCHD A,@R0
结果:(A)=75H,(30H)=AAH,(R0)=AAH,P=1
(9)XCH A,30H
结果:(A)=0A5H,(30H)=7AH,P=0
(10)XCH A,R0
结果:(A)=30H,(R0)=7AH,P=0
(11)MOV A,@R0
结果:(A)=0A5H,P=0
(12)XCH A,@R0
结果:(A)=0A5H,(30H)=7AH,P=0
3- 5
试分析以下程序段的执行结果:
MOV SP,#3AH
MOV A,#20H
MOVB,#30H
PUSH ACC
PUSH B
POPACC
POP B
结果:(SP)=3AH,(A)=30H,(B)=20H,(3BH)=20H,(3CH)=30H
3- 6
指出下列指令的执行结果,并写出每条指令的机器码。
MOV 30H,#52H。(30H)=52H01110101(753052H)
MOV A,#70H。
(A)=70H01110100(7470H)
MOV A,30H。
(A)=52H11100101(E530H)
6 / 21
MOV R0,#30H
。(R0)=30H10101000(7830H)
。A=52H11100010(E6H)
3- 7
分析下列指令的执行结果,并写出每条指令的机器码。
MOV A,#70H。
(A)=70H01110100(74H)
MOV DPTR,#2030。H(DPTR)=2030H10010000(90H)
MOVX @DPTR。,A(2030H)=70H11110000(F0H)
MOV 30H,#40H。(30H)=40H01110101(75H)
MOV R0,#30H。
(R0)=30H01111000(78H)
MOV A,@R。0(A)=40H11100110(E6H)
3- 8
设
R0的内容为
32H,A
的内容为
48H,内部
RAM的
32H单元内容为
80H,
40
单元内容为
08H,指出在执行下列程序段后上述各单元内容的变化。
MOV A,@R0
MOV A,@R0
MOV @R0,40H
MOV 40H,A
MOV R0,#35H
结果:
(R0)=35H,(A)=80,(32H)=08H,(40H)=80H
3- 9
已知:
(A)=81H,(R0)=20H,(20H)=35H
,指出执行完下列程序段后
A
的 内容。
ANL A,#17H。(
A)
=00000001
ORL 20H,A。
(20H)=00110101
XRL A,@R。0 (A)=00110100
CPL A。
(A)=11001011
结果:
(A)=CBH
3- 10
用指令实现下述数据传送
:
(1)
内部
RAM20H单元送内部
RAM40H单元。
答:MOV 40H,20H
(2)
外部
RAM20H单元送
R0
寄存器。
答:MOV R1,#20H MOVX A,@R1 MOV R0,A
(3)
外部
RAM20H单元送内部
RAM20H单元
答:MOV R1,#20H MOVX A,@R1 MOV 20H,A
(4)
外部
RAM1000H单元送内部
RAM20H单元
答:MOV DPTR,#1000H MOVX A,@DPTR MOV 20H,A
(5)
外部
ROM1000H单元送内部
RAM20H单元。
答:MOV DPTR,#1000H MOV A,#00H MOVC A,@A+DPTR MOV 20H,A
7 / 21
(6)
外部
ROM1000H单元送外部
RAM20H单元。
8 / 21
答:MOV DPTR,#1000H MOV A,#00H MOVC A,@A+DPTR MOV R1,#20H MOVX @R1,A
3- 11
已知
16位二进制数的高
8位和低
8位分别存放在
20H和
21H单元, 请编写将其右移一们的程序。
CLR C
MOV A,20H
RRC A
MOV 20H,A
MOV A,21H
RRC A
MOV 21H,A
3-12
编程实现内部
RAM R0~R7的内容传递到
20H~27H单元。
3-13
试编程进行两个
16
位数的减法,
6F5DH-13B4H结,
果存入内部
RAM的
30H和
31H单元,
30H存放差的低
8
位。
CLR C
MOV A,#5DH
SUBB A,#B4H
MOV 30H,A
MOV A,#6FH
SUBB A,13H
MOV 31H,A
3-14
编写程序,若累加器
A
的内容分别满足下列条件时,程序则至
LABEL
存储单元,设
A
中存放的是无符号数。
①A>=10
②A>0
③(A)<=10
MOV R0,A
CJNE A,#10H,LABJNZ LABEL
LAB:JNC LABELMOV A,#10
..... CJNE A,R0,LAB
LABEL: LABEL:
LAB:JNC LABEL
LABEL:
3-15
已知(
SP)=25H,(PC)=2345H,(24H)=12H,(25H)=34H,(26H)=56H.
问此 时执行“
RET”指令后,
(SP)=?,(PC)=?
答:
(SP)=23H,(PC)=3412H
执行
RET时,
PCH←(SP),SP←SP-1,PCL←(SP),SP←SP-1
3-16
若(
sp)=25H,(PC)=2345H,
标号
LABEL所在的地址为
3456H,问执9 / 21
行 调用指令“
LCALL LABEL”后,堆栈指针和堆栈内容发生什么变化?(
PC)的值 等于什么?
答:最后堆栈指针
SP=27H。堆栈指针
SP=26H处
SP内容为
45H,指针
SP=27H
处内容为
23H。最后程序计数器指针
PC=3456H。
执行
LCALL后,PC←
PC+3,SP←SP+1,(SP)←PCL,SP←SP+1,(SP)←PCH,PC
←
addr16
。
3-17
试编写程序,查找在内部
RAM的
20H~50H单元中是否有
0AAH这一数 据。若有,则将
51H单元置
01H,
若未找到,则将
51H单元置
00H。
MOV 51H,#00H。先设没找到
MOV R0,#20H。起始地址
LOOP: MOV A,@R。0取出数字
CJNE A,#0AAH,NEX。T
不相等就跳转
INC 51H。相等将
51
单元置
1
SJMP EEE。找到转去结束
NEXT: INC R0。下一个地址
CJNE R0,#51H,LOO。P
地址没找完就继续
EEE:SJMP $。暂停
3-18
试编写程序,统计在外部
RAM 2000H~205FH单元中出现
00H
的次数, 并将统计结果丰收入内部
RAM 50H单元。
MOV R0,#00H
。RO设为计数器,初始为
0
MOV DPTR,#2000H
。置片外
RAM起始地址
MOV R1,#60H
。置传送数据个数
LOOP: MOVX A,@DP。TR外部
RAM单元内容送
A
JNZ NEXT。传送数据不为
0
跳转
INC R0。传送数据为
0,计数器加
1
NEXT: INC DPTR。下一个地址
DJNZ R1,LOO。P
地址没找完就继续
MOV 50H,R0
。统计结果存入
50H
单元
SJMP $。暂停
3-19
已知
R3和
R4中存有一个
16
位的二进制数,高位在
R3中代位在
R4
中。请编程将其求补,并存回原处。
答:首先假设
R3、R4
中是原码,根据原码求补的方法当最高位(
R3的
D7
位)为
0
时表示为正数,那么补码与原码相同,当最高位为
1
时,表明是负数,10 /
负数的补码是最高位不变,其余位取反加
1.
MOV A,R3
JB ACC.7,NEG
SJMP $
NEG: MOV A,R4
CPL A
CLR C
ADD A,#01H
3-20
编写一个程序,把MOV R4,A
MOV A,R3
CPL A
ADDC A,#00H
SETB ACC.7
MOV R3,A
SJMP $
RAM从
2000H开始存放的
10
个数传送到片内
片外
START:M OV R0,#30H
MOV R1,#10H MOV
DPTR,#2000H
LOOP: MOVX A,@DPTR
MOV @R0,A
3-21
试编程将内部
RAM的
30H
至
4FH单元的内容分别传RAM的
INC R0
INC DPTR
DJNZ R1,LOOP
SJMP $
送到外部
2040H~205FH单元。
START:M OV R0,#30H
MOV R1,#20H
MOV DPTR,#2040H
LOOP: MOV A,@R0
MOVX @DPTR,A
3-22
若外部
RAM的(2000H)=X, 内部
RAM的
20H单元,设
Z<=255。
START:M OV DPTR,#2000H
MOVX A,@DPTR
MOV B,#03H
MUL AB
INC DPTR
MOVX A,@DPTR
ADD A,A
ADD A,R0
MOV 20H,A
2001H)=Y,
编程实现
Z=3X+2Y,结果INC DPTR
INC R0
DJNZ R1,LOOP
SJMP $
存入
3-23
试对内部
RAM 20H单元的内容进行判断,若为正数,转向 负数,转向2200H;若为
0,转向
2300H。
START:M OV A,20H
JB ACC.7,NEG
。为负数
JNB ACC.7, POSI。为
0
11 /
LJMP #2100H
SJMP EEE
NEG: LJMP #2200H
SJMP EEE
POSI: LJMP #2300H
SJMP EEE
EEE: SJMP $
3-24
已知
30H、31H中存有一个
16
位二进制数,高位在前低位在后。试编 程将它们乘
2,再存回原单位中。
START:M OV A,31H
ADD A,31H
MOV 31H,A
MOV A,30H
3-25
已知从外部
RAM 2000H开始的单元中有
20
个带符号的补码数,试ADDC A,30H
MOV 30H,A
SJMP $
编 程把正数和
0
取出来存放到内部
RAM20H开始的存储单元中(负数为作处理) 。
START:M OV R0,#20H。需处理的数的个数
MOV DPTR,#2000。H需处理数的起始地址
MOV R1,#20H
。用于存储的目标地址
LOOP:MOVX A,@DPTR
JB ACC.7,NEG
MOV @R1,A
INC R1
NEG: INC DPTR
DJNZ R0,LOOP
SJMP $
。负数不需处理
第四章汇编语言程序设计
4- 1
什么叫伪指令?伪指令与指令有什么区别?
答:伪指令不属于单片机指令集中的指令, 在汇编时不产生目标代码, 不影 响程序的执行,仅指明在汇编时执行一些特定的操作。 如为程序指定一个存储区、 将一些数据、表格常数存放在指定的存储单元、对地址赋用户名等。
指令是计算机所能执行的一种基本操作的描述,是计算机软件的基本单12 /
元。
51
单片机单片机的指令有二种表达方式:机器码指令和汇编语言指令。
4- 2
循环程序由哪几部分组成?
13 /
答:由初始化部分、循环处理部分、循环控制部分、循环结束部分这四部分 组成。
4- 3
什么是子程序?对于子程序设计有什么要求? 答:一段具有某一特定功能, 能被其它程序所调用, 调用结束后能自动返回 到调用处的程序块就称为子程序。
对子程序设计的要求:
4- 4
试对下列程序进行人工汇并说明此程序的功能。
编, 地址指令码
ORG 1000H。
ACDL: MOV R0,#25H。
1000H
MOV R1,#2BH。1002H
MOV R2,#06H。1004H
CLR C。
1006H C3
CLR A。
1007H E4
LOOP:MOV A,@。R01008H
ADDC A,@R。11009H
DEC R0。100AH 18
DEC R1。100BH 19
DJNZ R2,LOO。P 100CH
SJMP $。100EH
END。
80FE
DAFA
E6
37
7825
792b
7A
06
1008H-100EH=-06H,其补码为
11111010)2→0FAH
功能:将
25H单及前
5个数与
2BH单元及前
5个数分
6组相加,结果丢弃。
4-5
从内部
RAM的
20H单元开始,有
15
个数据。试编一程序,把其中的正 数、负数分别送到
41H
和
61H开始的存储单元,并分别将MOV R0,#41H
。存放正数的起始地址
MOV R1,#61H
。存放负数的起始地址
MOV SP,#2E。H
指明栈顶地址
MOV R7,#15
LOOP:POP AC。C出栈放入
A
。需判断数的个数
14 /
CJNE A,#00H,LOOP1
。非负非零转正数处理
SJMP LOOP。 零不处理,取下一个数
LOOP:1 MOV @R0。,A正数保存
INC R0。正数存放地址加
1
INC R3
。正数个数加
1
SJMP LOOP。2
未结束就继续
NEG:MOV @R1。,A将负数送负数保存地址
INC R1
。负数地址加
1
INC R4。负数个数加
1
LOOP2:DJNZ R7,LOO。P未结束就继续
MOV 40H,R3。正数个数送
40H单元
MOV 60H,R4。负数个数送
60H单元
SJMP $
END
4- 6
设内部
RAM的30H和
31H单元中有二个带符号数求出其中的大数存放在
32H单元中。
MOV A,30H
XRL A,31H
JB ACC.7,LOOP
MOV A,30H
SUBB A,31H
JC LOOP1
MOV 32H,30H
SJMP $
LOOP1:M OV 32H,31H
SJMP $
LOOP:MOV A,30H
JB ACC.7,LOOP1
MOV 32H,A
SJMP $
4- 7
试编制实现
ASCII
码。在
8032
单片机内
RAM的
40H
转十
单元中存放一个代码。若此代码为十进制数的
ASCII
码,则将其相应的十进制 数送片内
RAM的
50H单元,否则将此单元置成
0FFH。
MOV A,40H
CLR C
SUBB A,#30H。数字比其
ASCII
码值小
30H
JC LOOP
。存的
ASCII
值小于
0
的
ASCII
码值跳转
MOV R0,A
MOV A,#09H。减
30H
后差大于
0,是否不
SUBB A,R0。大于
9?
15 /
JC LOOP。差大于
9,跳转
16 /
MOV 50H,R0
。将数字存入
50H单元
SJMP $
LOOP:MOV 50H,#0FF。H不是数字,存入
0FFH SJMP $
END
4- 8
试编程将存放在
8032
单片机内部
RAM中首址为
20H、长度为
50H的数 据快传送到片外
RAM以
20H为首址的连续单元中。
MOV R0,#20H INC R0
MOV R1,#20H INC R1
MOV R7,#50H
LOOP: MOV A,@R0
MOVX @R1,A
4- 9
设一个字符串存放在
8032单片机DJNZ R7,LOOP
SJMP $
内部
RAM以
20H为首址的连续单元中, 字符串以回车结束。要求统计该字符串中字符
C('C'=43H)的个数
,
并将其存入
外部
RAM的
40H单元。试编写实现上述要求的程序。
INC R2
MOV R0,#20H
MOV R2,#00H
LOOP:MOV A,@R0
XRL A,#0DH
。判断LOOP2:I NC R0
SJMP LOOP
EXIT: MOV DPTR,#0040H
MOV A,R2
MOVX @DPTR,A
SJMP $
END
4- 10
设有一长度为
20H
是否是回车符
JZ EXIT
MOV A,@R0
XRL A,#43H
JNZ LOOP2
的字符串,它存放在片外
RAM1000H为首地址的连
续单元中。试编制将其中数字与字母分开并将它们送到片内
RAM以
30H
和
为首地址的连续单元中的程序。
MOV DPTR,#1000H
MOV R7,#20H
MOV R0,#30H
MOV R1,#50H
LOOP: MOVX A,@DPTR
CJNEA,#30H,LOOP1 SJMP
LOOP1:J NC LOOP2 SJMP
ISCHAR
LOOP2:C JNEA,#3AH,LOOP3
LOOP3:JC ISNUM SJMP
ISCHAR
ISCHAR:MOV @R1,A
INC R1
17 /
50H
18 /
SJMP NEXT
ISNUM:CLR C
SUBB A,#30H
SJMP NEXT
NEXT: INC DPTR
DJNZ R7,LOOP
SJMP $
END
MOV @R0,A
INC R0
4- 11
试编程将片内
RAM区
DATA1单元开始的
20H个单字节依次与
DATA2单 元为起始地址的
20H个单字节进行交换。
MAIN: MOV R7,#20H
DATA1 EQU 20H
DATA2 EQU 40H
MOV R0,#DATA1
MOV R1,#DATA2
LOOP: MOV A,@R0
XCH A,@R1
4-13
设片内
RAM的
20H~4FH单元中有若个无符号数,试编程求出END
MOV @R0,A
INC R0
INC R1
DJNZ R7,LOOP
SJMP $
其中的最 大值及所在单元地址,将最大值存入片内
RAM的
50H
单元,最大值所在单元地
址存入片RAM的
51H单元。
MOV R0,#20H
MOV A,R0
MOV R2,A
MOV A,@R0
MOV R1,A
LOOP1:MOV A,R1
DJNZ R7,LOOP
MOV 50H,R1
MOV 51H,R2
SJMP $
END
MOV R7,#20H
MOV A,R0
MOV R2,A
MOV A,@R0
MOV R1,A
LOOP: INC R0
CLRC
SUBB A,@R0
JNC LOOP1
4-14
设片外
RAM从
1000H单元开始存放
100
个无符号
8
位二进制数。试编 程将它们从大到小依次入片内
RAM从
10H开始的单元MOV R7,#100
MOV DPTR,#1000H
MOV R0,#10H
LOOP: MOVX A,@DPTR
INC DPTR
INC R0
DJNZ R7,LOOP
MOV R7,#99
MOV R6,#99
MOV @R0,A
19 /
NEXT:MOV R0,#10H
MOV A,@R0
MOV R1,A
LOOP2:I NC R0
MOV A,@R0
CLR C
SUBB A,R1
JNZ LOOP3
SJMP LOOP4
LOOP3:J C LOOP4
MOV A,@R0
DEC R0
MOV A,R1
INC R0
MOV @R0,A
LOOP4:M OV A,@R0
MOV R1,A
DJNZ R7,LOOP2
DEC R6
MOV A,R6
MOV R7,A
INC R6
DJNZ R6,NEXT
SJMP $
MOV @R0,A END
4-15
设有
2
个
4B
的
BCDX=24350809,Y=12450379。X
从片内
RAM数: 的
的
35H单元开始存放,求两数的25H单元开始存放,
Y
从片内
RAM和。设数据在
内存中按照低字节在前,高字节在后的顺序存放。
MOV 25H,#24H
MOV 26H,#35H
MOV 27H,#08H
MOV 28H,#09H
MOV 35H,#12H
MOV 36H,#45H
MOV 37H,#03H
MOV 38H,#79H
MOV R7,#04H
MOV R0,#25H
CLR C
LOOP: MOV A,@R0
ADDC A,@R1
DA A
MOV @R0,A
INC R0
INC R1
DJNZ R7,LOOP
SJMP $
END
MOV R1,#35H
一能延时
20ms的子程序
试编
答:一个机器周期
T=12/6*10
6=2μs,延时
20ms需要
20000/2=10000
个机器
周期。
4-16
设晶振频率为
6MHz,拟用以下程序:
START:M OV R6,#data1
LOOP1:M OV R7,#data2
NOP
。1
NOP
工作需要机器周期数
。1
。1
。1
20 /
LOOP: NOP
。1
。1
NOP
NOP
DJNZ R6,LOOP
RET
。1
DJNZ R7,LOOP
。2
。2
。2
延时周期数为
1+(
5*data2+5
)*data1+2,
选择最合适的
data1
和
data2
Data1=200,data2=99
,延时机器周期数为
10003
个,延时
20.006ms
4- 17
利用查表技术将累加器
A
中的一位
BCD码转换成相应的十进制数的七 段码,结果仍放在
A
中(设显示管
0~9
的七段码分别是
40H,79H,24H,30H,
19H,12H,02H,78H,00H,1BH)。
SUB1: INC A
MOVC A,@A+PC
RET
DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,1BH
4-18
试编一采用查表法求
1~20
的二次方数的子程序。要求:
X在累加器
A
中,
1≤
X≤
20,
二次方高位存放在
R6中,低位存放在
R7中。
SUB:MOV DPTR,#0100H
MOV R0,A
ADD A,R0
MOV R0,A
MOVC A,@A+DPTR
MOV R7,A
INC DPTR
MOV A,R0
MOVC A,@A+DPTR
MOV R6,A
RET
ORG 102H
DB 01H,00H,04H,00H,09H,00H,10H,00H,19H,00H
DB 24H,00H,31H,00H,40H,00H,51H,00H,64H,00H
DB 79H,00H,90H,00H,0A9H,00H,0C4H,00H,0E1H,00H
DB 00H,01H,21H,01H,44H,01H,69H,01H,90H,01H
第五章 MCS-51 单片机中断系统
5- 1 MCS-51
单片机的中断系统由哪些功能部件组成?分别有什么作用?
答:51
单片机的中断系统由与中断有关的特殊功能寄存器
(中断允许控制21 /
寄 存器
IE
、中断优先等控制寄存器
IP
、定时器
/
计数器控制寄存器
TCON、T2CON、
串行口控制寄存器
SCON和) 6
个中断源(
2
个外部中断源
INT 0
[P3.2]
、
INT 1[P3.3],3
个定时器
/
计数器中断源
T0[P3.4]
、T1[P3.5]
、T2[P1.0]
),1
个 串行接口中断源(
RXD[p3.0]
接收数据中断、
TXDp[P3.1]发送数据中断)组成。
中断允许控制寄存器
IE
由七个控制位构成,其中
D7
位
EA是所有中断的总 开关,若
EA=1,CPU中断允许,
EA=0时,CPU屏蔽一切中断请求。 其余
6位
D5~D0
分别控制
6个中断源,置1为允许申请中断, 清0为禁止申请中断。其字节地址 是
A8H,位地址是
A8H~ADH和
AFH,每位都可由软件来置
1
或清
0。
中断优先等控制寄存器
IP
用于设置每个中断的优先级,该寄存器由
6
个控 制位构成(
D5~D1)分别控制每个中断源的优先级,置
1
为高优先级,置
0
为低 优先级。其位地址为
B8H~BD,H每位都可由软件来置
1
或清
0。
定时器/
计数器控制寄存器
TCON字节地址
88H,其位地址
88H~8FH,除
D6
和D4位用于控制定时器
/计数器
0、1启停外,其余
6位分二组分别控制定时器
/
计数器
0、1的中断信号方式(
IT0/IT1
),外部中断请求标志位(
IE0/IE1
)、溢 出标志位(
TF0/TF1)、T2CON字节地址为
C8H,可按位寻址,但只有
2
位(D7和
D6位)用作中断控制,当
T2EX(P1.1
脚)的负跳变有效时
T2的硬件置
D6位
EXF2
(T2CON.6)=1,tm CPU申请中断。当
T2计数溢出时由硬件置
D7(TF2,T2CON.7)
=1,向
CPU申请中断。
串行口控制寄存器
SCON字节地址为
98H,其位地址
98H~ 9FH。与中断有关 的只有
D0位和
D1位。串行口发送了一帧信息,便由硬件置
TI=1
,向
CPU申请 中断。串行口接收一邓一帧信息,便由硬件置
RI=1,向
CPU申请中断。
5- 2 MCS-51
系列单片机能提供几个中断源?
答:
MCS-51系列单片机能提供
6
个中断源,。
5- 3 MCS-51
单片机的中断系统中有几个优先级?如何设定?
MCS-51单片机有
2
个中断优先级。各个中断源的优先级是由特殊功能寄存 器
IP
来确定,
IP
中和各个中断源对应位为
1
时,此中断源为高优先级,否则为 低优先级。在同一优先级中,各个中断源的优先顺序是由自然优先级来确定的。
5- 4 CPU
响应中断有哪条件?在什么情况下中断响应会受阻? 答:CPU响应中断的基本条件有以下三个:①有中断源提出中断请求。②中 断总允许位
EA=1,即
CPU开放中断。③申请中断的中断源的中断允许位(
ET2、
ES、ET1、EX1、
ET0、
EX0)为
1,即没有被屏蔽。
在中断源提出中断申请后, 有二种情况可以使中断受阻: ①中断允许寄存器
IE
中对应于有中断请求的控制位为
0,屏蔽了中断请求, 即
CPU没无法收到中断 请求。②中断允许寄存器
IE
的
D7位(
EA位)为
0,即
CPU没有开放中断响应。
22 /
CPU正在处理同等级或高等级中断时,
CPU将在处理完该中断并返回执行一 条指令后才响应新中断请求。
现行的机器周期不是所执行指令的最后一个机器周期。
正在执行的指令是
RETI
或访问
IE、IP
指令。
5- 5
简述
MCS-51系列单片机的中断响应过程。
23 /
答:
MCS-51系列单片机的中断响应过程是按照以下顺序执行的:开中断→ 中断请求→中断判断→中断响应→中断返回。
5- 6 MCS-51
单片机中断响应时间是否固定?为什么?
答:
MCS-51单片机中断响应时间不固定,因为当中断源向
CPU提出中断请 求时,CPU正在执行的指令的指令周期是不一样的,一般情况下中断响应时间在
3~8
个机器周期之间。当然如果中断到来时是在处理同级或高级中断服务程序 中,则响应时间就无法估计了。
5- 7 MCS-51
中若要扩充
8
个中断源,可采用哪些方法?如何确定优先级? 答:一般可采取中断加查询方式, 软件先查询到的为高优先级, 最后查询到 的为低优先级。
5- 8 8031芯片的
INT0、INT1
引脚分别输入压力超限、温度超限中断请求信 号,定时器
/计数器
0
作定时检测的实时时钟,用户规定的中断优先权排队次序 为:压力超限→温度超限→定时检测。要求确定
IE
、IP
的内容,以实现上述要 求。
答:
IE
设
87H,IP
设
05H。
第六章 MCS-51 单片机定时器 / 计数器
6- 1 MCS-51单片机内部设有几个定时器
/
计数器?它们是由哪些专用寄存器 组成的?
设有
3
个定时器
/
计数器
T0、
T1、T2。
24 /
它们由特殊功能寄存器工作方式寄存器
TMO(D字节地址
89H,不能按位寻址, 用来控制
T0和
T1的工作方式),TCON控制寄存器(字节地址
88H,位地址
88H~8FH,
用高
4位控制定时器
/计数器
0、1的启、停,和作溢出标志位) ,定时器/计数器
2
的控制寄存器
T2CO(N其字节址
C8H,位地址
C8H~CF)H组成,各定时器
/
计数 器还有
1
个
16
位工作寄存器(
TL0[8AH]
、TH0[8CH]、
TL1[8BH]、TH1[8DH]、
TL2[CCH]、TH2[CDH],T2还有二字节特殊功能寄存器
RLDL[CAH和] RLDH[CBH)]。
6- 2 MCS-51
单片机的定时器
/
计数器有哪几种工作方式?各有什么特点?
答:
MCS-51定时器/计数器有
0,1,2,3四种工作模式。模式
0为
13位
1
定时器/计数器,模式
1为
16位
1定时器/计数器,模式
2为自动赋初值的
8位 定时器/计数器,模式
3可以增加一个
8位定时器(
T1没有模式
3)。
6- 3 MCS-51
定时器作定时和计数时其计数脉冲分别由谁提供? 答:MCS-51定时器作定时器时,输入的记数脉冲是由晶体振荡器的输出经
12
分频后得到的,所以定时器可看作是对单片机机器周期的计数器。
8051定时 器作计数器时,则对外部事件进行计数。
6- 4 8051
定时器的门控信号
GATE设置为
1
时,定时器如何启动?
答:
8051定时器的门控信号
GATE为
1时,通常先设置
TR0或
TR1为1,将
T0或
T1的启动控制权交由
INT0
或INT1
。当INT0
(或
INT1
)引脚为高电平时, 相应的
T0或
T1才能选通工作
6- 5
定时器
/
计数器用作定时时,其定时时间与哪些因素有关?作计数器 时,对外界计数脉冲频率有何限制?
答:作定时器时,其定时时间与晶振频率、 定时计数器位数、 定时初值有关。 作计数器时,要求外界脉冲频率小于晶振频率除
24。
6- 6
当
T0设为工作方式
3
时,由于
TR1位已被
TH0占用,如何控制定时器
T1的启动和关闭?
答:先设置
T1的初始值和工作方式
0~2,由于将
T1设置为工作方式
3
时
T1
会停止工作,因此可以利用
M1和
M2来控制
T1的启动和关闭。 通常在
T0工作在 方式
3
的时候,将
T1设置为方式
2,8
位自动装初值工作方式。
6- 7
已知
8051
单片机的
fosc=6MHz,请利用
T0
和
P1.2
输出长形波。其长 形高电平宽
50us,低电平宽
300us。
解:(1)
定时时间设为
50us,低电平时间相当于持续
6
个定时周期。可选择 于方式
2,8
位自动重装初值方式。
X=256-6×
50/12=231,即
E7H
(2)
设置
TMOD参数:
T1的四位全“
0”,低四位为“
0010”,TMOD=02H
(3)
中断
IE
:EA=1,ET0=1.其余为
0,
IE=82H
(4)TCON用于控制启停的
TR0位在程序中用位设置。
(5)
编写源程序如下:
MOV TMOD,#02H
ORG 0000H
AJMP MAIN
MOV IE,#82H
SETB TR0
ORG 000BH
25 /
AJMP T0INT
ORG 0030H
MAIN:MOV TH0,#0E7H
MOV TL0,#0E7H
MOV R7,#06H
SETB P1.2
SETB F0
SJMP $
T0INT:JBC F0,LOOP
DJNZ R7,LOOP2
26 /
SETB P1.2 LOOP:CLR P1.2
SETB F0 LOOP2:R ETI
MOV R7,#06H
END
SJMP LOOP2
6- 8
已知
8051单片机的
fosc=12MHz,用
T1
定时,试编程由
P1.2
和
P1.3
分 别输出周期为
2ms和
500us
的方波
解:
2ms和
500us
的方波,以最小值
500us
为基本单位,将计时长度设为
250us,可使用
8
位加法计数器,即
T1的工作方式为方式
2。2ms方波为
4
个计 数溢出长度翻转一次。采用中断方式处理溢出。
(1)定时初值确定:
X=256-12×106×250×10-6/12=256-250=6
(2)确定
TMOD的参数:
T0设为方式
0定时器。
TMOD=0010 0000=20H
(3)编写源程序:
ORG 0000H SETBEA
AJMP MAIN
SETB TR1
ORG 001BH
SJMP $
AJMP T1INT
T1INT:CPL P1.3ORG 0030H
MAIN:MOV R7,#04
MOV TH1,#06
MOV TL1,#06
MOVTMOD,#20H
SETB ET1
DJNZ R7,LOOP
CPL P1.2
MOV R7,#04
LOOP:RETI
END
27 /
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689551099a265493.html
评论列表(0条)