《单片微型计算机与接口技术》思考题与习题解答01 下载本文

内容发布更新时间 : 2024/5/1 14:09:09星期一 下面是文章的全部内容请认真阅读。

2.9 对下列程序中各条指令作出注释,并分析程序运行的最后结果。 MUV 20H,#0A4H MOV A,#017)6H MOV R0,#20H MOV R2,#57H ANL A,R2 0RL A,@R0 SWAP A CPL A ORL 20H,A SJMP $

2.9 程序运行后内部RAM(20H)=B4H,A=90H

2.10 将下列程序译为机器码。 机器码 源程序

LA: MOV A,#01H LB: MOV P1,A RL A

CJNE A,#10,LB SJMP LA

2.10 机器码 源程序

7401 LA:M()V A,#01H F590 LB:M()V P1,A 23 RL A

B40AFA CJNE A,#10,LB 80F6 SJMP LA

2.11 将累加器A的低4位数据送P。口的高4位,P。口的低4位保持不变。 2.11 ANL A,#0FH SWAP A

ANL P1.#OFH ORL P1,A SJMP $

2.12 编程将R0(R2)的内容和R1(R3)的内容相交换。 2.12 MOV A,RO XCH A,R1 MOV R0,A SJMP $ 2.12 MOV A,R2 XCH A,R3 MOV R2,A SJMP $

2.13 试用3种方法将A累加器中的无符号数乘4,积存放于B和A寄存器中。 2.13

(1)利用乘法指令 MOV B,#04H

5

MUL AB SJMP $ (2) 利用位移指令 RL A RL A

MOV 20H。A ANL A,#03H MOV B,A MOV A,20H ANL A,#OFCH SJMP $

(3) 用加法指令完成 ADD A,ACC

MOV RO,A :RO=2A MOV A,#0 ADDC A。#0

MOV B,A ;B存2A的进位 MOV A,RO ADD A,ACC

MOV R1,A ;R1=4A MOV A,B

ADDC A,B ;进位x 2 MOV B,A ;存积高位 MOV A,R1 ;存积低位 SJMP $

2.14 编程将内部RAM 40H单元的中间4位变反,其余位不变放回原单元。 2.14 方法1:XRL 40H,#3CH SJMP $

方法2:MOV A,40H CPL A

ANL A,#3CH ANL 40H,#OC3H ORL 40H,A

SJMP $

2.15 有两个BCD码数存放在(20H)和(21H)单元,完成(21H)+(20H)=>(23H)(22H)。

(24H)+(25H)=>(23H)(22H)

2.15 MOV A,20H ADD A,21H DA A

MOV 22H,A ;存和低字节 MOV A,#O ADDC A,#0

MOV 23H,A ;存进位 SJMP $

6

2.15 MOV A,24H ADD A,25H DA A

MOV 22H,A ;存和低字节 MOV A,#O ADDC A,#0

MOV 23H,A ;存进位 SJMP $

2.16 如果R0的内容为0,将R1置为0,如R0内容非0,置R1为FFH,试进行编程。 2.16 MOV A.R0 JZ ZE

MOV R1.#OFFH SJMP $

ZE:MOV R1,#O SJMP $

2.17 完成(51H)×(50H)=>(53H)(52H)的编程(式中均为内部RAM)。 2.17 MOV A,50H MOV B,51H MUL AB MOV 53H。B MOV 52H,A

SJMP $

2.18 将P1.1和P1.0同时取反10次。(将P1.2和P1.0同时取反10次) 2.18 MOV R7,#0AH WOP:XRL P1,#03H DJNZ R7,WOP SJMP $

2.18 MOV R7。#0AH

WOP:XRL P1,#05H

DJNZ R7,WOP SJMP $

2.19 将内部RAM单元3字节数(22H)(21H)(20H)×2送(23H)(22H)(21H)(20H)单元。 2.19 单片机的移位指令只对A,且只有循环移位指令,为了使本单元的最高位移进下一单元的最低位,必须用大循环移位指令移位4次。

ORG O CLR C MOV A,20H RLC A MOV 20H,A MOV A,21H RLC A MOV 21H,A MOV A,22H

7

RLC A

MOV 22H.A MOV A,#O RLC A MOV 23H,A SLMP $

第3章 程序设计

3.1 编写程序,把片外数据存储器0000H~0050H中的内容传送到片内数据存储器20H~70H中。

3.1 因为是多个单元操作,为方便修改地址,使用问址操作。片外地址用DPTR指示.只能用M()Vx指令取数到A,片内地址用RO或R1指示,只能用MOV指令操作,因此,循环操作外部数据存储器一A一内部数据存储器。 ORG OOOOH

MOV DPTR,#0000H

MOV R0,#20H

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

INC DPTR INC R0

CJNE R0,#71H, LOOP SJMP $

3.2 编写程序,实现双字节加法运算,要求RIR0+R7R6=>(52H)(51H)(50H)(内部RAM)。 3.2 要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进位。

ORG 0 MOV A,RO ADD A,R6 MOV 50H,A MOV A,R7 ADDC A,R1 MOV 51H,A MOV A,#0 ADDC A,#O MOV 52H,A SJMP$

3.3 设X在累加器A中(0≤X≤20),求X2并将平方数高位存放在R7中,低位存放在R6中。试用查表法编出子程序。 3.3 A中放X(小于14H)的数,平方表的一个数据占2个字节,可用BCD码或二进制数存放(如A中放的是 BCD码,则要先化成二进制数再查表)。

ORG 0

MOV DPTR,#TAB ADD A,ACC ;A*2 PUSH ACC

MOVC A,@A+DPTR

8