单片机课后习题答案 下载本文

MOV A, #30H MOV 51H, A

解:

结果为:(A)=30H (R0)=50H (50H)=00H (51H)=30H 15.设堆栈指针(SP)=60H,片内RAM中的(30H)=24H,(31H)=10H。执行下列程序段后,61H, 62H, 30H, 31H, DPTR及SP中的内容将有何变化?

PUSH 30H PUSH 31H POP DPL POP DPH MOV 30H, #00H MOV 31H, #0FFH

解:

结果为: 61H、62H单元为堆栈单元,其内容已被弹出栈。 (30H)=00H (31H)=0FFH (DPTR)=2410H (SP)=60H 16.在8051的片内RAM中,已知(20H)=30H,(30H)=40H,(40H)=50H,(50H)=55H。分析下面各条指令,说明源操作数的寻址方式,分析按顺序执行各条指令后的结果。

MOV MOV MOV MOV MOV MOV MOV

A, 40H R0, A

P1, #0F0H @R0, 20H 50H, R0 A, @R0 P2, P1

解:

指令 源操作数的寻址方式 执行指令后的结果

MOV A,40H 直接寻址 (A)=50H MOV R0,A 寄存器寻址 (R0)=50H MOV P1,#80H 立即寻址 (P1)=80H MOV @R0,20H 寄存器间接寻址 (50H)=30H MOV DPTR,#2000H 立即寻址 (DPTR)=2000H MOV 40H,30H 直接寻址 (40H)=40H MOV R0,30H 直接寻址 (R0)=40H MOV D0H,R0 直接寻址 (D0H)=40H MOV 10H,#10H 立即寻址 (10H)=10H MOV A,@R0 寄存器间接寻址 (A)=50H MOV P2,P1 直接寻址 (P2)=80H

17.完成以下的数据传送过程

(1)R1的内容传送到R0。

(2)片外RAM 20H单元的内容送R0。

(3)片外 RAM 20H单元的内容送片内RAM 20H单元。 (4)片外RAM 1000H单元的内容送片内 RAM 20H单元。 (5)ROM 2000H单元的内容送R0。

(6)ROM 2000H单元的内容送片内RAM 20H单元。 (7)ROM 2000H单元的内容送片外RAM 20H单元。 解:

(1)R1的内容传送到R0 ; MOV A, R1 MOV R0, A

(2)片外RAM 20H单元内容送R0 ; MOV R1, #20H MOVX A, @R1

9

MOV R0, A

(3)片外 RAM 20H单元的内容送片内RAM 20H单元; MOV R0, #20H MOVX A, @R0 MOV 20H, A

(4)片外RAM 1000H单元的内容送片内 RAM 20H 单元; MOV DPTR, #1000H MOVX A, @DPTR MOV 20H, A (5)ROM 2000H单元的内容送R0单元; CLR A

MOV DPTR, #2000H MOVC A,@A+DPTR MOV R0, A

(6)ROM 2000H 单元的内容送片内RAM 20H单元; CLR A

MOV DPTR, #2000H MOVC A,@A+DPTR

MOV 20H, A

(7)ROM 2000H单元的内容送片外RAM 20H单元。 CLR A

MOV DPTR, #2000H MOVC A,@A+DPTR MOV R0, #20H MOVX @R0, A

18.设有两个4位BCD码,分别存放在片内RAM的23H, 22H单元和33H, 32H单元中,求它们的和,并送入43H, 42H单元中去。(以上均为低位在低字节,高位在高字节)。 解: ORG 0000H

LJMP START ORG 0030H START: MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $

END

19.编程将片内RAM的40H~60H单元中内容送到片外RAM以3000H开始的单元中。并将原片内RAM数据块区域全部清0。 解: ORG 0000H MOVX @DPTR,A

LJMP MAIN CLR A ORG 0030H MOV @R1,A

INC R1 MAIN: MOV SP, #60H

INC DPTR MOV R7,#21H

DJNZ R7,LOOP MOV R1,#40H

SJMP $ MOV DPTR,#3000H

END

LOOP: MOV A,@R1

20.编程计算片内RAM区30H~37H 的8个单元中数的算术平均值,结果存放在3AH单元中。

ORG 0030H 解: ORG 0000H

MAIN: MOV R0,#30H LJMP MAIN

10

CLR C MOV R1,#00H

LP3:MOV A,R1 MOV R2,#00H

RRC A MOV R3,#08H

MOV R1,A LP2: MOV A,@R0

MOV A,R2 ADD A,R2

RRC A MOV R2,A

MOV R2,A JNC LP1

DJNZ R3,LP3 INC R1

MOV 3AH,R2 LP1: INC R0

SJMP $ DJNZ R3,LP2

END MOV R3,#03H

21.编写计算下式的程序,设乘积的结果均小于255。A, B值分别存放在片外RAM的2001H和2002H单元中,结果存于2000H单元中。 (A+B)×(A+B)+10 若(A+B)×(A+B)<10

