Forum: Compiler & IDEs Registerinhalt komplett mit Dezimalzahl statt hex schreiben


von mgolbs (Gast)


Lesenswert?

Hallo,

wenn ich das zählende Timerregister TCNT1 eines ATTiny setzen will wäre 
es schön, nicht im hex Format schreiben zu müssen. 
Schreiben in Register - 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Schreiben_in_Register

Kann man das komplette Register auch statt PORTA = 0x03 mit PORTA = 3 
schreiben, oder mit einer uint8_t Variable wie PORTA = variable_1?

Über Tipps und Infos wäre ich sehr dankbar.

Gruß Markus

von Chris L. (kingkernel)


Lesenswert?

Geht. Ox gibt nur an das die folgende zahl in hex geschrieben ist. 
Kannst auch einfach portd = 200 schreiben

von Hermann E. (hermann_e)


Lesenswert?

Ich geb' das manchmal auch direkt binär an.
Der "Microsoft Calculator Plus" den ich wenn ich mich recht erinnere
hier http://www.microsoft.com/en-us/download/details.aspx?id=21622";
heruntergeladen habe rechnet dir das bequem ineinander um.
Bei binärer Schreibweise mit acht Stellen siehst du damit sofort welchen 
Registern du was antust.

von Teo D. (teoderix)


Lesenswert?

mgolbs schrieb:
> Kann man das komplette Register auch statt PORTA = 0x03 mit PORTA = 3
> schreiben, oder mit einer uint8_t Variable wie PORTA = variable_1?

Ähh, Sorry aber bevor ich so was frage, probiere ich es einfach aus!

von mgolbs (Gast)


Lesenswert?

Hallo,

vielen Dank für die Information. Dann sollte auch die Variable in 
uint8_t funktionieren?

Gruß und Dank Markus

von Mick (Gast)


Lesenswert?

Wenn du solche Fragen stellst, solltest du zuerst einmal ein Buch über C 
aufschlagen. Was Zahlenliterale und Variablen sind wird idR. auf den 
ersten Seiten erklärt. Du kannst nicht nach Tutorials programmieren, das 
wird nur schief gehen.

von Hermann E. (hermann_e)


Lesenswert?

Wenn die Frage

mgolbs schrieb:
> Dann sollte auch die Variable in
> uint8_t funktionieren?

richtig verstehe:

Ich sehe was die Wirkung angeht keinen Unterschied zwischen:

A)
uint8_t MyVar = 3;
PORTA = MyVar;

und B)
PORTA = 3;

von Peter D. (peda)


Lesenswert?

In C können ganze Zahlen generell in folgenden Formaten angegeben 
werden:
1
  i = 48;
2
  i = 0x30;
3
  i = '0';
4
  i = 060;
5
  i = 0b110000;

von Rolf Magnus (Gast)


Lesenswert?

mgolbs schrieb:
> vielen Dank für die Information. Dann sollte auch die Variable in
> uint8_t funktionieren?

Ja. Was läßt dich vermuten, daß das nicht geht?

Peter Dannegger schrieb:
> In C können ganze Zahlen generell in folgenden Formaten angegeben
> werden:
>   i = 48;
>   i = 0x30;
>   i = '0';
>   i = 060;
>   i = 0b110000;

Die letzte Zeile geht allerdings nicht "in C generell", sondern ist eine 
gcc-spezifische Erweiterung. Und das dritte gibt eigentlich keine Zahl, 
sondern ein Zeichen an.

von mgolbs (Gast)


Lesenswert?

Hallo,

danke für die vielen Hinweise. Ich stelle solche Fragen lieber doch, 
auch wenn man durch probieren, ..., sicher so manches "teilweise" 
herausfinden kann. Eine Lösung soll zuverlässig sein, und nicht in einem 
bestimmten Fall mit viel Restunsicherheit funktionieren. Es ist einfach 
eine Bestätigung von vermuteten Zusammenhängen durch Experten. Bestimmt 
wird es sicher so manchen weiteren Anfänger geben, oder Leute die nicht 
jeden Monat C programmieren, .., der beim googeln auf Foreneinträge 
stößt, die an sich primitiv sind und trotzdem hilfreich sind.

Vielen Dank und Gruß Markus

von Karl H. (kbuchegg)


Lesenswert?

mgolbs schrieb:

> eine Bestätigung von vermuteten Zusammenhängen

Eigentlich gibt es da so gut wie keinen Zusammenhang.

Eine Zuweisung hat eine linke Seite und eine rechte Seite.
Auf der rechten Seite des '=' steht im allgmeinen Fall ein Ausdruck. 
Dieser Ausdruck wird ausgewertet und das, was auch immer dann da raus 
kommt wird der linken Seite zugewiesen. Um die Zuweisung durchführen zu 
können, wird unter Umständen noch der Datentyp des Ergebnisses der 
rechten Seite auf den Datentyp der linken Seite angepasst. Aber das wars 
dann auch schon. Mehr Zusammenhang gibt es nicht.

Das warum es dir hier ging, sind eigentlich nur verschiedene 
Schreibweisen. Je nachdem, in welchem Zusammenhang man operiert, kann 
die eine oder andere Schreibweise vernünftiger als eine andere 
Schreibweise sein. Aber im Grunde sind es einfach nur unterschieddliche 
Schreibweisen, die letzten Endes ein Bitmuster beschreiben, mit dem im 
µC operiert wird. Dein µC weiß nichts von Dezimalzahlen oder 
Hexadezimalzahlen. Der manipuliert nur Bitmuster nach vorgegebenen 
Regeln.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Hermann E. schrieb:
> Der "Microsoft Calculator Plus" den ich wenn ich mich recht erinnere
> hier http://www.microsoft.com/en-us/download/details.aspx?id=21622";
> heruntergeladen habe rechnet dir das bequem ineinander um.

Und was bringt der MCP bei Registerwertberechnung für Vorteile gegenüber 
den eingebauten Fähigkeiten des Compilers?

von bildchen (Gast)


Lesenswert?

1
if (contains(answer, "Kann man") && ( forum == GCC ) ) {
2
   printf ("C Buch");
3
}
Warum wird denn nie geantwortet "Kauf Dir ein Elektronik-Buch", "Kauf 
Dir ein PHP-Buch" ?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Was soll denn der Käse mit Schleife?  Ist ja schlimmer als Quatsch mit 
Soße...

Im OP ist von Schleifenkonstrukt grad garnix zu sehen!

von nicht"Gast" (Gast)


Lesenswert?

Moin,

bildchen schrieb:
> Warum wird denn nie geantwortet "Kauf Dir ein Elektronik-Buch", "Kauf
> Dir ein PHP-Buch" ?

Weil die Frage: "wieviel Strom fließt denn über meinen 100Ohm 
Widerstand, wenn ich 5V drauf gebe?" sehr selten gestellt wird.

Auf diesem Niveau befindet sich nämlich die Frage des TE.


Grüße,

von nicht"Gast" (Gast)


Lesenswert?

Vergessen, bei meinem Vorpost zu schreiben.

nein, das ist nicht verwerflich diese Grundlagen nicht zu wissen.

Allerdings hilft einem dabei ein gutes Buch viel besser, als in einem 
Forum zu fragen, da ein Buch auch Fragen beantwortet (zumindest bei 
einem guten Buch) die man sich sonst evtl gar nicht gestellt hätte.


Grüße

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.