单片机原理与接口技术(第二版)余锡存著 课后复习题答案 下载本文

答:

相同之处,都是无条件转移指令。

① AJMP addr11 ;下调指令为基准的2KB范围内的跳转指令。

② LJMP addr16 ;转移的目标地址可以在64KB程序存储器的任何地方。 ③ SJMP rel ;下调指令为基准的-128B~+127B范围内的短跳转指令。

6.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?

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

PUSH 30H ;(61H)= (30H) = 24H PUSH 31H ; (62H) = (31H) = 10H POP DPL ; (DPL) = (62H) = 10H POP DPH ; (DPH) =(61H)= 24H MOV 30H,#00H ; (30H) = 00H MOV 31H,#0FFH ; (31H) = 0FFH

程序执行后:(61H)= 24H, (62H) = 10H, (30H) = 00H, (31H) = 0FFH,(DPTR) = 2410H

7.试分析下列程序段,当程序执行后,位地址00H和01H中的内容将为何值?P1口的8条I/O线为何状态?

CLR C MOV A,#66H

JC LOOP1 CPL C SETB 01H

LOOP1: ORL C,ACC.0

JB ACC.2,LOOP2

LOOP2: MOV P1,A

答: CLR C ; (Cy)=0

MOV A,#66H ; (A) = 66H = 0110 0110 B JC LOOP1 CPL C

; 因 此时(Cy)=0 ,所以不跳转 ; (Cy) = 1

SETB 01H ; (01H)= 1

LOOP1: ORL C,ACC.0 ; (Cy) =(Cy)∨(ACC.0) = 1

JB ACC.2,LOOP2 ; 因(ACC.2) = 1 LOOP2: MOV P1,A

; (P1)= 0110 0110 B

8.要完成以下的数据传送,应如何用MCS-51指令实现? ⑴ R1的内容传送到R0;

⑵ 片外RAM 20H单元的内容送R0;

⑶ 片外RAM 20H单元的内容送片内RAM 20H单元; ⑷ 片外RAM 1000H单元的内容送片内RAM 20H单元; ⑸ ROM 2000H 单元的内容送R0;

⑹ ROM 2000H 单元的内容送片内RAM 20H单元; ⑺ ROM 2000H 单元的内容送片外RAM 20H单元。 答:

⑴ R1的内容传送到R0; MOV A,R1

MOV R0,A

⑵ 片外RAM 20H单元的内容送R0;

MOV R1,#20H MOVX A,@R1

MOV R0,A

⑶ 片外RAM 20H单元的内容送片内RAM 20H单元;

MOV R1,#20H MOVX A,@R1 MOV 20H,A

⑷ 片外RAM 1000H单元的内容送片内RAM 20H单元;

MOV DPTR,#20H MOVX A,@DPTR MOV 20H,A

⑸ ROM 2000H 单元的内容送R0;

MOV DPTR,#2000H CLR A

MOVC A,@A+DPTR MOV R0,A

⑹ ROM 2000H 单元的内容送片内RAM 20H单元;

MOV DPTR,#2000H CLR A

MOVC A,@A+DPTR MOV 20H,A

⑺ ROM 2000H 单元的内容送片外RAM 20H单元。

MOV DPTR,#2000H CLR A

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

9.分析以下程序每条指令执行的结果:

MOV A, #25H ; (A) = 25H MOV R1,#33H ; (R1) = 33H MOV 40H,#1AH ; (40H) = 1AH

MOV R0,40H ; (R0) = 1AH ADD A,R1

; (A) = 25H + 33H = 58H

; (A) = 58H + (1AH) + (Cy) = 58H ; (A) = 58H + 1AH + (Cy) = 72H

ADDC A,@R0 ADDC A,40H

10.设A=83H,R0=17H,(17H)=34H,执行下列程序后,(A) = ?

ANL A,#17H ORL 17H,A XRL A,@R0 CPL A

; (A) = 1000 0011B∧0001 0111B = 0000 0011B

; (17H) = 0011 0100B∨0000 0011B = 0011 0111B ; (A) = 0000 0011B⊕0011 0111 = 0011 0100B ; (A) = 1100 1011B

11.两个4位BCD码数相加,被加数和加数分别存于30H、31H和40H、41H单元中(次序为千位、百位在低地址中,十位、个位在高地址中),和数放在50H、51H、52H中(52H用于存放最高位的进位),试编写加法程序。 解: ORG 00H

MOV 30H, #12H ; MOV 31H, #34H ; MOV 40H, #56H ; MOV 41H, #78H ;

MOV A, 31H ; 取被加数十个位

ADD A, 41H ; 相加,(A) = (31H) + (41H) DA A ; 十进制调整 MOV 51H,A

; 存十位个位运算结果

MOV A, 30H ; 取被加数千百位

ADDC A, 40H ; 相加,(A) = (30H) + (40H) DA A ; 十进制调整 MOV 50H,A

; 存千位百位运算结果

CLR A ; 清A

ADDC A,#0 ; 将进位加到A中 MOV 52H, A ; 存进位 SJMP $