51单片机查表指令

  • 格式:pdf
  • 大小:68.61 KB
  • 文档页数:2

下载文档原格式

  / 2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

根据存放在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