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