单片机原理及应用及C51程序设计第三章习题答案

更新时间:2024-06-08 00:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

找到后第一时间上传,献给各位电子班的同学

习题三

1.在MCS-51单片机中,寻址方式有几种?其中对片内RAM可以用哪几种寻址方式?对片外RAM可以用哪几种寻址方式?

答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。片内RAM寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片外RAM寻址有:寄存器间接寻址方式。 2.在对片外RAM单元寻址中,用Ri间接寻址与用DPTR间接寻址有什么区别?

答:片外数据存储器寻址中,用Ri间接寻址只能访问低端的256字节单元,而用DPTR作指针间接访问可访问整个64K字节。 3.在位处理中,位地址的表示方式有哪几种?

答:1.直接位地址(00H~0FFH)。例如:20H

2.字节地址带位号。例如:20H.3表示20H单元的3位。 3.特殊功能寄存器名带位号。例如:P0.1表示P0口的1位。 4.位符号地址。例如:TR0是定时/计数器T0的启动位。 4.写出完成下列操作的指令。 (1)R0的内容送到R1中。 MOV A,R0 MOV R1,A

(2)片内RAM的20H单元内容送到片内RAM的40H单元中。 MOV 40H,20H

(3)片内RAM的30H单元内容送到片外RAM的50H单元中。 MOV A,30H MOV R0,#50H MOVX @R0,A

(4)片内RAM的50H单元内容送到片外RAM的3000H单元中。 MOV A,50H MOV DPTR,#3000H MOVX @DPTR,A

(5)片外RAM的2000H单元内容送到片内RAM的20H单元中。 MOV DPTR,#2000H

1

MOVX A,@DPTR MOV 20H,A

(6)片外RAM的1000H单元内容送到片外RAM的4000H单元中。 MOV DPTR,#1000H MOVX A,@DPTR MOV DPTR,#4000H

MOV @DPTR,A

(7)ROM的1000H单元内容送到片内RAM的50H单元中。 MOV A,#0 MOV DPTR,#1000H MOVC A,@A+DPTR MOV 50H,A

(8)ROM的1000H单元内容送到片外RAM的1000H单元中。 MOV A,#0 MOV DPTR,#1000H MOVC A,@A+DPTR MOVX @DPTR,A

5.区分下列指令有什么不同?

(1)MOV A,20H和MOV A,#20H 答:前者源操作数是直接寻址,后者源操作数立即寻址。 (2)MOV A,@R1和MOVX A,@R1 答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低256字节。

(3)MOV A,R1和MOV A,@R1 答:前者源操作数是寄存器寻址,后者源操作数寄存器间接寻址。 (4)MOVX A,@R1和MOVX A,@DPTR 答:前者源操作数是访问片外数据存储器低256字节,后者源操作数访问片外数据存储器整个64K字节。

(5)MOVX A,@DPTR和MOVC A,@A+DPTR 答:前者源操作数是访问片外数据存储器,后者源操作数访问程序数据存储器。

6.设片内RAM的(20H)=40H,(40H)=10H,(10H)=50H,(P1)=0CAH。分析下列指令执行后片内RAM的20H、40H、10H单元以及P1、P2中的内容。

MOV R0,#20H ;R0=20H MOV A,@R0 ;A=40H MOV R1,A ;R1=40H MOV A,@R1 ;A=10H

MOV @R0,P1 ;(40H)=0CAH

2

MOV P2,P1 ;P2=0CAH MOV 10H,A ;(10H)=10H MOV 20H,10H ;(20H)=10H

结果:(20H)=10H、(10H)=10H、(40H)=0CAH、P2=0CAH和P1=0CAH 7.已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,片内RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下各条指令执行后目标单元的内容。 (1)MOV A,@R1 结果:累加器A等于70H (2)MOVX @DPTR,A 结果:片外RAM(2FFCH)单元等于02H

(3)MOVC A,@A+DPTR 结果: 累加器A等于64H (4)XCHD A,@R1 结果:累加器A等于00H,片内RAM(7FH)单元等于72H

8.已知:(A)=78H,(R1)=78H,(B)=04H,CY=1,片内RAM(78H)=0DDH,(80H)=6CH,试分别写出下列指令执行后目标单元的结果和相应标志位的值。 (1)ADD A,@R1 ;累加器A等于55H,CY等于1 (2)SUBB A,#77H ;累加器A等于00H,CY等于0 (3)MUL AB ;累加器A等于E0H,B寄存器等于01H,CY等于1,OV等于0 (4)DIV AB ;累加器A等于1EH,B寄存器等于00H,CY、OV等于0

(5)ANL 78H,#78H ;片内RAM(78H)单元等于58H (6)ORL A,#0FH ;累加器A等于7FH (7)XRL 80H,A ;片内RAM(80H)等于14H

9.设(A)=83H,(R0)=17H,(17H)=34H,分析当执行完下面指令段后累加器A、R0、17H单元的内容。

