Forum: Mikrocontroller und Digitale Elektronik LPM Befehl funktioniert nicht ! Hilfe


von Kurt Späinghaus (Gast)


Lesenswert?

Hallo Leute,

Kann mir mal einer zeigen wie ich mit dem LPM Befehl richtig umgehe ?
Habe da Probleme das die Software nicht richtig im Mikrocontroller 
läuft.

Ich benutzte nen AT90S2313

Ich will eine Zahl aus dem Programmcodespeicher laden und diese Bitweise 
auf einen Ausgang scheiben.

Um dieses zu erreichen müsste es doch so Funktionieren :

...
... ; Sonstiger Code
...
LDI ZH,high(tabelle<<1)
LDI ZL,low (tabelle<<1)
LPM r16,z+
...
...
...
tabelle: .db 10,20,30,40


Wäre dieses so richtig ?

von Johanne Raschke (Gast)


Lesenswert?

Hi,

wußte gar nicht, daß man lpm noch Operanden geben kann...
Ich hab einfach nur lpm gemacht, dann ist der Wert in R0. Hast Du Dich 
in dieser Zeile vertippt?
Kannst ja einfach schreiben:

LDI ZH,high(tabelle<<1)
LDI ZL,low (tabelle<<1)
LPM
mov R16, R0

Was soll "z+" machen? Sowas wie in C ("z++") geht in ASM nicht...

Johannes

von crazy horse (Gast)


Lesenswert?

Z+ geht schon, allerdings nicht bei LPM. Wie schon gesagt, der 
LPM-Befehl schreibt immer das von Z adressierte Byte aus dem 
Programmspeicher nach r0. lpm hat keine weiteren Operanden.
Und das es den Befehl beim 1200er nicht gibt, stört mich mehr als alle 
anderen Einschränkungen.

von mikki merten (Gast)


Lesenswert?

Beim LPM Befehl gibt es sehr wohl Operanden, allerdings nur bei den AVR 
MEGA. Bei den normalen AT90S, soweit diese über den LPM Befehl verfügen 
wird im das durch den Zeiger ZL|ZH spezifizierte Byte aus dem Flash nach 
R0 übertragen. Bei den MEGAs gibt es noch die Spielarten:
LPM  Reg,Z
LPM  Reg,Z+
wobei Reg = R0 - R31

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.