Y= (A+B)×(A+B) 若(A+B)×(A+B)=10

(A+B)×(A+B)-10 若(A+B)×(A+B)>10

解:

ORG 0000H SJMP NET3

LJMP START NET1: JNC NET2 ORG 0030H CLR C START: MOV DPTR,#2001H MOV A,R1 MOVX A,@DPTR SUBB A,#10 MOV 30H,A MOV DPTR,#2000H MOV DPTR,#2002H MOVX @DPTR,A MOVX A,@DPTR SJMP NET3 ADD A,30H NET2: MOV A,R1 MOV B,A ADD A,#10 MUL AB MOV DPTR,#2000H MOV R1,A MOVX @DPTR,A CJNE A,#10,NET1 NET3: SJMP $ MOV DPTR,#2000H END MOVX @DPTR,A

22.设有两个长度均为15的数组,分别存放在片外RAM以2000H和2100H开始的存储区中,试编程求其对应项之和,结果存放在以2200H为首地址的存储区中。

MOVX @DPTR,A 解: ORG 0000H

MOV DPTR,#2000H LJMP MAIN

MOV R1,#30H ORG 0030h

MOV R2,#15 MAIN: MOV DPTR,#2000H

LOOP: MOVX A,@DPTR MOV A,#OFFH

MOV @R1,A MOVX @DPTR,A

INC DPTR MOV DPTR,#2100H

INC R1 MOV A,#34H

DJNZ R2,LOOP MOVX @DPTR,A

MOV R1,#30H MOV DPTR,#2008H

MOV DPTR,#2100H MOV A,#33H

MOV R2,#15 MOVX @DPTR,A

MOV R0,#40H MOV DPTR,#2108H

LOOP1: MOV A,#44H

MOVX A,@DPTR MOVX @DPTR,A

CLR C MOV DPTR,#200EH

ADDC A,@R1 MOV A,#0EEH

MOV @R0,A MOVX @DPTR,A

INC DPTR MOV DPTR,#210EH

INC R1 MOV A,#32H

11

INC R0 MOVX @DPTR,A DJNZ R2,LOOP1 INC R0

MOV DPTR,#2200H INC DPTR

MOV R2,#15 DJNZ R2,LOOP2 MOV R0,#40H SJMP $ LOOP2: MOV A,@R0 END

23.设有100个有符号数,连续存放在片外RAM以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数。

SJMP NET3 解: ORG 0000H

NET1: JB ACC.7 NET2 LJMP MAIN

ORG 0030H INC R4

SJMP NET3 MAIN: MOV R2,#100

NET2: INC R5 MOV R3,#00H

NET3: INC DPTR MOV R4,#00H

DJNZ R2,LOOP MOV R5,#00H

SJMP $ MOV DPTR,#2000H

END LOOP: MOVX A,@DPTR

CJNE A,#00H,NET1 INC R3

24.试编一查表程序,从外部RAM首地址为2000H、长度为9FH的数据块中找出第一个ASCII码A,将其地址送到20A0H和20A1H单元中。

MOV A, R2 解: ORG 0000H

MOVX @DPTR,A LJMP MAIN

INC DPTR ORG 0030H

MOV A, R3 MAIN: MOV SP, #60H

MOVX @DPTR,A MOV DPTR,#2000H

SJMP LP2 MOV R7,#9FH

LP1: INC DPTR LP0: MOVX A,@DPTR

DJNZ R7, LP0 CJNE A, #41H, LP1

LP2: RET MOV R2,DPL

MOV R3,DPH END

MOV DPTR,#20A0H

25.编程把片外RAM中以2040H为首地址的连续50个单元中的无符号数按降序排列,存放到以3000H为首地址的存储区中。 解: ORG 0000H CJNE A,21H,LOOP

LJMP MAIN LOOP: JNC LOOP1 ORG 0100H MOV A,20H MAIN: MOV DPTR,#2040H MOVX @DPTR,A MOV R2,#50 DEC DPTR CLR 7FH MOV A,21H DEC R2 MOVX @DPTR,A LS: MOVX A,@DPTR INC DPTR MOV 20H,A SETB 7FH INC DPTR LOOP1: DJNZ R2,LS MOVX A,@DPTR JB 7FH,MAIN MOV 21H,A SJMP $ MOV A,20H END

26.在片外RAM以2000H为首地址的存储区中,存放着20个用ASCII码表示的0~9之间的数,试编程将它们转换成BCD码,并以压缩BCD码(即一个单元存放两位BCD码)的形式存放在以3000H开始的单元中。 解: ORG 0000H MOV R1,#30H

LJMP MAIN MOV DPTR,#2000H ORG 0030H TT: MOVX A,@DPTR MAIN: MOV R2,#0AH CLR C

12