从程序存储器中读取数据序列 - AVR ATmega16
Reading a sequence of data from program memory - AVR ATmega16
我正在使用 AtmelStudio 7 为 AVR ATmega16 微控制器编写汇编代码。我正在尝试从程序内存中读取一些数据并使用它们。我知道我必须使用 Z 寄存器来指向程序存储器,并且预存储的数据由汇编器的标签 "BCDTo7_Seg" 识别。它确实读取了 table 中的第一个数字(我可以使用调试器看到这个过程)但是,当我 post 递增 Z 寄存器时,地址增加但读取值仍然相同!希望有人能帮助我。这是代码的一部分:
/* Simply start reading from program memory */
/* The reading from program memory must be done with the starting address: BCDTo7_Seg LABEL */
/* INITIALIZE Z POINTER */
ldi ZH,high(BCDTo7_Seg << 1)
ldi ZL,low(BCDTo7_Seg << 1)
clr R23
/* R23 contains the data must be written to the 7 segment */
/* Post Increment Z after reading each number */
lpm R23,Z+
/* decrement R16 */
dec R16
/* Check the loop end point */
brne R_W
rjmp start
每次执行时都会在开头设置指针。
ldi ZH,high(BCDTo7_Seg << 1)
ldi ZL,low(BCDTo7_Seg << 1)
我正在使用 AtmelStudio 7 为 AVR ATmega16 微控制器编写汇编代码。我正在尝试从程序内存中读取一些数据并使用它们。我知道我必须使用 Z 寄存器来指向程序存储器,并且预存储的数据由汇编器的标签 "BCDTo7_Seg" 识别。它确实读取了 table 中的第一个数字(我可以使用调试器看到这个过程)但是,当我 post 递增 Z 寄存器时,地址增加但读取值仍然相同!希望有人能帮助我。这是代码的一部分:
/* Simply start reading from program memory */
/* The reading from program memory must be done with the starting address: BCDTo7_Seg LABEL */
/* INITIALIZE Z POINTER */
ldi ZH,high(BCDTo7_Seg << 1)
ldi ZL,low(BCDTo7_Seg << 1)
clr R23
/* R23 contains the data must be written to the 7 segment */
/* Post Increment Z after reading each number */
lpm R23,Z+
/* decrement R16 */
dec R16
/* Check the loop end point */
brne R_W
rjmp start
每次执行时都会在开头设置指针。
ldi ZH,high(BCDTo7_Seg << 1)
ldi ZL,low(BCDTo7_Seg << 1)