51单片机查表指令
- 格式:pdf
- 大小:68.61 KB
- 文档页数:2
根据存放在ROM中数据表格的项数来查找和它对应的表中值。
专门的查表指令:
MOVC A,@A+DPTR
MOVC A,@A+PC
------------------------------------------------------------------------------------------
MOVC A,@A+DPTR
执行过程:查表前要把数据表格起始地址放入DPTR,
然后把要求查表的项数折算成相对数据表地址的的偏移量送入累加器A
最后使用MOVC A,@A+DPTR
可实现64KB地址范围内的数据查询。
MOVC A,@A+PC
执行过程:
1:利用传送指令把所查数据表格的项数送入累加器A
2:使用ADD A,#data指令对累加器A进行修正。Data值的确定公式:
PC+data=数据表起始地址DTAB
其中PC是查表指令的下一条指令码的起始地址
所以data值等于查表指令和数据表存放初始地址之间的字节数。
3:利用MOVC A,@A+PC来完成查表
只能实现256字节范围内的数据查询
例:查表程序
已知BLOCK1为起始的数据块(数据块长度在LEN单元),数块中每个存储单元中的高,低4位分别是两个十六进制数,请编程把他们转换成相应的ASCII码,并存放在BLOCK2开始的连续存储单元(低四位ASCII码在前,高四位ASCII码在后)
程序实例:
ORG1000H
LEN DATA30H;块长度
BLOCK1DATA31H;源起始位置
BLOCK2DATA51H;目标起始位置
MOV R0,#BLOCK1;BLOCK1送R0
MOV R1,#BLOCK2;BLOCK2送R1
MOVA,@R0;取源数据块的数
ANL A,#0FH;取与运算,得到后四位
ADD A,#11H
;第一次地址调整0x11=1+1+1+2+2+1+1+1+1+1+3+2就是17个字节MOVCA,@A+PC
MOV@R1,A;存放第一次转换结果1B
MOV A,@R0;重新取出被转换数1B
SWAP A;高低四位交换1B
ANL A,#0FH;取低四位2B
ADD A,#09H;9=1+1+1+1+3+22B
;第二次地址调位置调整的算法。。查表指令和数据表起始位置之间的字节数MOVC A,@A+PC;第二次查表1B
INC R1;修改目标数据快指针1B
MOV@R1,A;存放第二次转换结果1B
INC R0;源数据指针修改1B
INC R1;1B
DJNZ LEN,Loop;3B
SJMP$;2B
ASCTAB:
Db'0','1','2','3','4'
Db'5','6','7','8','9'
Db'A','B','C','D','E'
END