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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren