搜档网
当前位置:搜档网 › 单片微型计算机原理与应用课后答案—华中科技大学

单片微型计算机原理与应用课后答案—华中科技大学

单片微型计算机原理与应用课后答案—华中科技大学
单片微型计算机原理与应用课后答案—华中科技大学

习题2

2.1 MCS-51单片机部包含哪些主要逻辑功能部件?

答:微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、特殊功能寄存器(SFR)、并行I/O口、串行通信口、定时器/计数器及中断系统。

2.2 说明程序计数器PC和堆栈指针SP的作用。复位后PC和SP各为何值?

答:程序计数器PC中存放将要执行的指令地址,PC有自动加1功能,以实现程序的顺序执行。它是SFR中唯一隐含地址的,因此,用户无法对它进行读写。但在执行转移、调用、返回等指令时能自动改变其容,以实现改变程序的执行顺序。

程序计数器PC中容的变化决定程序的流程,在执行程序的工作过程中,由PC输出将要执行的指令的程序存储器地址,CPU读取该地址单元中存储的指令并进行指令译码等操作,PC 则自动指向下一条将要执行的指令的程序存储器地址。

SP是一个8位的SFR,它用来指示堆栈顶部在部RAM中的位置。系统复位后SP为07H,若不对SP设置初值,则堆栈在08H开始的区域,为了不占用工作寄存器R0~R7的地址,一般在编程时应设置SP的初值(最好在30H~7FH区域)。

2.3 程序状态字寄存器PSW的作用是什么?其中状态标志有哪几位?它们的含义是什么?答:PSW是保存数据操作的结果标志,其中状态标志有CY(PSW.7):进位标志,AC(PSW.6):辅助进位标志,又称半进位标志,F0、F1(PSW.5、PSW.1):用户标志;OV(PSW.2):溢出标志;P(PSW.0):奇偶标志。

2.4 什么是堆栈? 堆栈有何作用? 为什么要对堆栈指针SP重新赋值? SP的初值应如何设定?

答:堆栈是一种数据结构,所谓堆栈就是只允许在其一端进行数据写入和数据读出的线性表。其主要作用有两个:保护断点和保护现场。

堆栈区的设置原则上可以在部RAM的任意区域,但由于MCS-51单片机部RAM的00H~1FH地址单元已被工作寄存器R0~R7占用,20H~2FH为位寻址区,故堆栈一般设在30H~7FH(对于8032系列芯片可为30H~0FFH)的区域。单片机复位后,SP的容为07H,堆栈事实上由08H 单元开始,考虑到08H~1FH单元分别属于1~3组的工作寄存器区,则最好把SP值改置为1FH 或更大的值。

2.5 开机复位后,CPU使用的是哪组工作寄存器? 它们的地址如何? CPU如何指定和改变当前工作寄存器组?

答:开机复位后使用的是0组工作寄存器,它们的地址是00H~07H,对程序状态字PSW中的RS1和RS0两位进行编程设置,可指定和改变当前工作寄存器组。RS1、RS0=00H时,当前工作寄存器被指定为0组;RS1、RS0=01H时,当前工作寄存器被指定为1组;RS1、RS0=10H 时,当前工作寄存器被指定为2组;RS1、RS0=11H时,当前工作寄存器被指定为3组。

2.6 MCS-51的时钟周期、机器周期、指令周期是如何定义的?当振荡频率为12MHz时,一个机器周期为多少微秒?

答:① 时钟周期也称为振荡周期,定义为时钟脉冲的倒数,是计算机中最基本的、最小的时间单位。

② CPU取出一条指令至该指令执行完所需的时间称为指令周期,因不同的指令执行所需的时间可能不同,故不同的指令可能有不同的指令周期。

③ 机器周期是用来衡量指令或程序执行速度的最小单位。它的确定原则是以最小指令周期为基准的,即一个最小指令周期为一个机器周期。

④当振荡频率为12MHz时,一个机器周期1微秒

2.7 MCS-51单片机的控制信号、、有哪些功能?

答:是访问程序存储器控制信号。当端接低电平时,则不管芯片部是否有程序存储器,CPU 只访问外部程序存储器。对8031来说,因其部无程序存储器,所以该引脚必须接地。当端接高电平时,CPU访问部程序存储器,但当PC(程序计数器)值超过某一值时,将自动转向片外程序存储器1000H地址继续执行程序。

是地址锁存允许信号。当CPU访问外部存储器或I/O接口时,ALE输出脉冲的下降沿用于锁存16位地址的低8位。在不访问外部存储器或I/O接口时,ALE端有周期性正脉冲输出,其频率为振荡频率的1/6。但是,每当访问外部数据存储器或I/O接口时,在第二个机器周期中ALE只出现一次,即丢失一个ALE脉冲。

