Forum: Mikrocontroller und Digitale Elektronik (0x275) * 1,75 -> 0x276 - PIC 18 Assembler


von Jimmy (Gast)


Lesenswert?

Ich soll den Inhalt bei der Adresse 0x275 mit 1,75 mult. und dann in die 
Adresse 0x276 speichern.


Ist mein Code richtig?

Ich multiplieziere mit 7 und schiffte dann 2 mal nach rechts.

MOVLW 0x07

MOVLB 0x02
RRNCF 0x75,1,1
RRNCF 0x75,1,1

MULWF 0x75,1

MOVF 0x76


danke

von Dieter W. (dds5)


Lesenswert?

Jimmy schrieb:
> Ich multipliziere mit 7 und shifte dann 2 mal nach rechts.

Das ist im Prinzip richtig.

Der ASM-Code macht aber was ganz anderes als geplant und wird deshalb so 
nicht funktionieren.

> MOVLW 0x07

> MOVLB 0x02
> RRNCF 0x75,1,1
> RRNCF 0x75,1,1

Es war doch die Rede von erst multiplizieren und dann schieben.

> MULWF 0x75,1

> MOVF 0x76

Das Ergebnis (16 Bit) steht in den PRODL und PRODH Registern, da nutzt 
das Speichern von wreg nix.

Mein Favorit wäre:

MOVFF 0x275,WREG
MULLW 7
RRNCF PRODH,f
RRCF  PRODL,f
RRNCF PRODH,f
RRCF  PRODL,f
MOVFF PRODL,0x276

Dauert halt durch die 16 Bit Schieberei etwas länger, dafür kann man 
aber auch Werte über 36 verarbeiten, die sonst zu einem fehlerhaften 
Ergebnis führen würden.

von Jimmy (Gast)


Lesenswert?

auch wenn es schon lange her ist,
vielen danke für die Lösung.

hab das mit dem PRODH und RPODL einfach nicht kappiert.


jetzt klappt es so langsam.

danke nochmal für die Mühe.

Ich hab den code soeben getestet und funktioniert^^

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.