ANL A,#17H ;A=03H ORL 17H,A ;(17H)=37H XRL A,@R0 ;A=34H CPL A ;A=CBH

结果:A=CBH,(R0)=17H,(17H)=37H 10.写出完成下列要求的指令。

(1)累加器A的低2位清零,其余位不变。 ANL A,#11111100B

(2)累加器A的高2位置“1”,其余位不变。 ORL A,#11000000B

(3)累加器的高4位取反,其余位不变。

3

XRL A,#11110000B

(4)累加器第0位、2位、4位、6位取反,其余位不变。 XRL A,#01010101B

11.说明LJMP指令与AJMP指令的区别? 答:LJMP指令后面提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,缺点是:执行时间长,字节数多。 AJMP指令后带的是11位直接地址,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后把指令中的11位地址addr11送给程序指针PC的低11位,而程序指针的高5位不变,只能在当前2K范围内转移。

12.设当前指令CJNE A,#12H,10H的地址是0FFEH,若累加器A的值为10H,则该指令执行后的PC值为多少?若累加器A的值为12H呢? 答:指令执行后的PC值为1011H,若累加器A的值为12H,则指令执行后的PC值为1001H。

13.用位处理指令实现P1.4=P1.0?(P1.1?P1.2)?/P1.3的逻辑功能。 程序: MOV C,P1.1 ORL C,P1.2 ANL C,P1.0 ORL C,/P1.3 MOV P1.4,C

14.下列程序段汇编后,从1000H单元开始的单元内容是什么? ORG 1000H

TAB: DB 12H,34H

DS 3

DW 5567H,87H

答:(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=00,(1004H)=00,(1005H)=67H,(1006H)=55H,(1007H)=87H,(1008H)=00H

15.试编一段程序,将片内RAM的20H、21H、22H单元的内容依次存入片外RAM的20H、21H、22H中。

程序:

MOV R0,#20H MOV R2,#03H LOOP:MOV A,@R0 MOVX @R0,A

4

INC DJNZ R0

R2,LOOP

SJMP $

16.编程实现将片外RAM的2000H~2030H单元的内容,全部搬到片内RAM的20H单元开始位置,并将源位置清零。

程序:

MOV R0,#20H

MOV DPTR,#2000H MOV R2,#31H

LOOP: MOVX A,@DPTR MOV @R0,A MOV A,#00 MOVX @DPTR,A

INC

INC DJNZ

DPTR R0

R2,LOOP

SJMP $ 17.编程将片外RAM的1000H单元开始的100个字节数据相加,结果放于R7R6中。

程序:

MOV DPTR,#1000H MOV R2,#100 MOV R7,#00 MOV R6,#00

LOOP: MOVX A,@DPTR ADD A,R6 MOV R6,A MOV A,R7 ADDC A,#0 MOV R7,A

INC DJNZ

DPTR

R2,LOOP

SJMP $

18.编程实现R4R3?R2,结果放于R7R6R5中。

程序:

ORG 0100H

MUL1:MOV A,R2

MOV B,R3

MUL AB ;R2?R3,结果的低字节直接存入

积的R5

MOV R5,A ;结果的高字节存入R6中暂存起来

5

MOV R6,B

MUL2:MOV A,R2

MOV B,R4

MUL AB ;R2?R4,结果的低字节与R6相加

后,再存入R6中

ADD A,R6 MOV R6,A

MOV A,B ;结果的高字节加上进位位后存入

R7中

ADDC A,#00 MOV R7,A SJMP $

19.编程实现把片内RAM的20H单元的0位、1位,21H单元的2位、3位,22H单元的4位、5位,23H单元的6位、7位,按原位置关系拼装在一起放于R2中。

程序: MOV C,20H.0 MOV A.0,C MOV C,20H.1 MOV A.1,C MOV C,21H.2 MOV A.2,C MOV C,21H.3 MOV A.3,C MOV C,22H.4 MOV A.4,C MOV C,22H.5 MOV A.5,C MOV C,23H.6 MOV A.6,C MOV C,23H.7 MOV A.7,C MOV R2,A

20.用查表的方法实现一位十六进制数转换成ASCII。 程序:(设一位十六进制数放在R2中,轮换的ASCII也放于R2中) C16STASC:MOV DPTR,#TAB MOV A,R2 MOVC A,@A+DPTR

6

MOV R2,A

RET

TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H

DB 38H,391H,41H,42H,43H,44H,45H,46H

21.编程统计从片外RAM2000H开始的100个单元中“0”的个数放于R2中。

程序:

MOV DPTR,#2000H MOV R3,#100 MOV R2,#00

LOOP: MOVX A,@DPTR JNZ NEXT INC R2 NEXT:INC DPTR DJNZ R3,LOOP SJMP

$

7

本文来源:https://www.bwwdw.com/article/5qt6.html

Top