MOV A ,@R0 取R0指向的地址中的数据到A
ANL A,#0FH ;高四位清零
ADD A,#16 ;加16
MOVC A, @A+PC ;查表,表的首地址为绝对地址PC+A
MOVC A,@A+PC就需要1个字节啊
查表指令距离表首地址的长度是字节数
用DPTR的汇编程序:
ORG 0100H
MOV 30H,#12H
MOV 31H,#34H
MOV 32H,#56H
MOV 33H,#78H
LCALL SUBRTE
ORG 1000H
SUBRTE: MOV R0,#30H ;置地址指针R0初值
MOV R1,#40H ;置地址指针R1初值
MOV R2,#4 ;置字节数
LOOP:MOV A,@R0 ;取16进制数
ANL A,#0FH ;屏蔽高4位
MOV DPTR,#TABLE ;
MOVC A,@A+DPTR;查表低4位转换为ASCⅡ码
MOV @R1,A ;送结果
INC R1;岩备谨修改指针
MOV A,@R0;从新取16进制数
SWAP A;高4位与低滚拍4位互换
ANL A,#0FH ;取高4位
ADD A,#7
MOVC A,@A+PC ;查表粗基高4位转换为ASCⅡ码
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP
DEC R1
RET
TABLE: DB '012345678'
DB '9ABCDEF'
END
MOV DPTR,#TABMOVC A,@A+DPTR
CPL A 理解这句
MOV P0,A
MOV DPTR,#TAB 这句是将TAB处的内容的地址移入DPTR寄存器(51单片机中唯一的一个16位的)
MOVC A,@A+DPTR 这句将(A寄存器中的内容+DPTR)中的贺含贺地址处的数据移入A
比如此时 A=0,DPTR=300,这时就将300+0寄存器里的数据移到A
如果A=2,DPTR=300,这时就将(300+2)寄存器里的数据移到A
CPL A A求反,
MOV P0,A 将A的值移入P0口,禅派老败用数码管等显示出来结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)