Forum: Mikrocontroller und Digitale Elektronik Kurze Verständnisfrage - low/high byte


von M. M. (mrmcchicken)


Lesenswert?

Hallo allerseits,
ich habe eine kleine Verständnisfrage bezüglich 16 Bit Registern.
Dazu einmal der Code aus einem Tutorial hier auf der Seite:
1
   
2
        ldi     temp1, high( 40000 - 1 )
3
        out     OCR1AH, temp1
4
        ldi     temp1, low( 40000 - 1 )
5
        out     OCR1AL, temp1

Das OCR1A Register ist ja bekanntlich ein 16 Bit Register.
1. Der Befehl in der ersten Zeile sucht sich durch das "high" die ersten 
höheren 8 Bit von 4000 - 1 raus richtig?
Diese werden dann in das Register OCR1AH geschrieben.
Ab Zeile 3 passiert das selbe mit den unten 8 Bit?

2. Zu den Registern: OCR1AH / OCR1AL
Ich habe das so verstanden dass diese (wie SPH und SPL beim Stack 
Pointer) am ende mit H und L gekennzeichnet sind da sie ja die höheren 
und die unteren 8 Bit sind. Besteht also das OCR1A Register aus zwei 
acht Bit Registern und ist kein einzelnes 16 Bit Register?

MfG

von Axel S. (a-za-z0-9)


Lesenswert?

konrad M. schrieb:
> 1. Der Befehl in der ersten Zeile sucht sich durch das "high" die ersten
> höheren 8 Bit von 4000 - 1 raus richtig?
> Ab Zeile 3 passiert das selbe mit den unten 8 Bit?

high() und low() sind Assembler-Pseudooperatoren. Sie werden zur 
Übersetzungszeit ausgeführt und können folglich auch nur auf Werten 
operieren, die zur Übersetzungszeit bekannt (und konstant) sind. Sie 
sollen dir das Schreiben von Code erleichtern, genauso wie die 
Möglichkeit mit Konstanten zu rechnen.

> 2. Zu den Registern: OCR1AH / OCR1AL
> Ich habe das so verstanden dass diese (wie SPH und SPL beim Stack
> Pointer) am ende mit H und L gekennzeichnet sind da sie ja die höheren
> und die unteren 8 Bit sind. Besteht also das OCR1A Register aus zwei
> acht Bit Registern und ist kein einzelnes 16 Bit Register?

Das ist eher eine philosophische Frage. Ist das DDRA Register wirklich 
ein 8-Bit Register oder besteht es aus 8 einzelnen Bits? Ist das ADMUX 
Register ein 8-Bit Register oder nicht eher ene Kombination aus einem 
4-Bit Register und ein paar Einzelbits? Usw. usf.

Aber da der 8-Bit-Kern des AVR keine Daten mit mehr als 8 Bit auf einmal 
lesen oder schreiben kann, muß man zwangsläufig alle breiteren 
Datenquellen (bzw. -Senken) in 8-Bit Häppchen unterteilen.


XL

von M. M. (mrmcchicken)


Lesenswert?

Ah, okay, vielen dank! :)
Gibt es irgendwo ein Liste der Assembler-Pseudooperatoren?
Wäre praktisch zu wissen was es da noch so gibt.
Irgendwie konnte ich über Google nichts finden.
Haben die vielleicht noch eine andere Bezeichnung?

MfG

von spess53 (Gast)


Lesenswert?

Hi

>Gibt es irgendwo ein Liste der Assembler-Pseudooperatoren?

AVR Studio->Hilfe zum Assembler->Users Guide->Expressions

MfG Spess

von Michael (Gast)


Lesenswert?

konrad M. schrieb:
> Gibt es irgendwo ein Liste der Assembler-Pseudooperatoren?

Da mußt du mal das Handbuch deines Assemblers fragen.

von Konny (Gast)


Lesenswert?

konrad M. schrieb:
> Das OCR1A Register ist ja bekanntlich ein 16 Bit Register.

Sowas bitte nur schreiben, wenn du auch deinen konkreten µC erwähnst. 
Man kommt sich sonst so doof vor.

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.