Forum: Mikrocontroller und Digitale Elektronik Check: ASM nach C richtig übersetzt?


von Tüll (Gast)


Lesenswert?

Hallo

Kann leider kein Assembler.

Hab ich den Code richtig interpretiert? Vorallem bei den Vergleichen 
(>/<) und Sprüngen bin ich unsicher.

1
  ;Check and adjust the pwm value according to the output of the dc-dc converter.
2
  in temp,ocr0b  ;get current pwm value
3
  subi temp,2  ;assume it's too high
4
  sbis pind,6  ;>20V?
5
   subi temp,-4  ;Nope -> cancel the assumed value and add 2.
6
  cpi temp,$f0  ;Underflow?
7
  brlo noudf  ;Nope -> skip
8
  ldi temp,0  ;Undo underflow
9
noudf:
10
  cpi temp,$50  ;Overflow?
11
  brlo noovf  ;Nope -> skip
12
  ldi temp,$50  ;Undo overflow
13
noovf:
14
  out ocr0b,temp  ;and set the pwm value



Übersetze ich nach:

1
temp = OCR0B;
2
3
if (PD6 = 0) temp += 2;
4
else temp -= 2;
5
6
if (temp > 240) temp = 0;  // Diese zwei Zeilen machen doch keinen Sinn?
7
if (temp > 80) temp = 80;  // OCR0B wurde mit 20 initialisert, kann also nie grösser als 82 werden
8
// Ich vermute der Wert soll zwischen 80 und 240 gehalten werden. Aber das steht nicht so da, oder?
9
10
OCR0B = temp;

von Tüll (Gast)


Lesenswert?

Moment. Meint er mit Underflow dass die Variable ins "minus" rutscht und 
dann einen Wert > 240 hat?

Dann soll der Wert zwischen 0 und 80 gehalten werden...

von Hannes L. (hannes)


Lesenswert?

Tüll schrieb:
> Moment. Meint er mit Underflow dass die Variable ins "minus" rutscht und
> dann einen Wert > 240 hat?
>
> Dann soll der Wert zwischen 0 und 80 gehalten werden...

Genau...

...

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.