Syntax: |
Operation: |
Operands: |
Program Counter: |
Opcode |
Comment: |
Stack |
ELPM |
R0 = PS(RAMPZ:Z) |
None, R0 implied |
PC = PC + 1 |
1001010111011000 |
RAMPZ:Z: Unchanged, R0 implied destination register |
|
ELPM Rd, Z |
Rd = PS(RAMPZ:Z) |
0 <= d <= 31 |
PC = PC + 1 |
1001000ddddd0110 |
RAMPZ:Z: Unchanged |
|
ELPM Rd, Z+ |
Rd = PS(RAMPZ:Z) |
0 <= d <= 31 |
PC = PC + 1 |
1001000ddddd0111 |
(RAMPZ:Z) = (RAMPZ:Z) + 1 RAMPZ:Z: Post incremented |
Loads one byte pointed to by the Z-register and the RAMPZ Register in the I/O space, and places this byte in the destination register Rd. This instruction features a 100% space-effective constant initialization or constant data fetch. The program memory is organized in 16-bit words while the Z-pointer is a byte address. Thus, the least significant bit of the Z-pointer selects either low byte (ZLSB == 0) or high byte (ZLSB == 1). This instruction can address the
entire program memory space. The Z-Pointer Register can either be left unchanged by the operation, or it can be incremented. The incrementation applies to the entire 24-bit concatenation of the RAMPZ and Z-Pointer Registers.
Devices with self-programming capability can use the ELPM instruction to read the Fuse and Lock bit value. Refer to the device documentation for a detailed description.
This instruction is not available on all devices. Refer to Appendix A.
The result of these combinations is undefined:
ELPM r30, Z+
ELPM r31, Z+
I |
– |
||
T |
– |
||
H |
– |
||
S |
– |
||
V |
– |
||
N |
– |
||
Z |
– |
||
C |
– |
ldi ZL, byte3(Table_1 << 1) ; Initialize Z-pointer out RAMPZ, ZL ldi ZH, byte2(Table_1 << 1) ldi ZL, byte1(Table_1 << 1) elpm r16, Z+ ; Load constant from Program ; memory pointed to by RAMPZ:Z (Z is r31:r30) ... Table_1: dw 0x3738 ; 0x38 is addressed when Z_LSB == 0 ; 0x37 is addressed when Z_LSB == 1 ...
1 (2 bytes)
Name |
Cycles |
AVRe |
3 |
AVRxm |
3 |
AVRxt |
3 |
AVRrc |
N/A |