单片机原理及应用课后习题参考标准答案1-6章

单片机原理及应用课后习题参考标准答案1-6章

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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信