51单片机查表指令的用法

来源:本站
导读:目前正在解读《51单片机查表指令的用法》的相关信息,《51单片机查表指令的用法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机查表指令的用法》的详细说明。
简介:本文说一下“MOVC A, @A+DPTR”查表指令的用法。

51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:

MOVC A, @A + PC

MOVC A, @A + DPTR

其中前一条指令的用法,比较难,使用的时候,需要计算一个“偏移量”。不了解“指令的字节数”的人,都不清楚应该如何计算。

“偏移量”的自动计算方法,可见如下问答:

【问】单片机查表程序编写 急!利用MOVC A,@A+PC指令编写一查平方表程序,将片内30H~39H内的数查平方后送入40H~49H单元,30H~39H预先存入数据为 1,3,5,7,9,2,4,6,8,10. 麻烦高手编下程序啊。。。查表的不会写~~

【答】

org  0000h

mov 30h, #1

mov 31h, #3

mov 32h, #5

mov 33h, #7

mov 34h, #9

mov 35h, #2

mov 36h, #4

mov 37h, #6

mov 38h, #8

mov 39h, #10

call SQRT

sjmp $

;查表法求平方的程序如下。

SQRT:

MOV R0, #30H

MOV R1, #40H

MOV R2, #10

LOOP:

MOV A, @R0

ADD A, #S_TAB - ($ + 4)

MOVC A, @A + PC

MOV @R1, A

INC R0

INC R1

DJNZ R2, LOOP

RET

S_TAB:

DB 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

;完

然后我说一下“MOVC A, @A+DPTR”查表指令的用法。

【问】汇编语言里面的查表法是什么意思啊。在单片机里面是怎么运行的啊~~~~我不知道汇编里面的查表法究竟是什么意思~~主要是我不知道他的原理是什么。

【答】

51单片机汇编语言有一条查表指令是:

MOVC A, @A + DPTR

它不是单独使用的,要和 DB 伪指令配套使用。

例如:若累加器A中有一个0~9的数,请用查表法求出该数的平方值,设平方表表头地址为1000H。

程序如下:

;-------------------------------------

MOV DPTR, #1000H

MOVC A, @A + DPTR

……

ORG 1000H

DB 0, 1, 4, 9, 16, 25......

;-------------------------------------

DB 伪指令从 ROM 1000H 开始,顺序存放了一系列的“平方”数据。

MOVC A, @A+DPTR 指令中的A,如果等于0,就会在“平方”数据中取出第0个,就是0;

MOVC A, @A+DPTR 指令中的A,如果等于1,就会在“平方”数据中取出第1个,就是1;

MOVC A, @A+DPTR 指令中的A,如果等于2,就会在“平方”数据中取出第2个,就是4;

MOVC A, @A+DPTR 指令中的A,如果等于3,就会在“平方”数据中取出第3个,就是9;

……

MOVC A, @A+DPTR 指令中的A,如果等于9,就会在“平方”数据中取出第9个,就是81。

-------------------------------

=============================================

后记:

这条指令的用法,相对前一条就简单了,事先并不需要计算“偏移量”。但是这条指令必须要使用寄存器DPTR。

大家知道,凡是涉及到片外RAM存储单元的时候,基本上都要使用DPTR,这个DPTR寄存器通常是比较“繁忙”的,它形成了一个片内、片外之间,数据传传输的“瓶颈”。因此在读取ROM数据的时候,能够不用这后一条指令,就不要用它,应该尽量使用前一条指令。

=============================================

提醒:《51单片机查表指令的用法》最后刷新时间 2024-03-14 00:57:38,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机查表指令的用法》该内容的真实性请自行鉴别。