MCS-51单片机查表程序
发布网友
发布时间:2022-04-25 14:43
我来回答
共4个回答
热心网友
时间:2023-10-09 16:04
16和7是查表指令时的PC与数据表格之间的字节数
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
热心网友
时间:2023-10-09 16:04
“查表指令距离表首地址的长度”
当然指的是“字节数”,“指令”的长短是不一致的,占的长度也就不一致了,算错一位,查到的表内的内容就错的去了。用这种方法MOV A ,@R0
ANL A,#0FH
ADD A,#16
MOVC A, @A+PC
查表纯粹是给自己找麻烦。
热心网友
时间:2023-10-09 16:04
是指:字节数。
查表方法是运行中 求得结果 最便捷的方法。
热心网友
时间:2023-10-09 16:05
ADD
A,#16是要计算地址偏移量
ADD
A,#7
也一样
就是计算从查表的指令到表格之间有多少地址偏移
注意:
ADD
A,#7
//从此处开始--------
MOVC
A,@A+PC
MOV
@R1,A
INC
R0
INC
R1
DJNZ
R2,LOOP
DEC
R1
RET
//
到这里结束,中间共有7条指令,所以偏移量=7
TABLE:DB’012345678’