片外程序存储器读选通信号。在CPU从外部程序存储器读取指令(或常数)期间,每个机器周期两次有效,但在访问外部数据存储器或I/O接口时,信号将不出现。端可以驱动8个TTL负载。

2.8 MCS-51的片外程序存储器和片外数据存储器共处同一地址空间为什么不会发生总线冲突?

答:MCS-51的片外程序存储器和片外数据存储器共处同一地址空间,地址围都是0000H~FFFFH(64 KB),但不会发生总线冲突。因片外程序存储器和片外数据存储器的读写控制信号不同,片外程序存储器的读信号是,而片外数据存储器的读信号为、写信号为,访问片外程序存储器和片外数据存储器的指令也不同,所以它们不会发生总线冲突。

2.9 简述MCS-51部数据存储器的存储空间分配。

答:部数据存储器分为3个区域:

工作寄存器区(00H~1FH);

位寻址区(20H~2FH);

堆栈和数据缓冲器区(30H~7FH或30H~0FFH)。

2.10 位地址和字节地址有何区别? 位地址20H具体在存中什么位置?

答:MCS-51的位存储器由以部RAM中20H~2FH单元和特殊功能寄存器中地址为8的倍数的特殊功能寄存器两部分组成。其中每个单元的每一位都有一个位地址映像,它们既可以像普通部RAM单元一样按字节存取,也可以对单元中的任何一位单独存取。

字节地址是部RAM中和特殊功能寄存器中每个存储单元的地址。

位地址20H是部RAM24H中的D0位。

2.11 8051的4个I/O口作用是什么? 8051的片外三总线是如何分配的?

答:MCS-51单片机有4个8位并行I/O端口,分别记作P0、P1、P2、P3口。

① 在访问片外扩展存储器时, P0口分时传送低8位地址和数据, P2口传送高8位地址。P1口通常作为通用I/O口供用户使用。P3口具有第二功能,为系统提供一些控制信号。

在无片外扩展存储器的系统中,这4个口均可作为通用I/O端口使用。在作为通用I/O端口使用时,这4个口都是准双向口。

② 在访问片外扩展存储器时,片外三总线的构成:

P0口传送低8位地址经锁存器所存构成低8位地址总线,高8位地址总线由P2口构成。

P0口作为单片机系统的低8位地址/数据线分时复用,在低8位地址锁存后,P0口作为双向数据总线。

由P3口的第二功能输出数据存储器的读、写控制信号与片外程序存储器读选通信号,访问程序存储器控制信号,地址锁存允许信号构成控制总线。

习题3

3.1 汇编语句是由4个部分(字段)构成的,简述各部分的含义。

答:汇编语句的4个部分为:[标号:] [操作码] [操作数];[注释]

标号是用户设定的一个符号,表示存放指令或数据的存储单元地址。标号由以字母开始的1―8个字母或数字串组成,以冒号结尾。不能用指令助记符、伪指令或寄存器名来作标号。标号是任选的,并不是每条指令或数据存储单元都要标号,只在需要时才设标号。如转移指令所要访问的存储单元前面一般要设置标号。一旦使用了某标号定义一个地址单元,在程序的其它地方就不能随意修改这个定义,也不能重复定义。

操作码是指令或伪指令的助记符,用来表示指令的性质或功能。对于一条汇编语言指令,这个字段是必不可少的。

操作数给出参加运算(或其它操作)的数据或数据的地址。操作数可以表示为工作寄存器名、特殊功能寄存器名、标号名、常数、表达式等。这一字段可能有,也可能没有。若有两个或三个操作数,它们之间应以逗号分开。

注释字段不是汇编语言的功能部分,只是增加程序的可读性。言简意赅的注释是汇编语言程序编写中的重要组成部分。

3.2举例说明MCS-51单片机的7种寻址方式,各寻址方式的寻址空间。

立即寻址立即寻址方式的寻址空间为程序存储器。

例如: MOV A,#3FH ;3FH→A

直接寻址直接寻址方式中操作数存储的空间有三种:

部数据存储器的低128个字节单元(00H~7FH)

例如: MOV A,30H ;(30H)→A

指令功能是把部RAM 30H单元中的容送入累加器A。

⑵ 位地址空间

例如: MOV C,00H ;直接位00H容→进位位

⑶ 特殊功能寄存器

例如: MOV IE,#85H ;立即数85H→中断允许寄存器IE。

寄存器寻址寄存器寻址方式的寻址空间为工作寄存器和特殊功能寄存器等。

例如: MOV A,R6 ;(R6)→A

寄存器间接寻址寄存器间接寻址空间为部RAM 128字节,外部RAM

例如: MOV A,R0 ;((R0))→A

