Hallo,
ich habe eine wohl einfache Frage zu Assembler, da ich diese Sprache
aber eigentlich nicht brauche und auch nicht lernen möchte, da ich den
fertigen Code von einem Projekt übernehme, stelle ich sie kurz hier.
Folgender Codeausschnitt soll den Vorteiler eines ATmega PWMs bei
bestimmten Einstellungen des Potis ändern.
1
Convert3:
2
sts sCmp,R7 ; speichere im SRAM
3
sts sCmp+1,R8
4
mov ZL,rAdc0L ; kopiere ADC0 nach Z
5
mov ZH,rAdc0H
6
ldi XL,LOW(392)
7
ldi XH,HIGH(392)
8
ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS10)
9
cp ZL,XL
10
cpc ZH,XH
11
brcc Convert4
12
ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS11)
13
ldi XL,LOW(225)
14
ldi XH,HIGH(225)
15
cp ZL,XL
16
cpc ZH,XH
17
brcc Convert4
18
ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS10)|(1<<CS11)
19
ldi XL,LOW(60)
20
ldi XH,HIGH(60)
21
cp ZL,XL
22
cpc ZH,XH
23
brcc Convert4
24
ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS12)
25
cpi ZL,3
26
brcc Convert4
27
ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS12)|(1<<CS10)
Ich benötige aber konstant den Vorteiler "1", also der, der bei 392
gesetzt wird. Die Vorteiler werden sonst ja offentlich bei 3, 60, 225
und 392 geändert. Wie baue ich den Code nun um, dass nur der eine
Vorteiler, unabhängig vom Potiwert, benutzt wird?
Mein Vorschlag wäre jetzt gewesen:
1
Convert3:
2
sts sCmp,R7 ; speichere im SRAM
3
sts sCmp+1,R8
4
mov ZL,rAdc0L ; kopiere ADC0 nach Z
5
mov ZH,rAdc0H
6
brcc Convert4
7
ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS12)|(1<<CS10)
Macht das Sinn? Sorry wie gesagt, möchte nicht Assembler lernen da ich
es nur für diese eine Sache brauche, vll. erbarmt sich ja jemand :)
Jörg schrieb:
> möchte nicht Assembler lernen da ich> es nur für diese eine Sache brauche
Das soll dich aber nicht daran hindern, ins Datenblatt zu schauen ...
> Mein Vorschlag wäre jetzt gewesen:>
>> Macht das Sinn?
... denn das ist kein Vorteiler von 1
Machs dir doch einfach:
In dem Code werden offenbar verschiedene Vorteiler gesetzt, je nach
Bereich, in dem sich der ADC Wert abspielt.
Wenn nun in all den unterschiedlichen Fällen immer der gleiche Vorteiler
gesetzt wird (die 'alte' Belegung als Kommentar dazuschreiben, wer weiß
ob man die nicht noch einmal braucht) ... brauchst du den Code nicht
weiter analysieren und hast trotzdem dein Ziel erreicht.
Jörg schrieb:
> Mit ein wenig nachdenken glaube ich, dass der Vorteiler offenbar dieser> sein muss:> ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS10)
Das sieht schon besser aus.
Du solltest aber trotzdem mit dem Datenblatt kontrollieren.
Schon alleine die Neugier, was eigentlich WGM13 + WGM12 bewirkt, sollte
einem das Wert sein :-)