《51单片微型机原理和接口教程》周思跃习题解答.docx

上传人:b****8 文档编号:11452879 上传时间:2023-03-01 格式:DOCX 页数:57 大小:90.25KB
下载 相关 举报
《51单片微型机原理和接口教程》周思跃习题解答.docx_第1页
第1页 / 共57页
《51单片微型机原理和接口教程》周思跃习题解答.docx_第2页
第2页 / 共57页
《51单片微型机原理和接口教程》周思跃习题解答.docx_第3页
第3页 / 共57页
《51单片微型机原理和接口教程》周思跃习题解答.docx_第4页
第4页 / 共57页
《51单片微型机原理和接口教程》周思跃习题解答.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

《51单片微型机原理和接口教程》周思跃习题解答.docx

《《51单片微型机原理和接口教程》周思跃习题解答.docx》由会员分享,可在线阅读,更多相关《《51单片微型机原理和接口教程》周思跃习题解答.docx(57页珍藏版)》请在冰豆网上搜索。

《51单片微型机原理和接口教程》周思跃习题解答.docx

《51单片微型机原理和接口教程》周思跃习题解答

《51单片微型机原理和接口教程》(周思跃)习题解答

《51单片微型机原理和接口教程》

(周思跃_著)

课后习题答案_化学工业出版社

第一章习题答案

1-1请说明CPU的功能以及CPU是如何执行指令和程序的。

答:

CPU的功能是执行程序和统筹处理计算机系统中各类事务。

CPU执行指令分为3步:

取指令、分析指令、执行指令;计算机程序是由一条条指令按一定的顺序排列组成的,CPU执行程序的过程就是一条条指令累计执行的过程,其方式分为串行作业方式和流水线作业方式。

1-2请说明单片机内部主要是由哪些部件组成的,并说明各部件的作用。

答:

CPU:

由控制器和运算器构成,控制器的作用是执行指令和协调系统各部件的工作;运算器的作用是进行逻辑运算和算术运算。

存储器:

存储计算机工作时使用的信息,即指令代码和数据代码。

I/O接口电路:

具有数据缓冲、数据隔离及数据转换的功能。

1-3请问对于容量位8K的存储器芯片,它的地址线是多少根?

答:

8K=8192=213,故地址线为13根。

另附:

存储器的数据线由存储器的字长决定,例如一块32K×16(存储器容量显示格式:

存储单元数×存储单元的字长)的存储器,其地址线为15根,数据线为16根。

1-4将十进制数78,134,分别用二进制数、十六进制数和8421BCD吗表示。

答:

(78)D=(1001110)B=(4E)H=(01111000)8421BCD

(134)D=(10000110)B=(86)H=(000100110100)8421BCD

注:

8421BCD码为4位表示一个十进制数符,本质是符号不是数值,所以不可省略0。

1-5将下列真值分别转化为用8位和16位二进制数表示的原码、补码和反码。

X=1000100;

[X]8位原=[X]8位反=[X]8位补=01000100;[X]16位原=[X]16位反=[X]16位补=0000000001000100

X=-1000100

[X]8位原=11000100,[X]8位反=10111011,[X]8位补=10111100;

[X]16位原=1000000001000100,[X]16位反=111111*********1,[X]16位补=111111*********0;

X=-0111111

[X]8位原=10111111,[X]8位反=11000000,[X]8位补=11000001;

[X]16位原=1000000000111111,[X]16位反=1111111111000000,[X]16位补=1111111111000001;

1-6将下列补码转化成二进制数的真值。

[X]补=00101100;

X=101100

[X]补=11111111;

X=-1

[X]补=10000000;

X=-10000000

1-7已知下列补码[X]补和[Y]补,分别求[X+Y]补、[X-Y]补。

并判断运算结果是否出现溢出。

[X]补=10011001,[Y]补=00101100;

[-Y]补=11010100,[X+Y]补=[X]补+[Y]补=11000101不溢出;[X-Y]补=[X]补+[-Y]补=[X]补-[Y]补=01101101溢出;

[X]补=11111111,[Y]补=10000000;

[-Y]9位补=010000000,[X+Y]补=[X]补+[Y]补=01111111溢出;[X-Y]补=[X]补+[-Y]补=[X]补-[Y]补=01111111不溢出;

[X]补=00110111,[Y]补=11100000;

[-Y]补=00100000,[X+Y]补=[X]补+[Y]补=00010111不溢出;[X-Y]补=[X]补+[-Y]