变址寻址变址寻址空间为程序存储器。

例如: MOVC A,A+DPTR ;((DPTR)+(A))→A

MOVC A,A+PC ;((PC)+(A))→A

相对寻址相对寻址空间为程序存储器。

当前PC值是指相对转移指令所在地址(源地址)加转移指令字节数。

即:当前PC值 = 源地址 + 转移指令字节数

偏移量rel 是有符号的单字节数,以补码表示,相对值在-128~+127围,负数表示从当前地址向上转移,正数表示从当前地址向下转移。所以转移的目的地址为:

目的地址 = 当前PC值 + rel = 源地址 + 转移指令字节数 + rel

例如: JNC 2AH , JZ F8H

位寻址位寻址空间为部RAM 20H~2FH的128位和SFR中的83位。

例如: MOV C,30H, MOV P1.0, C

3.3指出下列指令的寻址方式和操作功能:

INC 40H ;直接寻址(40H)+1→40H

INC A ;寄存器寻址(A)+1→A

INC R2 ;寄存器间接寻址((R2))+1→(R2)

MOVC A, A+DPTR ;基址加变址寄存器寻址((A)+(DPTR)) →A

MOV A, #6EH ;立即寻址6EH→A

SETB P1.0 ;位寻址 P1.0置1

3.4 设部RAM中3AH单元的容为50H,写出当执行下列程序段后寄存器A、R0和部RAM 50H,51H单元的容为何值?

MOV A,3AH ;(A)=50H

MOV R0,A ;(R0)=50H

MOV A,#00H ;(A)=00H

MOV R0,A ;(50H)=00H

MOV A,#25H ;(A)=25H

MOV 51H,A ;(51H)=25H

答:(A)=25H, (3AH)=50H, (R0)=50H, (50H)=00H, (51H)=25H

3.5 设堆栈指针SP中的容为60H,部RAM 30H和31H单元的容分别为27H和1AH,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的容将有何变化?

PUSH 30H ;(SP)+1→SP, (30H) →61H

PUSH 31H ;(SP)+1→SP, (31H) →62H

POP DPL ; (62) →DPL, (SP)-1→SP

POP DPH ; (61) →DPH, (SP)-1→SP

MOV 30H,#00H ; 00H→30H

MOV 31H,#0FFH ; FFH→31H

答:(61H)=27H, (62H)=1AH, (30H)=00H, (31H)=FFH, (DPTR)=271AH, (SP)=60H

3.6 设(A)=30H,(R1)=23H,(30H)=05H。执行下列两条指令后,累加器A和R1以及部RAM 30H单元的容各为何值?

XCH A,R1

XCHD A,R1

答:(A)=25H, (R1)=30H, (30H)=03H

3.7 设(A)=01010101B,(R5)=10101010B,分别写出执行下列指令后的结果

ANL A, R5 ; (A)=0000 0000B, (R5)=10101010B

ORL A, R5 ; (A)= 10101010B, (R5)=10101010B

XRL A, R5 ; (A)=00000000B

3.8 设指令SJMP rel=7FH,并假设该指令存放在2113H和2114H单元中。当该条指令执行后,程序将跳转到何地址?

答:程序将跳转到2194H地址

3.9 简述转移指令AJMP addr11,SJMP rel, LJMP addr16及JMP A+DPTR的应用场合。答:AJMP addr11这是在当前PC的2K字节围的无条件转移指令,把程序的执行转移到指定的地址。

SJMP rel 这是相对跳转指令,其中rel为相对偏移量。转向的目标地址是在当前PC的前128字节到后127字节之间。

LJMP addR16 执行这条指令时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向指定地址。转移的目标地址可以在64KB程序存储器地址空间的任何地方,不影响任何标志。

JMP A+DPTR 把累加器A中8位无符号数与数据指针DPTR中的16位数相加,将结果作为转移的目标地址送入PC,不改变累加器A和数据指针DPTR容,也不影响标志。本指令以DPTR 容作为基址,A的容作为变址。只要把DPTR的值固定,而给A赋予不同的值,即可实现程序的多分支转移。

3.10 查指令表,写出下列两条指令的机器码,并比较一下机器码中操作数排列次序的特点。MOV 78H,80H ;85 80 78

MOV 78H,#80H ;75 78 80

答:直接寻址单元传送到直接寻址单元的机器码是第二个操作数在前,而立即数传送到直接地址单元是第一个操作数在前,次序正好相反。

3.11 试编写程序,查找在部RAM 30H~50H单元中1AH这一数据。若找到1AH则将51H单元置为01H;没找到则将51H单元置为00H。

答:参考程序如下

MOV R1, #2FH

LOOP1: INC R1

CJNE R1, #1AH, LOOP2

SJMP LOOP3

