Forum: Mikrocontroller und Digitale Elektronik CarryBit - Wie und was


von Peter Steiner (Gast)


Lesenswert?

Was genau ist das CarryBit und wie kann man es beschreiben?

Wann wird es in der 8051-Familie benötigt?

Gruß und danke
Peter

von Oliver J. (skriptkiddy)


Lesenswert?


von STK500-Besitzer (Gast)


Lesenswert?

Wenn das Ergebnis einer Addition größer als der Wertebereich ist, dann 
wird das Carry-Bit gesetzt.

von crazy horse (Gast)


Lesenswert?

Grob gesagt das 9.Bit des Akkus.
Zeigt also einen Überlauf des Wertebereichs an.
Wikipedia sollte eine ausführliche Beschreibung liefern :-)

von spess53 (Gast)


Lesenswert?

HI

>Wenn das Ergebnis einer Addition größer als der Wertebereich ist, dann
>wird das Carry-Bit gesetzt.

Bei einer Subtraktion auch.

Auch für die 8051 sollte es eine Befehlsübersicht geben in der steht, 
welche Befehle das Carry-Flag beinflussen und welche das Flag benutzen.

MfG Spess

von Walter (Gast)


Lesenswert?

Peter Steiner schrieb:
> Was genau ist das CarryBit und wie kann man es beschreiben?
>
> Wann wird es in der 8051-Familie benötigt?

Hausaufgaben?

von spess53 (Gast)


Lesenswert?

Hi

>...und wie kann man es beschreiben?

CLR C          Lösche das Carry-Flag
SETB C          Setze das Carry-Flag
CPL C          Invertiere den Inhalt des C-Flag
ANL C,badr     Das Carry-Flag wird überschrieben durch das Ergebnis der
               UND-Verknüpfung von Carry-Bit und dem invertierten Inhalt
               von badr.
ORL C,badr     Das Carry-Flag wird überschrieben durch das Ergebnis der
               ODER-Verknüpfung von Carry-Bit und dem Inhalt von badr.
ORL C,badr     Das Carry-Flag wird überschrieben durch das Ergebnis der
               ODER-Verknüpfung von Carry-Bit und dem invertierten 
Inhalt
               von badr.
MOV C,badr     Lade in das Carry-Bit den Inhalt von badr.

MfG Spess

von Peter D. (peda)


Lesenswert?

Peter Steiner schrieb:
> Wann wird es in der 8051-Familie benötigt?

Man möchte ja vielleicht auch mit Zahlen >255 rechnen.


Peter

von Peter Steiner (Gast)


Lesenswert?

Danke für die schnellen Antworten!
Hat mich weitergebracht.

Ich frage mich nur wann man das in der Praxis braucht.
Z.B. MOV C,badr

wann und wie kann man das brauchen?

Gruß
Peter

von STK500-Besitzer (Gast)


Lesenswert?

Wenn ich mich recht erinnere, wird das Carry-Bit auch für andere 
Operationen verwendet.
Man kann es auch bei einem Shift als Eingangsvariable eines 
Schieberegisters verwenden. Dann kann man eine "Variable" mit einem Wert 
aus einer logischen Operation füllen und das dann auch noch in einer 
Schleife.

Kann aber auch sein, dass mein 8051-Assembler-Wissen inzwischen fürn 
Popo ist...

von spess53 (Gast)


Lesenswert?

Hi

>Ich frage mich nur wann man das in der Praxis braucht.
>Z.B. MOV C,badr

>wann und wie kann man das brauchen?

Das habe ich in 5sec durch Gurgel gefunden. Du solltest deine 
Such-Kompetenz verbessern.

MfG Spess

von Thomas E. (thomase)


Lesenswert?

STK500-Besitzer schrieb:
> Kann aber auch sein, dass mein 8051-Assembler-Wissen inzwischen fürn
> Popo ist...
Nee, nee.
rlc und rrc

mfg.

von Peter D. (peda)


Lesenswert?


von Peter Steiner (Gast)


Lesenswert?

Danke Peter,

der Link ist super!.