2-5特殊功能寄存器和工作寄存器在存放信息方面有和区别?

答:

特殊功能寄存器(SFR)中存放的是一些专用信息,这些信息与下列内容有关:

计算机指令的执行条件及状态标志,定时/计数器的使用控制、中断系统的使用、并行I/O及串行I/O接口的使用。

工作寄存器只是用于暂时存放指令执行过程中一般的被操作数据。

2-6特殊功能寄存器的地址空间如何?

答:

特殊功能寄存器(SFR)的地址为8为二进制编码,地址范围为80H~0FFH,但各特殊功能寄存器的地址并非连续分布的。

指令通过直接寻址的方式才能访问到。

2-751单片机中的位寻址区在哪里?

它们的地址空间如何?

答:

51单片机的位寻址区分布在两个地方。

一部分位于内部数据存储器中字节地址为20H~2FH的16个单元中,这部分包括128个位,位地址空间为00H~7FH;另一部分位于字节地址能被8整除的特殊功能寄存器中,位地址空间为80H~0FFH。

2-8请指出下列位地址所在的内部数据存储器单元的字节地址或SFR名称。

答:

00H内部RAM的20H单元;(20H).0

20H内部RAM的24H单元;(24H).0

0A0HP2;P2.0

0B0HP3;P3.0

64H内部RAM的2CH单元;(2CH).4

E6H累加器ACC;ACC.6。

提示:

1)内部数据存储器内的可寻址位,其位地址(00H~7FH)与所在单元的字节地址(20H~2FH)间的关系如下:

位地址=(字节地址-20H)×8+DX,DX-该位在字节单元中的位置(D0~D7)

位地址÷8,商+20H=字节地址,余数=DX

2)SFR中的可位寻址(位地址80H~0FFH)的寄存器,其最低位的位地址与其字节地址相同。

关系如下:

位地址÷8,商*8=SFR的字节地址,余数=DX,DX-该位在SFR中的位置(D0~D7)

2-9若某51单片机应用系统将F000H~FFFFH地址空间分配给它外部的I/O接口,那么该单片机应用系统最多给外部数据存储器分配多少单元?

地址空间如何?

答:

51单片机的外部I/O接口和外部数据存储器是统一编制的,占用同一个地址空间,地址空间的容量为64KB,地址范围为0000H~FFFFH。

据题意,系统已将F000H~FFFFH地址空间分配给它外部的I/O接口,则只剩下0000H~EFFFH可分配给外部数据存储器,容量为60KB。

2-10在图2-9中的电容C,如果它取值太小,对复位电路有何影响?

答:

51单片机上电复位,需要在RST引脚上保持10ms以上的高电平。

如果C太小,则其充电时间变短,上电后,RST引脚上高电平保持的时间太短,则单片机内部复位将不能完全完成,有些寄存器内容将变得不确定。

2-11上电复位和人工按钮复位后对内部数据存储器具有什么不同的影响?

答:

上电复位后,内部数据存储器中的内容为不确定的状态。

人工按钮复位后,内部数据存储器中的内容不变(因为没有断电)。

2-1251应用系统中,为何要对堆栈指针SP重新设置?

答:

复位后(SP)=07H,则堆栈是从08H开始存放数据的。

而内部数据存储器中00H~1FH单元为工作寄存器区,而20H~2FH单元为位寻址区,在实际的应用系统中,这些区域都可能使用到。

故一般将堆栈设置在地址30H以后的单元中,所以需要对堆栈指针SP重新设置。

2-1351单片机中的I/O接口中,那个接口在作为准双向口时需要外接电阻?

若对某一接口进行读引脚的操作,必须事先对该接口做什么操作?

答:

P0口需外接上拉电阻(因为P0是集电极开路结构)。

