Hallo,
er will damit folgendes sagen:
ldi ZH, HIGH(Daten*2)
ldi ZL, LOW(Daten*2)
add ZL, shift
lpm shift, Z
Du lädst hier richtig Z mit dem Zeiger auf die Tabelle.
Dann addierst Du den Offset zu Deinem passenden Byte.
Z ist aber ein 16Bit Wert. Wenn Du zu den unteren 8 Bit in ZL was
addierst, kann es natürlich auch einen Übertrag geben wenn Z z.B. 0x00FF
enthält und Du da 1 addierst muß richig 0x0100 rauskommen. Bei Dir kommt
aber dann 0x0000 raus.
Also mit adc (Add with Carry) den Übertrag dazurechnen.
Leider hat Atmel keine immediate-Version von adc eingebaut, Du mußt also
z.B. ein freies Register mit Inhalt 0 bemühen.
clr freies_regeister
ldi ZH, HIGH(Daten*2)
ldi ZL, LOW(Daten*2)
add ZL, shift
adc ZH, freies_register ; hier einen eventuellen Übertrag dazu
lpm shift, Z
dann sollte es wieder klappen.
Gruß aus Berlin
Michael