PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : FLAG



Exodus
27.04.2006, 10:31
Hallo LEUTZ!

Habe in der assemblersprache viel gehört über flags! :-s Was ist dass eigentlich und wozu braucht man es??

MFG
Mike

ceekay
27.04.2006, 12:07
Als Flag bezeichnet man ein bit welches beispielsweise gesetzt wird wenn ein bestimmtes Ereignis eintritt.

Wenn man z.b wissen möchte wann ein Byte komplett empfangen wurde gibt es dafür ein Bit (Flag) welches gesetzt wird wenn das Byte angekommen ist. Dann braucht man nur dieses Flag abzufragen. Und wenn es gesetzt ist, dann kann man das Byte auslesen.

War jetzt nur ein Beispiel. So gibt es in Controller jede Menge Flags die bei bestimmten Ereignissen gesetzt werden

T.J.
28.04.2006, 06:04
flagtabelle müsste in den Datenblättern stehen.
oder: http://www.avr-asm-download.de/beginner_de.pdf

Exodus
28.04.2006, 10:28
Kapier ich nicht ganz mit FLAG! warum nimmt man nicht einfach z.b: Vergleiche R16 mit R17. Wenn gleich nächsten Schritt übersrpingen!
Bitte um Rückantwort

MFG
Mike

Vitis
28.04.2006, 11:48
moment, du vergleichst hier Register,

Der Flag wird von der Hardware z.B. automatisch gesetzt,
z.B. wenn die UART n Zeichen empfangen hat oder
der UART-Puffer leer ist.
Das macht der Kerl von selber.
Beispiel:
ich bastle mir ne Verbindung von µC zu µC per RS485.
Dann muss ich den Busbaustein vor jedem Senden in
Sendemodus schalten und nach dem Senden auf Empfang.
Woher weiß ich nun, das das Zeichen das ich an die UART
geschickt habe auch schon übertragen wurde?
Richtig, aus dem Flag das der Controller setzt wenn das der Fall ist.
Schalte ich den Busbaustein zu früh um gehen die gesendeten Daten ins
Nirvana, ergo schalte ich um, sobalt das Flag da ist, der µC kann derweil
was anderes machen.

Exodus
28.04.2006, 11:59
Also dass heißt! Flags sind nur nützlich wenn mehrere uc kommunizieren oder?

MFG
Mike

urkel_
28.04.2006, 12:44
Nein. Flags sind einzelne Bitwerte die vom Prozessor gesetzt werden um Eigenschaften von Berechnungen bzw. Ereignissen anzuzeigen.

Das kann bei der Kommunikation zw. 2 µC geschehen, aber auch bei einer Berechnung oder bei einem Interrupt ...

Z.B. das Negativ Flag zeigt an ob ein Wert <0 geworden ist bei einer Berechnung.
Weitere Beispiele: Zero-Flag, Carry-Flag ...
Interrupt-Flag -> Infos über Interrupts
Es gibt noch viele Beispiele. Schau mal ins Datenblatt irgendeines µC (z.B. AT Mega8) dort steht einiges über Flags.

urkel_
28.04.2006, 12:47
@ceekay: Ich weiss das du genau das gleiche geschrieben hast :) Ich dachte nur das exodus es vieleicht in anderen Worten versteht ;)

Exodus
28.04.2006, 13:13
Bitte zeigt mir ein beispiel!? BÜDDE

MFG
MIKE

urkel_
28.04.2006, 13:32
http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf

izaseba
28.04.2006, 14:32
Man kann sich selber einen Flag erstellen....

ein Register für Flags z.B


.def Flags = R 16
.equ taste = 0


in einem Timerinterrupt z.B. prüfen ob eine Taste gedrückt wurde und mit sbr Flags,1<<taste den Flag setzen (bit 0 vom Register Flags auf 1)

In der loop Schleife, braucht man nur hin und wieder den Bit mit sbrc oder sbrs prüfen,entsprechend abzweigen und anschließend mit
cbr Flags,1<<taste löschen.

Wie gesagt es gibt viele Beispiele.

Gruß Sebastian

Vitis
28.04.2006, 14:46
Beispiel leerer Sendepuffer:

do
loop until Ucsra.txc=1 (prüfen auf leeren Sendepuffer)

Exodus
02.05.2006, 07:17
Für was steht ".equ Taste = 0"????

izaseba
02.05.2006, 17:10
Für was steht ".equ Taste = 0"????

.equ - Wertzuweisung, der Konstante Taste wird 0 zugewiesen, in dem Beispiel Bit Nummer 0

Gruß Sebastian