LOOP2: CJNE R1, #51, LOOP1

MOV 51H, #00H

SJMP END

LOOP3: MOV 51H, #01H

END: RET

3.12 若SP=60H,子程序标号MULT所在的地址为3A40H。执行LCALL MULT指令后,堆栈指针SP和堆栈容发生了什么变化?

答:(SP)=62H, (61H)=40H, (62H)=3AH

3.13 假设外部存储器215AH单元的容为3DH,执行下列指令后,累加器A中的容为何值?MOV P2,#21H

MOV R0,#5AH

MOVX A,R0

答:(A) = 3DH

习题4

4.1 编程将数据存储器中以2A00H为首地址的100个连续单元清零。

CLR A

MOV R0, #64H

MOV DPTR, #2A00H

LOOP: MOVX DPTR,A

INC DPTR

DJNZ R0, LOOP

END

4.2 编程将片50H~70H单元中的容传送到以5C00H为起始地址的存储区中。

MOV DPTR, #5C00H

MOV R0, #50H

LOOP: MOV A,R0

MOVX DPTR,A

INC R0

INC DPTR

CJNE R0,#70H,LOOP

END

4.3 片外RAM区从1000H单元开始存有100个单字节无符号数,找出最大值并存入1100H 单元中,试编写程序。

MOV DPTR, #1000H ;置片外RAM区首地址

MOV R0,#00H ;清 R0

MOV R1,64H ;置计数初值100

LOOP: MOVX A, DPTR ;取片外RAM区的某个数送A

CJNZ A,R0,NT1 ;与R0中的数比较

NT1: JC NT2 ;(A)<(R0)跳转到NT2

MOV RO,A ;若(A)(R0),则大数送RO

NT2: INC DPTR ;修改数据块指针

DJNZ R1,LOOP ;未完,循环

RET

4.4 设有100个单字节有符号数,连续存放在以2100H为首地址的存储区中,试编程统计其中正数、负数、零的个数。

MOV R0, #00H ; 置负数的计数初值

MOV R1, #00H ; 置正数的计数初值

MOV R2, #00H ; 置0的计数初值

MOV R4, #64H ; 置循环计数初值

MOV DPTR, #2100H ; 置数据区首地址

START:MOVX A, DPTR ; 取某一数据送入A

JZ EQUAL ;为0转EQUAL

JNB ACC.7, POSI ;为正数转POSI

INC R0 ; 负数计数值加1

INC DPTR ; 修改数据块指针

DJNZ R4, START ; 未完,返回

POSI: INC R1 ; 正数计数值加1

INC DPTR ; 修改数据块指针

DJNZ R4, START

EQUAL:INC R2 ; 0计数值加1

INC DPTR

DJNZ R4, START

END

4.5 从2030H单元开始,存有100个有符号数,要求把它传送到从20BOH开始的存储区中,但负数不传送,试编写程序。

MOV R1, #64H ;置计数初值

MOV R0, #B0H ;目标数据区首地址低8位,高8位为20H

MOV DPTR, #2030H ;源数据区首地址

START:MOVX A, DPTR ;取源数据区某数据送入A

ACC.7, D1 ;负数,转D1

MOVX R0,A ;正数,送入目标数据区

INC DPTR ; 修改源数据块指针

INC R0 ; 修改目标数据块指针

DJNZ R1, START ;未完,继续

RET ;返回

D1: INC DPTR ;修改源数据块指针

INC R0 ;修改目标数据块指针

DJNZ R1, START ;未完,继续

RET ;返回

4.6 若从30H单元开始有100个数,编一个程序检查这些数,正数保持不变,负数取补后送回。

MOV R0, #30H ;数据区首地址

MOV R1, #64H ;计数初值

START: MOVX A, R0 ;取某个数

JNB ACC.7, POSI ;正数,转POSI

CPL A ;负数,取补

ADD A, #01H

MOVX R0, A ;送回原地址

INC R0 ;修改数据块指针

DJNZ R1, START ;未完,继续

RET

POSI: INC R0 ;修改数据块指针

DJNZ R1, START ;未完,继续

RET

4.7 试编程把以2040H为首地址的连续10个单元的容按升序排列,存到原来的存储区中。SORT: MOV DPTR, #2040H;

MOV R3, #09H;

CLR F0;

D1: MOVX A,DPTR ;

MOV R2, A ;前一个数送R2

INC DPTR

MOVX A, DPTR ;

MOV R4, A ;后一个数送R4

MOV A, R2 ;前一个数送A

CLR C

SUBB A, R4 ;前一个数减后一个数

JC NEXT ;

MOV A, R2 ;相邻数互换

MOVX DPTR,A

MOV R0,DPL ;数据指针低8位减1

DEC R0

MOV DPL,R0

相关主题