单片机课后重要习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8051芯片需要外扩4KB程序存储器,要求地址范围为1000~1FFFH,以便和内部程序存储器地址相衔接。所用芯片除了地址线和数据线外,只有一个片选控制端/CS,画出扩展系统的连接图。

解:

8

5

1

EA 地P2.4 P2.3 P2.2 P2.1 P2.0

P0.7~P0.0

ALE

/PSEN

2732

/CE

A11

A10

A9

A8

A7~A0

D7~D0

/OE

74LS373

G

在图中,若因某种原因,、、误接为、、,这时所接的EPROM寻址区是如何分布的?解:

误接后,A10,A9,A8则分别与,,相接,

~

* * 0 0 0 * * * 00000000—

* * 0 0 1 * * * 00000000—

* * 0 1 0 * * * 00000000—

* * 0 1 1 * * * 00000000—

* * 1 0 0 * * * 00000000—

* * 1 0 1 * * * 00000000—

* * 1 1 0 * * * 00000000—

* * 1 1 1 * * * 00000000—

所以地址分布为:

0000H~00FFH, 0800H~08FFH, 1000H~10FFH, 1800H~18FFH, 2000H~20FFH, 2800H~28FFH, 3000H~30FFH, 3800H~38FFH

编写程序,进行两个16位数的减法:6F5DH~13B4H,结果存至内部RAM的30H 和31H单元。30H单元存差的低8位。

解:

MOV A, #5DH

CLR C

SUBB A, #0B4H

MOV 30H, A

MOV A, #6FH

SUBB A, #13H

MOV 31H, A

SJMP $

编写程序,若累加器内容分别满足一下条件,则程序转至LABEL存储单元。(1)A≥10 (2) A>10 (3) A≤10 (4) A<10

解:

(1) CLR C

CJNE A, #10, LOOP

SJMP LABEL

LOOP: JNC LABEL

SJMP $

(2) CJNE A, #10, LOOP

SJMP $

LOOP: JNC LABEL

SJMP $

(3) CJNE A, #10, LOOP

SJMP LABEL

LOOP: JC LABEL

SJMP $

(4) CJNE A, #10, LOOP

SJMP $

LOOP: JC LABEL

SJMP $

已知SP=25H,PC=2345H,(24H)=12H,(25H)=34H,(26H)=56H,问在这种条件下执行RET指令以后,SP,PC分别是多少?

解:

在执行RET指令后说明是一个子函数执行结束,则进行POP操作,于是SP 在执行RET指令后变为23H,因为(25H)=34H, (24H)=12H,所以PC=3412H,因为在进入堆栈的时候是先压入低8位,然后进入堆栈的是高8位,出堆栈的时候正好相反。所以最后结果是:SP=23H,PC=3412H

若SP=25H,PC=2345H,标号LABEL所在的地址为3456H,问执行长调用指令LCALL LABEL 之后,堆栈指针和堆栈内容发生什么变化?PC是多少?

解:

在进行长调用指令 LCALL LABEL,则要进行堆栈保护,而LCALL指令是三字节的指令,所以PC在进入堆栈之前变为2348H,在执行完长指令LCALL之后,PC进入子函数程序,则进入之前的地址要首先保护起来,所以SP=27H,堆栈的内容(26H)=48H,(27H)=23H,此时PC将要指向子函数LABEL的入口地址,即PC=3456H。

在中的LCALL指令能否直接换成“ACALL LABEL”指令?为什么?

解:

不能,因为ACALL是短调用指令,子程序调用的范围为围绕调用指令的2KB 内,即它们的地址高5位应该是相同的。或者说,在执行ACALL指令时,子程序入口地址的高5位是不能任意定的,只能由ACALL指令所在的位置来确定,例如在调用子函数之前的地址为2345H,即高5位是00100,所以ACALL调用的地址范围为:2000H——27FFH,而LABEL所在的地址为3456H已经超出调用范围,所以不能替换。

试编写程序,查找在内部RAM的20H~50H单元中是否有0AAH这一数据,若有这一数据,则将51H单元置为01H,若未找到,则使51H单元置0。

解:

参考程序如下:

M0V R0,#31H

M0V R1,#20H

LOOP: MOV A,@R1

CLR C

CJNE A,#0AAH,LOOP1

SJMP L00P2

LOOP1: INC R1

DJNZ R0,LOOP

M0V A,#00H

SJMP LOOP3

LOOP2: MOV A,#01H

LOOP3: MOV 51H,A

SJMP $

试编写程序,查找在内部RAM的20H~50H单元内部出现00H的次数,并将查找的结果存入51H单元。

解:

参考程序如下:

MOV R0,#31H

MOV R1,#20H

MOV R2,#00H

LOOP: MOV A,@R1

CJNE A,#00H,LOOP1

INC R2

LOOP1: INC R1

DJNZ R0,LOOP

M0V 51H,R2

SJMP $

相关文档
最新文档