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

解:

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

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 寄存器间接寻址 MOV P2,P1 直接寻址 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 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

(A)=50H (P2)=80H

9

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 0000H DJNZ R3,LP2

LJMP MAIN MOV R3,#03H ORG 0030H CLR C MAIN: MOV R0,#30H LP3:MOV A,R1 MOV R1,#00H RRC A MOV R2,#00H MOV R1,A MOV R3,#08H MOV A,R2

RRC A LP2: MOV A,@R0

MOV R2,A ADD A,R2

DJNZ R3,LP3 MOV R2,A

MOV 3AH,R2 JNC LP1

INC R1 SJMP $

END LP1: INC R0

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 MOV DPTR,#2002H

LJMP START MOVX A,@DPTR ORG 0030H ADD A,30H START: MOV DPTR,#2001H MOV B,A MOVX A,@DPTR MUL AB MOV 30H,A MOV R1,A

10

CJNE A,#10,NET1 MOVX @DPTR,A

SJMP NET3 MOV DPTR,#2000H

NET2: MOV A,R1 MOVX @DPTR,A

ADD A,#10 SJMP NET3

NET1: JNC NET2 MOV DPTR,#2000H CLR C MOVX @DPTR,A MOV A,R1 NET3: SJMP $ SUBB A,#10 END MOV DPTR,#2000H

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

INC DPTR 解: ORG 0000H

INC R1 LJMP MAIN

DJNZ R2,LOOP ORG 0030h

MOV R1,#30H MAIN: MOV DPTR,#2000H

MOV DPTR,#2100H MOV A,#OFFH

MOV R2,#15 MOVX @DPTR,A

MOV R0,#40H MOV DPTR,#2100H

LOOP1: MOV A,#34H

MOVX A,@DPTR MOVX @DPTR,A

CLR C MOV DPTR,#2008H

ADDC A,@R1 MOV A,#33H

MOV @R0,A MOVX @DPTR,A

INC DPTR MOV DPTR,#2108H

INC R1 MOV A,#44H

INC R0 MOVX @DPTR,A

DJNZ R2,LOOP1 MOV DPTR,#200EH

MOV DPTR,#2200H MOV A,#0EEH

MOV R2,#15 MOVX @DPTR,A

MOV R0,#40H MOV DPTR,#210EH

LOOP2: MOV A,@R0 MOV A,#32H

MOVX @DPTR,A MOVX @DPTR,A

INC R0 MOV DPTR,#2000H

INC DPTR MOV R1,#30H

DJNZ R2,LOOP2 MOV R2,#15

SJMP $ LOOP: MOVX A,@DPTR

END MOV @R1,A

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单元中。

ORG 0030H 解: ORG 0000H

MAIN: MOV SP, #60H LJMP MAIN

11

MOV DPTR,#2000H INC DPTR

MOV R7,#9FH MOV A, R3 LP0: MOVX A,@DPTR MOVX @DPTR,A CJNE A, #41H, LP1 SJMP LP2 MOV R2,DPL LP1: INC DPTR MOV R3,DPH DJNZ R7, LP0

MOV DPTR,#20A0H LP2: RET

MOV A, R2

END

MOVX @DPTR,A

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 A,41H

LJMP MAIN XCHD A,@R1 ORG 0030H MOV @R1,A MAIN: MOV R2,#0AH INC R1 MOV R1,#30H INC DPTR MOV DPTR,#2000H DJNZ R2,TT TT: MOVX A,@DPTR MOV DPTR,#3000H CLR C MOV R1,#30H SUBB A,#30H MOV R2,#0AH SWAP A TT1: MOV A,@R1 MOV 41H,A MOVX @DPTR,A INC DPTR INC R1 MOVX A,@DPTR INC DPTR CLR C DJNZ R2,TT1 SUBB A,#30H SJMP $ MOV @R1,A END

27.编程实现将片外RAM中2400H~2450H单元中的数传送到2500H~2550H单元中。

MOVX @DPTR,A 解: ORG 0000H

MOV 30H,#24H LJMP MAIN

MOV 31H,#00H ORG 0030H

MOV 32H,#25H MAIN:

MOV 33H,#00H MOV DPTR,#2400H

MOV R2,#51H MOV A,#07H

LOOP: MOVX @DPTR,A

MOV DPH,30H MOV DPTR,@2450H

MOV DPL,31H MOV A,#06H

12