单片微型计算机原理与接口技术答案(第二版)高峰 2 下载本文

(10) SUBB A,30H (11) SUBB A,#30H 【答】结果如下:

(1) XCH A,R0 ;(A)=30H,(R0):7AH

(2) XCH A,30H ;(A)=A5H,(30H)=7AH,(PSW)=81H (3) XCH A,@R0 ;(A)=R5H,(30H)=7AH,(PSW)=81H (4) XCHD A,@R0 ;(A)=75H,(30H)=AAH,(PSW)=81H (5) SWAP A ;(A)=A7H

(6) ADD A,R0 ;(A)=AAH,(PSW)=04H (7) ADD A,30H ;(A)=1FH,(PSW)=81H (8) ADD A,#30H ;(A)=AAH,(PSW)=04H (9) ADDC A,30H ;(A)=20H,(PSW)=01H (10) SUBB A,30H ;(A)=D4H,(PSW)=84H (11) SUBB A,#30H ;(A)=49H,(PSW)=01H

【3—14】已知(30H)=40H,(40H)=10 H,(10H)=00H,(P1)=CAH,请写出执行以下程序段后有关单元的内容。

MOV R0,#30H

MOV A,@R0 . MOV R1,A MOV B,@R1 MOV @R1,P1 MOV A,@R0 MOV IOH,#20H MOV 30H,10H

【答】有关单元的内容如下:

MOV R0,#30H ;(RO)=30H MOV A,@R0 ;(A)=40H MOV Rl,A ;(R1)=40H MOV B,@R1 ;(B)=1OH MOV @R1,P1 ;(40H)=CAH MOV A,@RO ;(A)=40H

MOV 10H,#20H ;(10H)=20H MOV 30H,10H ;(30H)=20H

执行以上程序段后,有关单元的内容分别为:(30H)=20H,(40H)=CAH,(10H)=20H,(P1)=CAH。

【3-15】已知(R1)=20 H,(20 H)=AAH,请写出执行完下列程序段后A的内容。 MOV A,#55H ANL A,#0FFH 0RL 20H,A XRL A,@R1 CPL A

【答】各指令的执行结果如下: MOV A,#55H ;(A)=55H

ANL A,#0FFH ;(A)=55H

ORL 20H,A ;(20H)=FFH XRL A,@R1 ;(A)=AAH CPL A ;(A)=55H

执行完程序段后,A的内容为5 5 H。

【3—16]设内部数据存储器30 H、31 H单元中连续存放有4位BCD码数符,试编程序把4位BCD码数符倒序排列。请对源程序加以注释。

31H 30H 31H 30H a3 a2 al a0 a0 al a2 a3 【答】源程序如下: MOV R0,#30H MOV R1,#31H

MOV A,@R0 ;30H单元内容送A

SWAP A ;A的高4位与低4位交换(a2与a3) MOV @R0,A

MOV A,@R1 ;31H单元内容送A

SWAP A ;A的高4位与低4位交换(a0与a1) XCH A,@R0 ;30H与31H单元内容交换 MOV @R1,A , HERE:SJMP HERE

【3-17】设(A)=C3 H,(RO)=AAH。分析指令“ADD A,R0\的执行结果。 【答】 1 1 0 0 0 0 1 1 B

+10101010B

C=1 0 1 1 0 1 1 0 1 B

执行结果:(A)=6DH,(CY)=1,(OV)=1,(AC)=O。PSW=10XXXIXl。 分析:第6位无进位而第7位有进位,故溢出标志OV=1。对于两个带符号数相加,OV=1即表示出现两个负数相加,结果为正数的错误;对于两个无符号数相加,不必考虑OV值。

第7位有进位,故进位标志C=1。对于两个无符号数相加,C=1即表示相加后有正常溢出,可用于多字节无符号数相加。对于两个带符号数相加,不必考虑C值。 【3-l8】阅读下列程序,说明其功能。

MOV R0,#30H MOV A, @R0 RL A

MOV RI,A RL A RL A

ADD A.Rl MOV @R0,A 【答】对程序注释如下:

MOV R0,#30H ;(RO)=30H M0V A,@R0 ;取数 RL A ;(A)×2 MOV R1,A

RL A ;(A)x 4 RL A ;(A)×8

ADD A,R1 ;(A)X i0 MOV @R0,A ;存数

功能:将30 H中的数乘以10以后再存回30H中。

条件:30 H中的数不能大于25,25×10=250仍为一个字节。若30H中的数大于25,则应考虑进位。 【3—19】已知两个十进制数分别在内部RAM中的40 H单元和50H单元开始存放(低位在前),其字节长度存放在内部RAM的30 H单元中。编程实现两个十进制数求和,求和结果存放在40 H开始的单元中。 【答】程序如下:

ORG 0000H SJMP MAIN ORG 0030H

MAIN:

MOV R0,#40H ;被加数首址.又作两个十进制数和的首址 MOV R1,#50H ;加数首址 MOV R2,30H ;字节长度 CLR C

PP: MOV A,@R1 ;取加数 ADDC A,@R0 ;带进位加 DA A ;二一十进制数调整 MOV @R0,A ;存和 INC R0 ;修正地址 INC R1

DJNZ R2,PP ;多字节循环加 AJMP $ END

【3—20】编程实现把外部RAM中从8000 H开始的100个字节数据传送到 8100开始的单元中。

【答】程序如下:

ORG 0000H SJMP MAIN ORG 0030H

MAIN:MOV DPTR,#8000H ;字节数据源首地址 MOV R1,#100 ;字节数据计数器 MOV R2,#01H MOV R3,#00H

PP: MOVX A,@DPTR ;读数据 MOV R4,A ;保存读出数据 CLR C

MOV A,DPL ;计算得到字节数据目的地址 ADD A,R3 MOV DPL,A

MOV A,DPH ADDC A,R2 MOV DPH,A

MOV A,R4 ;恢复读出数据

MOVX @DPTR,A ;写数据至目的地址 CLR C ;恢复源数据地址 . MOV A,DPL SUBB A,R3 MOV DPL,A MOV A,DPH SUBB A,R2 MOV DPH,A

INC DPTR ;地址加1

DJNZ R1,PP ;是否传送完? SJMP $

注意:字节数据源地址和目的地址都在外部RAM中,地址指针都为DPTR,所以要注意DPTR地址指针的保护和恢复。地址的保护和恢复的方法有多种,如通过堆栈或寄存器。 【3-2 1】读下列程序,请:

① 写出程序功能,并以图示意。 ② 对源程序加以注释。 ORG 0000H

MAIN:MOV DPTR,#TAB MOV R1,#06H LP: CLR A

MOVC A,@A+DPTR MOV P1,A

LCALL DELAY O.5 s . 、INC DPTR

DJNZ R1,LP AJMP MAIN’ TAB:DB 01H,03H,02H,06H,04H,05H DEL AY0.5 s: ······ RET END 【答】 .

① 程序功能:将TAB表中的6个参数依次从P1口中输出(每次输出延时0.5 s),然后

重复输出。P1口输出波形如图3-1所示。这是步进电机三相六拍输出波形。