0

我创建了一个表格,其中有各种数据。我需要从该表中取出数据,对其进行更改,然后将其写回相同的位置,但是,由于某种原因,数据未写入该位置

这是我的代码

CSEG AT 3h
precos: DB 100, 200, 150, 170

Lookup:
    MOV DPTR, #precos    ; DPTR points to the start of the lookup table
    MOV A, #0           ; A is the offset from the start of the lookup table
    MOVC A, @A + DPTR   ; Moves the (A+1)th item into the Accumulator
    ADD A, #20
    MOV R1, #precos
    MOV @R1, A
    JMP Lookup

当我遍历代码时,A 从 0 到 100 到 120,然后它应该将其写入地址 3(表中的位置 0),再次取回它,再添加 20,等等... 像这样工作:

A = 0 - first iteration
A = 100
A = 120
A = 0 - second iteration
A = 100
A = 120
etc

我真正需要的是一种访问内存位置、更改它然后更新它的方法。这个:

A = 0 - first iteration
A = 100
A = 120
A = 0 - second iteration
A = 120
A = 140
etc

我一直在阅读各种东西,但找不到有效的答案。例如,这里显示了说明,但没有给出输出示例: http ://www.keil.com/support/man/docs/is51/is51_mov.htm

编辑:我不一定需要完全使用这种方式。我只需要一种方法来拥有一个变量,就像在 C 中一样,并执行以下操作:

整数变量 = 100;

for(;;) 变量 += 20;

4

1 回答 1

1

通常,8x51 微控制器不允许代码写入 MOVC 指令从中读取数据的地址空间。一些基于 8x51 的控制器或系统允许通过 MOVX 指令访问该空间,但可能需要将某些寄存器设置为某种方式来启用它。

于 2015-06-02T00:13:36.327 回答