Hier habe ich mir noch ein Beispiel für das CarryBit bei Sprungbefehlen 
gebastelt:

mov p2, #0
start:
mov a, p1

cjne a,#128, ende
mov p2, #3
setb p2.0

ende:
jmp start;
end

Jetzt habe ich das gegessen.
Danke an alle für die Hilfe!
Gruß
Peter

von Thomas E. (thomase)


Lesenswert?

Peter Steiner schrieb:
> Jetzt habe ich das gegessen.
Gar nichts hast du gegessen, geschweige denn verstanden.
Was hat denn das mit dem Carry zu tun?
cjne heisst compare jump not equal.

So ein Tutorial fängt wie jedes Tutorial auf Seite 1 an. Tu dir selbst 
den Gefallen und fang' auch da an.

mfg.

von Peter Steiner (Gast)


Lesenswert?

Tschuldigung.

Ich hab das so gesehen, das wenn die Bedingung bei cjne erfüllt ist, 
also der wert bei 128 liegt, wird das carry bit gesetzt und er springt 
nicht direkt zur marke ende. Ist der Wert nicht 128 ist auch das carry 
bit nicht gesetzt.
Vielleicht ist es auch nicht das carrybit das hier gesetzt wird, sondern 
irgend was anders. Werde mir morgen mal die Seite 1 reinziehen.

Gruß
Peter.

von crazy horse (Gast)


Lesenswert?

ja, da gibts noch mehr status-bits, im Fall von cjne ist es das zero-bit 
(es wird eine Subtraktion ausgeführt, die flags entsprechend des 
Ergebnisses gesetzt, das eigentliche Ergebnis wird aber nicht in den 
Akku zurückgeschrieben.

von Peter D. (peda)


Lesenswert?

crazy horse schrieb:
> im Fall von cjne ist es das zero-bit

Nein, das Z-Bit ist eigentlich garkein richtiges Bit. Es ist direkt das 
NOR aus allen Bits des ACC.


Peter Steiner schrieb:
> Hier habe ich mir noch ein Beispiel für das CarryBit bei Sprungbefehlen
> gebastelt:

Nö. Du wertest C nirgends aus.

Das CJNE springt bei Ungleichheit.
Danach kann man dann noch C testen, ob größer oder kleiner.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter Steiner schrieb:
> Tschuldigung.
>
> Ich hab das so gesehen, das wenn die Bedingung bei cjne erfüllt ist,
> also der wert bei 128 liegt, wird das carry bit gesetzt und er springt
> nicht direkt zur marke ende. Ist der Wert nicht 128 ist auch das carry
> bit nicht gesetzt.

Das zeigt eigentlich, dass du das Carry Bit nicht verstanden hast.

Kannst du dich noch erinnern, als du in der Grundschule Addieren gelernt 
hast? Du hast das wahrscheinlich so gelernt wie ich auch:

Man schreibt die Zahlen untereinander und lässt noch ein wenig Platz ehe 
man dann den Strich macht

    457
    784

   -----

und dann rechnet man:
4 plus 7 macht 11, 1 hingeschrieben, 1 weiter

    457
    784
     1
   -----
      1

1 plus 8 macht 9, plus 5 macht 14. 4 hingeschrieben, 1 weiter

    457
    784
    11
   -----
     41

1 und 7 macht 8, plus 4 macht 12. 2 hingeschrieben, 1 weiter

    457
    784
   111
   -----
   1241

In einer Welt, in der nur 3 stellige Zahlen möglich sind, ist dieses 
letzte '1 weiter' der Carry, der Übertrag in die nächst höhere Stelle, 
den du im Ergebnis nicht mehr berücksichtigen kannst, weil deine 
Stellenanzahl limitiert ist. Das Ergebnis istr dann 241 und du hast 
einen Carry (nicht berücksichtigten Übertrag) von 1.
Und da bei einer binären Addition dieser Übertrag nur 0 oder 1 sein 
kann, reicht dann eben ein einzelnes Bit aus, um diesen Carry zu 
speichern.

Beitrag #6055010 wurde von einem Moderator gelöscht.
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.