此篇文章中涉及的新指令如下:
数量 助记符 说明 字节数 执行时间 指令代码
1,MOV direct,#data 将立即数data送片内RAM direct地址单元 3 2 75H,direct,data
2,MOV A,direct 将direct地址单元内的数据送累加器A 2 1 E5H,direct
3,ADD A,Rn 寄存器内容加累加器内容结果存放至累加器中 1 1 28H-2FH
4,RL A 累加器循环左移 1 1 23H
5,MOV DPTR,#data16 将16位立即数data16送数据指针寄存器DPTR 3 2 90H,dataH,dataL
6,MOVX @DPTR,A 将累加器A的数据送数据指针DPTR寄存器所指外部RAM地址单元中 1 2 F0H
7,SJMP rel 短转移 2 2 80H,rel
8,MOV Rn,A 将累加器A内的数据送寄存器Rn 1 1 F8H-FFH
9,MUL AB 累加器A与寄存器B相乘 1 4 A4H
10,MOV Rn,#data 将立即数data送寄存器Rn 2 1 78H-7FH,data
11,MOVC A,@A+DPTR (A)+(DPTR)构成ROM地址,将该地址内的数据送到A中 1 2 93H
12,INC Rn 寄存器内容增1 1 1 08H-0FH
13,ADD A,#data 将立即数与A中内容相加结果存放至A中 2 1 24H,data
14,MOV @Ri,A 寄存器Ri内为片内RAM地址,将累加器A内的内容送到该地址 1 1 F6H-F7H
题2
将地址40H(内部RAM)存放的无符号数乘以10后存放至外部RAM地址为1000H处(设结果不产生溢出)
程序源码:
第一种方式:
;
;将内部RAM:40H存放的数乘10后存放至外部RAM:1000H处(设结果不产生溢出)
;
ORG 0000H
MOV 40H,#3;用于测试
MOV A,40H
RL A
MOV R1,A
RL A
RL A
ADD A,R1
MOV DPTR,#1000H
MOVX @DPTR,A
SJMP $
END
第二种方式:
ORG 0000H
MOV 40H,#3
MOV A,40H
MOV B,#10
MUL AB
MOV DPTR,#1000H
MOVX @DPTR,A
SJMP $
END
说明:第二种方式虽然简洁,但第一种方式更容易让人理解乘除法是怎样进行的,方便理解其原理。
题3
内部RAM地址为44H中存放一个 BCD 数(0~ 9),请将44H中的数进行平方+10后存放至内部RAM地址为45H中
程序源码:
注:进行平方运算时并没有采用MUL乘法指令,而是采用查表指令。凡是涉及平方运算首先想到能否构建平方表然后使用查表指令进行操作。
;
;设单片机的晶体震荡频率为 12MHz.
;内部RAM地址为44H中存放一个 BCD 数(0~ 9),请将44H中的数进行**平方+10**后存放至内部RAM地址为45H中
;
ORG 0000H
MOV 44H,#9
MOV R0,#44H
MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
ADD A,#0AH
INC R0
MOV @R0,A
SJMP $
TAB:
DB 0,1,4,9,16
DB 25,36,49,64,81
END