Forum: Mikrocontroller und Digitale Elektronik Register setzten - Dezimal?


von Jeromyo H. (jeromyo) Benutzerseite


Lesenswert?

Hi,

ganz kurze und schlechte Frage:

Kann man in Register statt mit Hexadezimalzahlen, Binärzahlen oder 
Shiftbefehlen auch mit Dezimalzahlen setzten?
Also statt: (Die Oderverknüpfung nur exemplarisch)

DDRA |= 0x10    Oder
DDRA |= (1<<4)  Oder
DDRA |= 0b00010000

DDRA |= 16

von Steel (Gast)


Lesenswert?

logisch geht das, es macht nur keinen Sinnn, da man nicht mehr auf den 
esrten Blick sehen kann, welches Bit denn nun gesetzt wird.

von Jeromyo H. (jeromyo) Benutzerseite


Lesenswert?

Ok, danke :)

von Thomas E. (thomase)


Lesenswert?

Steel schrieb:
> logisch geht das, es macht nur keinen Sinnn, da man nicht mehr auf den
> esrten Blick sehen kann, welches Bit denn nun gesetzt wird.
Richtig.
Viel Spaß mit "DDRX |= 237;"

Jeromyo Hochgesang schrieb:
> oder Shiftbefehlen
Das sind keine Shiftbefehle. Die werden vom Compiler ausgerechnet und 
letztlich binär ins Prozessorregister geschrieben. Da brauchst du dir um 
die Performance keine Sorgen machen.

mfg.

von Jeromyo H. (jeromyo) Benutzerseite


Lesenswert?

Danke Thomas
Stimmt, das mit dem "wegoptimieren" der Befehle durch den Compiler stand 
ja sogar im AVR GCC Tut. facepalm

von Wilhelm F. (Gast)


Lesenswert?

Manche Assembler bieten eine Voreinstellung, wie Zahlen ohne Postfix 
dezimal oder hexadezimal oder gar oktal interpretiert werden. Die 
Voreinstellung ist oft dezimal. Bei hexadezimal fügt man seinen Zahlen 
ein H an. Wenn man ganz sicher gehen will, fügt man auch Dezimalzahlen 
den Postfix D an.

Gelegentlich arbeite ich mit dem Assembler auch noch in BCD-Arithmetik. 
Das ist eine Frage des Vorhabens, ob man effektiver BCD oder BIN 
verarbeiten möchte.

Einmal rechne ich direkt in BCD-Arithmetik, wenn Werte auf einem Display 
ausgegeben werden, und gar nicht viel intern gerechnet wird. Ein anderes 
mal hexadezimal, wenn intern noch viel gerechnet wird. Dann braucht man 
eine kleine Umwandlungsroutine BCD-BIN und BIN-BCD. Die belegt weniger 
Codespeicher, braucht dafür aber mehr RAM-Zellen. Es ist eine 
Abwägungssache. Ich habe es ja oft mit spartanischen Rechnern zu tun, 
kleine PIC, oder 8048.

Für die BCD-Arithmetik gibt es oft einen Befehl DA, Decimal Adjust. 
Primitive Rechenwerke haben den auch nicht, da muß man bei Überträgen 
eine 6 addieren, wenn das Ergebnis die 9 überschreitet, oder 
subtrahieren, wenn es 0 unterschreitet. Dort ist direktes Rechnen mit 
BCD-Zahlen lästig.

Meine Assembler machen alle z.B. aus MOV A,#64 ein MOV A,#40H. Um 
absolut sicher zu sein, hängt man der Dezimalzahl ein D an, z.B. 64D. 
Der Assembler wandelt die 64D dann in 40H um.

von Mystik (Gast)


Lesenswert?

Jeromyo Hochgesang schrieb:
> Hi,
>
> ganz kurze und schlechte Frage:
>
> Kann man in Register statt mit Hexadezimalzahlen, Binärzahlen oder
> Shiftbefehlen auch mit Dezimalzahlen setzten?
> Also statt: (Die Oderverknüpfung nur exemplarisch)
>
> DDRA |= 0x10    Oder
> DDRA |= (1<<4)  Oder
> DDRA |= 0b00010000
>
> DDRA |= 16

....hmmm,ich kann mich noch dunkel daran erinnern, das ich  mir als 
Anfänger die selbe Frage stellte.....verblüffend einfach kam ich zur 
Antwort....ich probierte es einfach aus und schaute was der Kompiler 
sagte....

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.