Forum: Compiler & IDEs 16-Werte: Laufzeit vs Preprozessor


von UBoot-Stocki (Gast)


Lesenswert?

Hi,

ich habe in meinem Programm eine Anweisung
1
OCR1A = ADJ;
Wobwi ADJ als
1
#define ADJ 50000-130
definiert ist.

Ich möchte mun den Korrekturwert (die 130) während der Laufzeit des 
Programms verändern. Das stellt mich vor das Problem ein "int" oder aber 
ein "unsigned int" in das Register OCR1A zu schreiben.

Wei geht das? Wie kann man (zur Laufzeit) das Register füllen?

Gruß

Andreas

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich verstehe dein Problem nicht?
1
uint16_t wert = 123; //unsigned int
2
3
OCR1A = wert;

von UBoot-Stocki (Gast)


Lesenswert?

Hi,

OK - hätte es besser beschreiben können:

Das Register OCR1A ist ja ein 16-Bit-Register. Es wird vom Compiler 
gemanaged, dass es richtig geschrieben wird, wenn man das o.g. Kommando 
verwendet (Präprozessor).

Meine Frage war:

Wie kann ich es aus dem Programm heraus beschreiben? Ich werde einen 
8-Bit-Wert haben. Den kann ich über ein cast zu dem 16-BIT-Wert 
addieren. lässt sich dann, wie von Simon beschrieben das Register mit 
dem 16-BIT-Wert schreiben ? Das wäre ja einfach ...

Gruß

Andreas

von Falk B. (falk)


Lesenswert?

@ UBoot-Stocki (Gast)

>addieren. lässt sich dann, wie von Simon beschrieben das Register mit
>dem 16-BIT-Wert schreiben ? Das wäre ja einfach ...

Ja, klar, warum nicht?

MfG
Falk

von Simon K. (simon) Benutzerseite


Lesenswert?

UBoot-Stocki wrote:
> lässt sich dann, wie von Simon beschrieben das Register mit
> dem 16-BIT-Wert schreiben ? Das wäre ja einfach ...

Klar, wie sonst? :-) Kannst es ja mal einfach ausprobieren. Wenns geht, 
dann gehts ;)

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.