Gast
#255625
Hallo allerseits, ich habe folgendes Problem: Ich möchte eine Konstante (Zahl) mit dem Ergebnis einer 10bit ADC-Wandlung (temp2, temp1) multiplizieren. Dazu hat der ATMega8 den wunderschönen Hardware-Multiplizierer (mul Befehl). Das Ergebnis steht dann in den Registern r1:r0. Ich habe hierzu unten aufgelisteten Assembler-Code geschrieben. Im Simulator des AVR-Studios funktioniert alles einwandfrei. Nur in der Praxis scheint diese Routine nicht zu funktionieren. Sie basiert auf den Algorithmus der alten "Schul-Multiplikation". Andere Fehlermöglichkeiten habe ich ausgeschlossen. Der Fehler muß also in diesem Code-Schnipsel stecken. Wenn jemand Tipps für mich hätte, wäre ich sehr dankbar. .include "m8def.inc" .equ Zahl = 1251 .def temp1 = r16 .def temp2 = r17 .def temp3 = r18 .def temp4 = r19 ================================================================ ; Multiplikator Zahl = 1251 steht in den Registern temp4, temp3 ; Multiplikand (ADC-Wert) steht in den Registern temp2, temp1 ; Ergebnis soll dann in den Registern r23, r22, r21, r20 stehen ================================================================ . . . . ldi temp3, LOW(Zahl) ldi temp4, HIGH(Zahl) mul temp1, temp3 mov r20, r0 mov r21, r1 mul temp1, temp4 add r21, r0 adc r22, r1 mul temp2, temp3 add r21, r0 adc r22, r1 mul temp2, temp4 add r22, r0 adc r23, r1 . . . . Gruß Bernhard Bauer