Carry- bzw. Zero Flag unter C abfragen

#342827
Lesenswert?
• ▲
▼
In der Regel sind die Bits im Statusregister, daß sich ganz normal
auslesen läßt.

Schau mal ins *.h-File mit den Device-Definitionen, da sollte es drin
stehen.
Und dann ins Datenblatt, welche Bitposition diese Bits haben.


In der Regel fragt man diese Bits aber nicht direkt ab, denn dazu ist
ja der Compiler da.

Z.B. das Zerobit:
if( i == j )

das Carrybit:
if( i < j )

D.h. man benutzt einfach den Testbefehl, der diese Bits ändert.


Peter
Gast #342828
Lesenswert?
• ▲
▼
Den C30 Compiler kenne ich nicht, aber direkt kannst Du diese Bits
normalerweise nicht auslesen.

Aber warum möchtest Du das denn tun?

In C kannst Du ja schreiben:

if (variable == 0)
{
  // zero flag gesetzt
}
else
{
  // zero flag nicht gesetzt
}

Der Compiler erzeugt dann automatisch den richtigen code, welcher das
zero flag ausliest.
Gast #342830
Lesenswert?
• ▲
▼
Vielen Dank für die schnellen Antworten.

Ich will ein Byte seriell aus einem Portpin herausschreiben.
Dazu schiebe ich das Byte 8 mal nach rechts. Dabei wollte ich dann das
Carry-Register abfragen (z. B. [if (Carry)] um bei einem gesetztem
'Carry' das Portbit zu setzen, bzw analog dazu zurückzusetzen. Somit
würde ich das Byte seriell in das Portbit schreiben. Oder ist das zu
umständlich gedacht?

Beste Grüße
Rudi
Gast #342834
Lesenswert?
• ▲
▼
So müsste es funktionieren. Hab es aber nicht getestet!

byte mask = 0x01;
byte value = 0xAA;
byte count =8;

while(counter--)
{
  if (mask & value)
  {
    port_pin=1;
  }
  else
  {
    port_pin=0;
  }

  mask << 1;
}
Gast #342836
Lesenswert?
• ▲
▼
Ja so wie Sepp würde ich das auch machen. Du kannst statt der Maske auch
den Value jeweils um ein Bit schieben; kommt aber aufs selber raus.

Auf Makros und Assembler würde ich so weit als möglich verzichten, da
Du dann auch bei zukünftigen / anderen Projekten mit anderen
Controllern / Compiler wieder auf den C-Code zurückgreifen kannst und
ihn nicht anpassen musst.
Gast #1734890
Lesenswert?
• ▲
▼
Also ich habe folgendes Prob. ich habe ein Byte in einem Register 
gespeichert und möcht nach und nach schauen ob ein Bit 1 oder 0 ist und 
diesen wert dann ausgeben wollte sie dazu in dem Register immer einen 
weiter schieben und dann das Carry auslesen. Kann ich Dann sowas wie 
if(Carry==1) schreiben oder hat jemand eine bessere idee zur auswertung?

Danke schonmal

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.