如何增加SRAM中的地址,我想存储数量介于0到20之间的数据, 例: $ 60地址中的第一个数据存储 地址中的第二个数据存储区$ 61 。 。 。 。
谢谢
答案 0 :(得分:0)
AVR的寄存器文件具有三个指针,可用于内部数据访问。它们是 X (这是寄存器 r27:r26 的组合), Y ( r29:r28 )和 Z ( r31:r30 )。
运算符LD用于从地址ST加载数据以进行存储。
LDI r27, 0x05 // load 0x0543 into X register
LDI r26, 0x43
LD r16, X // read RAM at address X into register r16
...
ST Y, r16 // store a value from r16 into RAM at address Y
这三个寄存器都可以与递减或后递增一起使用。预减量首先将指针寄存器的值减1,然后访问该地址的数据。反之亦然,后递增首先访问数据,然后增加地址。语法为-X(或-Y / -Z)表示递减,X +(或Y + / Z +)表示递减:
LDI r27, 0x02 // Load 0x0200 into X pointer register
LDI r26, 0x00
LD r16, -X // decreases X register, now r27 contains 0x01 and r26 - 0xFF,
// and then reads value of RAM at address 0x01FF into r16
LDI r31, 0x03 // Load 0x0345 into Z pointer register
LDI r30, 0x45
ST Z+, r16 // stores value from r16 to address 0x0345, and increment r31:r30 by 1
// now r31 contains 0x03 and r30 - 0x46
因此,要将多个数据存储到连续的地址中,可以使用多个后递增指令:
LDI r27, 0x00 // Load 0x0060 into X
LDI r26, 0x60
ST X+, r16 // store r16 to 0x0060
ST X+, r17 // store r17 to 0x0061
ST X+, r18 // store r18 to 0x0062
ST X+, r19 // store r19 to 0x0063
etc...