若需对某个接口读引脚(即读取外部输入信号的状态),需要对该接口的口锁存器写入1(例如:

若需要读取P1.0、P1.1、P1.2、P1.3的引脚状态时,需要先执行MOVP1,#0FH。

这也是为什么复位后(P0)=(P1)=(P2)=(P3)=0FFH的道理。

第三章习题答案

3-1指令的格式是由哪些部分组成的?

每部分的含义是什么?

答:

指令由操作码和操作数组成。

在形式上操作码和操作数都是二进制代码。

操作码用来表示指令的种类和功能,经由控制器中的指令译码器译码后产生控制信号。

操作数是指令的操作对象,表示被操作数据或数据所在的存储单元地址。

3-2什么是寻址方式?

51系列指令系统有哪些寻址方式?

答:

指令中给出操作数的方式叫做寻址方式。

51系列机给出的寻址方式一般有7中:

立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址(直接寻址的一个特例――地址指向位单元)。

3-3对于内部数据存储器00H~1FH区域的访问有哪些寻址方式?

对于外部数据存储器的访问有哪些寻址方式?

对于特殊功能寄存器的访问有哪些寻址方式?

答:

对于内部数据存储器00H~1FH区域的访问有直接寻址、寄存器寻址、寄存器间接寻址三种方式。

对于外部数据存储器的访问只有寄存器间接寻址一种方式(以DPTR或R0、R1为指针)。

对于特殊功能寄存器的访问只有直接寻址一种方式。

同时对于内部数据存储器80H~0FFH的128个单元的访问只有寄存器间接寻址一种方式(以R0、R1或SP为指针);借助于两种不同的寻址方式,可以将在地址上重合(80H~0FFH)的SFR和内部RAM高128字节单元的两部分空间加以区分。

3-451系列单片机有哪些标志位?

这些标志位存放在哪里?

答:

51单片机在程序运行时通常需要一下标志位:

Cy,AC,OV,P,RS1,RS0,它们都存放在特殊功能寄存器PSW(程序状态字寄存器)中。

3-5分析下列各指令的操作数,指出它们的寻址方式。

MOVR4,38H;寄存器寻址,直接寻址

ADDA,@R1;寄存器寻址,寄存器间接寻址

MOVCA,@A+DPTR;寄存器寻址,变址寻址(又称基址寄存器加变址寄存器间接寻址)

MOVXA,@DPTR;寄存器寻址,寄存器间接寻址

DECB;直接寻址

SETB24H;位寻址(直接寻址的一种,只是给出的直接地址是位地址)

CJNEA,#100,NEXT;寄存器寻址,立即寻址,相对寻址

ANL30H,#00H;直接寻址,立即寻址

PUSHP1;寄存器间接寻址(指针为SP,只是在堆栈操作指令中省略了),直接寻址

堆栈操作除了用PUSH和POP指令,完全可以用其它指令来完成,举例如下:

PUSHP1

可用下列程序段完成

INCSP

MOVR0,SP

MOV@R0,P1

POPP1

可用下列程序段完成

MOVR0,SP

MOVP1,@R0

DECSP

提示:

上题答案中按操作数先后顺序给出其对应的寻址方式。

3-6下列各指令或指令组执行前有关寄存器和存储器的状态如下表,要求分析各指令或指令组执行后有关寄存器、存储器和标志位的状态。

内部数据存储器和特殊功能寄存器

外部数据存储器

程序存储器

寄存器名

内容

单元地址

内容

单元地址

内容

单元地址

内容

程序计数器内容

B

64H

73H

10H

900BH

12H

1206H

35H

(PC)=1200H

ACC

03H

72H

11H

900AH

83H

1205H

34H

PSW

80H

71H

00H

9009H

D1H

1204H

33H

标号及标号值

DPL

05H

70H

80H

9008H

79H

1203H

32H

NEXT1=0800H

DPH

90H

9007H

0CH

1201H

31H

NEXT2=0900H

SP

71H

36H

F8H

9006H

23H

1200H

30H

NEXT3=1280H

R0

00H

35H

2BH

9005H

13H

LOOP=1148H

R1

36H

34H

36H

9004H

4DH

R2

35H

33H

74H

9003H

2EH

R3

B7H

32H

59H

9002H

7FH

R4

03H

9001H

54H

R5

F6H

26H

66H

9000H

38H

R6

E4H

25H

55H

R7

21H

24H

44H

P0

7CH

P2

90H

提示:

在上表中需注意几点:

(PSW)=80H,即Cy=1,AC=0,RS1=RS0=0(故当前工作寄存器区为0区)。

工作寄存器区为0区时,R0~R7指向内部数据存储器的00H~07H,所以当指令中出现直接地址00H~07H中的某个时,其初始条件即为R0~R7中某个对应的寄存器的值。

另,因为(DPH)=90H,(DPL)=05H,所以(DPTR)=9005H。

标号值实质上是代表标号所在处的指令在程序存储器中的地址,标号往往出现在程序转移指令中,指出转移指令的目标地址。

•MOVR0,#32;(R0)=32=20H

•MOV25H,@R1;(25H)=0F8H

•MOVXA,@DPTR;(A)=13HP=1

•MOVXA,@R0;(A)=38HP=1

•MOVCA,@A+PC;(A)=33HP=0

•MOVA,04H;(A)=03HP=0

•XCHA,34H;(A)=36H(34H)=03H

•XCHDA,@R1;(A)=08H(36H)=0F3H

•PUSHDPL;(SP)=72H(72H)=05H

•POPDPH;(DPH)=00H(SP)=70H

•SUBBA,R1;(A)=0CCHCy=1P=0AC=1OV=0

•ADDA,R6;(A)=0E7HCy=0P=0AC=0OV=0

•ADDCA,36H;(A)=0FCHCy=0P=0AC=0OV=0

•MULAB;(A)=2CH(B)=01H

•INCR0;(R0)=01H

•DECA;(A)=02HP=1

•ADDA,#49H;

DAA;(A)=52HCy=0P=1

•ANLA,R1;(A)=02H(R1)=36HP=1

•ORLA,32H;(A)=5BHP=1

•ORL26H,#35H;(26H)=77HP=0

•XRLA,@R0;(A)=03HP=0

•XRLA,ACC;(A)=0P=0

•XRLA,#0FFH;(A)=0FCHP=0

•CPLA;(A)=0FCHP=0

•RLA;(A)=06HCy=1

•RRCA;(A)=81HCy=1

•MOVC,(25H).2;Cy=1

•MOVF0,C;(PSW)=0A0H

•SETBRS0;(PSW)=88H

•CLRC;(PSW)=0

•ANLC,(24H).0Cy=0

•JZNEXT1;(PC)=1202H

•JCNEXT2;(PC)=0900H

•CJNEA,25H,NEXT3;(PC)=1280HCy=1

•DJNZR7,LOOP;(PC)=1148H(R7)=20H

•LCALL1800H;(PC)=1800H(SP)=73H(72H)=03H(73H)=12H

•RET;(PC)=0080H(SP)=6FH

•ANLC,/32H;Cy=0(32H)=1,提示此处32H为位存储器

•STOP:

JBCP0.3,STOP;(PC)=1200H(P0)=74H

•JNBP0.4,NEXT1;(PC)=1203H

•分析下列程序段的功能。

•MOVA,R3

MOVR4,A

功能:

将R3中的内容送入R4,即(R3)→R4

•MOVA,R5

CPLA

MOVR5,A

功能:

R5中的数据按位取反后送回R5

•MOVA,R4

MOVB,R5

DIVAB

MOVR4,B

MOVR5,A

功能:

R4中的数除以R5中的数,结果商送入R5,余数送入R4

•MOVC,P1.1

ANLC,P1.2

ANLC,/P1.3

MOVP1.6,C

功能:

P1.1P1.2→P1.6

•MOVC,0

ORLC,1

MOVF0,C

MOVC,2

ORLC,3

ANLC,F0

MOVP1.7,C

功能:

((20H).0∨(20H).1)∧((20H).2∨(20H).3)→P1.7

•CLRC

MOVA,R4

RLCA

MOVR4,A

MOVA,R3

RLCA

MOVR3,A

功能:

R3、R4中的内容左移一位,R4最低位移入0,R4最高位移入R3最低位,R3最高位移出至Cy。

•CLRC

MOVA,R5

RLCA

ADDA,R5

MOVR5,A

功能:

•CLRA

MOVR0,A

MOVR7,A

LOOP:

MOV@R0,A

INCR0

DJNZR7,LOOP

STOP:

SJMPSTOP

功能:

将内部数据存储器00H~0FFH256个单元全部清零。

•PUSHACC

PUSHB

POPACC

POPB

功能:

利用堆栈将ACC与B中的内容互换,即(ACC)(B)

•MOVR0,#30H

XCHDA,@R0

SWAPA

INCR0

XCHDA,@R0

SWAPA

MOV40H,A

功能:

将ACC的低四位送入30H单元低四位,ACC的高四位送入31H的低四位,而原先30H单元的低四位送入40H单元的低四位,原31H单元的低四位送入40H单元的高四位。

举例说明如下,设程序段运行前有(ACC)=12H,(30H)=34H,(31H)=56H;

则程序段运行后有(30H)=32H,(31H)=51H,(ACC)=(40H)=64H;该程序段可用来将单字节BCD转压缩BCD.

3-8指出下列指令中哪些是合法指令,哪些是非法指令。

MOVP1,R4;合法

MOVR2,R4;非法

CLRR3;非法

RLCR5;非法

MOV30H,31H;合法

MOV00H,P;非法

ORL40H,R7;非法

PUSHR6;非法

POPR0;非法

INCDPTR;合法

注:

常见的错误还有类似:

MOVR0,C;ADD30H,31H;MOVA,@R5;DECDPTR等,编程时切记勿错!

3-9按要求编制下列各程序段。

将内部数据存储器30H和31H单元的内容互换。

法一:

MOVA,30H

XCHA,31H

MOV30H,A

法二:

XCHA,30H

XCHA,31H

XCHA,30H

比较法一、法二的优缺点,你认为哪个方法更好?

将寄存器R7的内容向右循环移位一次。

XCHA,R7

RRA

XCHA,R7

将寄存器R3的内容乘以4(结果不超出8为二进制数的范围)。

法一:

MOVA,R3

MOVB,#4

MULAB

MOVR3,A

法二:

XCHA,R3

RLA

RLA

XCHA,R3

 

将寄存器DPTR的内容减1。

法一:

判断DPL=0否?

如是,DPL减1后,DPH也减1;否则,DPH不变。

XCHA,DPL

JNZNOB

DECDPH

NBO:

XCHA,DPL

DECDPL

法二:

(DPH)(DPL)-1→DPH,DPL(即DPTR)

CLRC

XCHA,DPL

SUBBA,#1

XCHA,DPL

XCHA,DPH

SUBBA,#0

XCHA,DPH

法三:

(DPH)(DPL)+0FFFFH→DPTR

XCHA,DPL

ADDA,#0FFH

XCHA,DPL

XCHA,DPH

ADDCA,#0FFH

XCHA,DPH

比较以上各方法,其中法三利用了-1的补码是0FFFFH的原理,将减法改为了加法。

将寄存器R6的内容压入堆栈(设寄存器工作在3区)

PUSH1EH

将R4,R5寄存器连接起来循环右移一位。

(设R4为高8位,R5为低8位;执行完后R4R5中的内容右移一位,R4的最低位移入R5的最高位,同时R5的最低位移入R4的最高位)

XCHA,R4;将R4中的内容送入ACC,同时将ACC的内容放入R4中暂存。

RRCA;ACC中原先R4的内容右移一位,同时Cy移入最高位,而原先R4的最低位移入Cy位

XCHA,R5;R5中的内容送入ACC,上一步中产生的ACC的内容送入R5暂存

RRCA;ACC中原先R5的内容右移一位,Cy(即原R4的最低位)移入最高位,而原R5的最低位移入Cy位

XCHA,R5;将结果送入R5(R5移位已完成),同时将第三步暂存在R5中的内容取出。

MOVACC.7,C;将Cy位中存放的原R5的最低位送入ACC的最高位(即送入R4的最高位)

XCHA,R4;将结果送入R4,同时取出ACC原来的值

第四章习题答案

4-1用伪指令将下列常数依次定义在1600H为首地址的程序存储器中。

0,1,4,9,16,25,36,49,64,81

答:

ORG1600H

DB0,1,4,9,16,25,36,49,64,81

4-2用伪指令将下列常数依次定义在1700H为首地址的程序存储器中,要求数据类型一致。

0,1,8,27,64,125,216,343,512,729

答:

提示:

因为343,512,729为双字节数据(>255),所以所有数据均应以双字节存入。

ORG1700H

DW0,1,8,27,64,125,216,343,512,729

4-3用伪指令将字节型变量X1、X2定义在内部数据存储器30H、31H单元中,将字节型变量Y1、Y2定义在外部数据存储器2000H、2001H单元中。

答:

X1DATA30H

X2DATA31H

Y1XDATA2000H

Y2XDATA2001H

4-4用伪指令将ASCII码字符串“Beijing,tjjtds!

”定义在1200H为首地址的程序存储器中。

答:

ORG1200H

DB‘Beijing,tjjtds!

4-5用伪指令将逻辑变量A1、A2定义在00H、01H位单元中

答:

A1BIT00H

A2BIT01H

4-6编一程序段,将1400H为首地址的外部数据存储器中200个单字节数据转移至1500H为首地址的外部数据存储器中。

MOVDPTR,#1400H;用DRTR指向源数据块单元地址

MOVP2,#

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1